Circle class for C# / XNA
Ever find yourself in need of a circle in C# / XNA and can't do it? Now you can AND you can test if your circle collides with a rectangle too. I'm pretty sure I got the circle class itself from somewhere else (if it's you, let me know and I will credit you) but I wrote the Intersects() method all by myself... at least I'm pretty sure I did.
/// <summary>
/// Represents a 2D circle.
/// </summary>
public struct Circle
{
private Vector2 v;
private Vector2 direction;
private float distanceSquared;
/// <summary>
/// Center position of the circle.
/// </summary>
public Vector2 Center;
/// <summary>
/// Radius of the circle.
/// </summary>
public float Radius;
/// <summary>
/// Constructs a new circle.
/// </summary>
public Circle(Vector2 position, float radius)
{
this.distanceSquared = 0f;
this.direction = Vector2.Zero;
this.v = Vector2.Zero;
this.Center = position;
this.Radius = radius;
}
/// <summary>
/// Determines if a circle intersects a rectangle.
/// </summary>
/// <returns>True if the circle and rectangle overlap. False otherwise.</returns>
public bool Intersects(Rectangle rectangle)
{
this.v = new Vector2(MathHelper.Clamp(Center.X, rectangle.Left, rectangle.Right),
MathHelper.Clamp(Center.Y, rectangle.Top, rectangle.Bottom));
this.direction = Center - v;
this.distanceSquared = direction.LengthSquared();
return ((distanceSquared > 0) && (distanceSquared < Radius * Radius));
}
}
This article has been view 2926 times.
|