# Object Collision Problem

This topic is 2116 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

## Recommended Posts

I am trying to make a simple physics based game in SDL, and i require a ball to bounce of lines in game.

However, when the ball collides with the line, it clips through it, messing up the collision count.

The problem is due to the speed of the ball. If the ball travels fast enough, it can pass right through the line.

I use frame independent motion and a circular collision detection for the ball

How can i make sure the collision doesn't clip?

Code For the Ball Collision Detection

bool Projectile::check_collision(Line L)
{
int X1,X2,Y1,Y2,CL;
int Cx=0,Cy=0,CP=0,Px=0,Py=0;
float shortest_distance;
double slopeL=0,slopeP=0;

L.get_Line(X1,Y1,X2,Y2);
getLocation(Px,Py);
Px+=size/2;
Py+=size/2;

if(X2-X1!=0)
{
slopeL=(Y2-Y1)/(X2-X1);
slopeP=-1/slopeL;
//Y=mX+C;
CL=Y1-slopeL*X1;
CP=Py-slopeP*Px;
Cx=(CL-CP)/(slopeP-slopeL);
Cy=slopeP*Cx + CP;
}
else
{
Cy=Py;
if(X2>Px)
Cx=X2-Px;
else
Cx=Px-X2;
}

shortest_distance=sqrt(pow(double(Cx-Px),2)+pow(double(Cy-Py),2));

if(shortest_distance<size/2)
{
if(X2-X1!=0)
on_collision(slopeL);
else
on_collision();
return true;
}
else
return false;

}


##### Share on other sites

for such simple game you could:

divide circle step by 10

and do 10 circle moves and collision checks per loop.

##### Share on other sites

A potential solution is to "sweep out" a box (or capsule if the ends are rounded to fit the circle) that describes the motion of the circle over the whole timestep and then to do collision detection with the swept out box (or capsule). The picture below shows a swept out box.

[attachment=18239:Problem.png]

[attachment=18240:Solution.png]

##### Share on other sites

A potential solution is to "sweep out" a box (or capsule if the ends are rounded to fit the circle) that describes the motion of the circle over the whole timestep and then to do collision detection with the swept out box (or capsule). The picture below shows a swept out box.

I did something like this in the past, and then put it to intercepted and moved the ball to the halfway position and set the velocities so that on the next time step it would be right... if your total velocity drops too low though, you may have to adjust where you move it to. My speed stayed the same for the whole problem, so moving it halfway worked great. You could do a deterioration to find out exactly where to move it if you needed to. (For instance, if losing 50% of velocity, would probably want to move back to 25% along the way of the box before adjusting velocity).

• 13
• 18
• 29
• 11