public CollisionResult(float penetration, Vector2 collisionNormal, Vector2 localCollisionPoint1, Vector2 localCollisionPoint2, Circle circle1, Circle circle2) { Penetration = penetration; CollisionNormal = collisionNormal; LocalCollisionPoint1 = localCollisionPoint1; LocalCollisionPoint2 = localCollisionPoint2; Circle1 = circle1; Circle2 = circle2; }
public static CollisionResult IsColliding(Circle c1, Circle c2) { var distance = Vector2.Distance(c1.Position, c2.Position); var sumOfRadius = c1.Radius + c2.Radius; if (sumOfRadius < distance) { var penetration = distance - sumOfRadius; var collisionDirection = Vector2.Normalize(c1.Position - c2.Position); var collisionNormal = Vector2.Cross(-1, collisionDirection); var c1LocalCollisionPoint = Vector2.Rotate(c1.Rotation, c1.Position + collisionDirection*penetration); var c2LocalCollisionPoint = Vector2.Rotate(c2.Rotation, c1.Position - collisionDirection*penetration); return new CollisionResult(penetration, collisionNormal, c1LocalCollisionPoint, c2LocalCollisionPoint, c1, c2); } return null; }
public abstract Vector2D GetCollisionNormal(Circle otherShape, Vector2D thisPosition, Vector2D otherPosition);
public abstract float GetCollisionPenDepth(Circle otherShape, Vector2D thisPosition, Vector2D otherPosition);
public abstract bool IsCollided(Circle otherShape, Vector2D thisPosition, Vector2D otherPosition);