/// <summary> /// Determines if there is a collision between a circle and rectangle /// </summary> /// <param name="r">The bounding rectangle</param> /// <param name="c">The bounding circle</param> /// <returns>true for collision, false otherwise</returns> public static bool Collides(BoundingRectangle r, BoundingCircle c) { float nX = MathHelper.Clamp(c.Center.X, r.Left, r.Right); float nY = MathHelper.Clamp(c.Center.Y, r.Top, r.Bottom); return(Math.Pow(c.Radius, 2) >= Math.Pow(c.Center.X - nX, 2) + Math.Pow(c.Center.Y - nY, 2)); }
/// <summary> /// Determines if this BoundingPoint collides with a BoundingCircle /// </summary> /// <param name="c">the BoundingCircle</param> /// <returns>true on collision, false otherwise</returns> public bool CollidesWith(BoundingCircle c) { return(CollisionHelper.Collides(c, this)); }
/// <summary> /// Alternate call /// </summary> /// <param name="c"></param> /// <param name="r"></param> /// <returns></returns> public static bool Collides(BoundingCircle c, BoundingRectangle r) => Collides(r, c);
/// <summary> /// Detects a collision between a circle and point /// </summary> /// <param name="c">the circle</param> /// <param name="p">the point</param> /// <returns>true on collision, false otherwise</returns> public static bool Collides(BoundingCircle c, BoundingPoint p) { return(Math.Pow(c.Radius, 2) >= Math.Pow(c.Center.X - p.X, 2) + Math.Pow(c.Center.Y - p.Y, 2)); }
/// <summary> /// Detects a collision between two circles /// </summary> /// <param name="c1">the first circle</param> /// <param name="c2">the second circle</param> /// <returns>true for a collision, false otherwise</returns> public static bool Collides(BoundingCircle c1, BoundingCircle c2) { return(Math.Pow(c1.Radius + c2.Radius, 2) >= Math.Pow(c2.Center.X - c1.Center.X, 2) + Math.Pow(c2.Center.Y - c1.Center.Y, 2)); }