• Advertisement
Sign in to follow this  

Object Collision Problem

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

If you intended to correct an error in the post then please contact us.

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;

}

If any more info is needed please tell me.

Share this post


Link to post
Share on other sites
Advertisement

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 this post


Link to post
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.

 

attachicon.gifProblem.png

 

attachicon.gifSolution.png

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).

Share this post


Link to post
Share on other sites
Sign in to follow this  

  • Advertisement