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;
}
If any more info is needed please tell me.