# collision test between ball and rect [closed]

need help with collision between ball and rect. i dont know how to test if ball hit the rec from top, bottom, right or left.

x = ball x
y = ball y
radius = ball width and height
rx = rect x
ry = rect y
rheight = rect height
rwidth = rect width

main game loop:

x += dx;   //keep the ball moving so i can test the collision
y += dy;

//collsion between ball and box
if(x+radius > rx && x < rx+rwidth)
{
if(y+radius > ry && y < ry+rheight)
{
{
System.out.println("top");
}
else  if(y == ry+rheight)
{
System.out.println("bottom");
}
else if(x+radius == rx)
{
System.out.println("left");
}
else if(x == rx+rwidth)
{
System.out.println("right");
}
}
}


The code that you are using does not check for the collisions from right and bottom side, it only checks when the ball collides from top left side.

For this case the above code fails to check for a collision

take a look at this code its just basic detection not very accurate but you should get the point. Hope this helps.

if (ballLocation.Center.Y > BrickLocation.Y && ballLocation.Center.Y < (BrickLocation.Y + BrickLocation.Height))
{
if (BrickLocation.Center.X > ballLocation.Center.X)
{
velocity.X = mod(velocity.X) * -1;
}
else if (BrickLocation.Center.X < ballLocation.Center.X)
{
velocity.X = mod(velocity.X);
}
}
else if (ballLocation.Center.X > BrickLocation.X && ballLocation.Center.X < (BrickLocation.X + BrickLocation.Width))
{
if (BrickLocation.Center.Y < ballLocation.Center.Y)
{
velocity.Y = mod(velocity.Y);
}
else if (BrickLocation.Center.Y > ballLocation.Center.Y)
{
velocity.Y = mod(velocity.Y) * -1;
}
}