1
General / Angular direction for circle collisions.
« on: March 12, 2023, 10:38:27 pm »
Hey, I've implemented a simple circle collision detection system.
Upon collision, self circle will get it's opposite velocity (to bounce back) and the collided circle will get the get the velocity it was hit with:
This works fine. But it's just a linear response. What I want is to consider at what angle the circles are colliding as well to be able to simulate a billiard like game by taking into account angular velocity as well but I have no idea how to approach this, any directions would be greatly appreciated. Thanks!
bool SEMath::circle_collision(const TVector& a, const TVector& b,
const float& r1, const float& r2)
{
// (x2-x1)^2 + (y2-y1)^2 <= (r1+r2)^2
float center_distance = square(b.x - a.x) + square(b.y - a.y);
float collision_distance = square(r1 + r2);
return center_distance <= collision_distance;
}
const float& r1, const float& r2)
{
// (x2-x1)^2 + (y2-y1)^2 <= (r1+r2)^2
float center_distance = square(b.x - a.x) + square(b.y - a.y);
float collision_distance = square(r1 + r2);
return center_distance <= collision_distance;
}
Upon collision, self circle will get it's opposite velocity (to bounce back) and the collided circle will get the get the velocity it was hit with:
CollidedActor->setVelocity(InActor->getVelocity());
InActor->setVelocity(InActor->getVelocity() * -1.f);
InActor->setVelocity(InActor->getVelocity() * -1.f);
This works fine. But it's just a linear response. What I want is to consider at what angle the circles are colliding as well to be able to simulate a billiard like game by taking into account angular velocity as well but I have no idea how to approach this, any directions would be greatly appreciated. Thanks!