public static bool Contains(Circle c, Square s) { double d1 = SqDist(c.Center, new Point(s.Center.X + s.Size / 2, s.Center.Y + s.Size / 2)); double d2 = SqDist(c.Center, new Point(s.Center.X + s.Size / 2, s.Center.Y - s.Size / 2)); double d3 = SqDist(c.Center, new Point(s.Center.X - s.Size / 2, s.Center.Y + s.Size / 2)); double d4 = SqDist(c.Center, new Point(s.Center.X - s.Size / 2, s.Center.Y - s.Size / 2)); double sqr = c.Radius * c.Radius; return d1 < sqr && d2 < sqr && d3 < sqr && d4 < sqr; }
public static bool Intersects(Square s, Circle c) { double distanceX = Math.Abs(s.Center.X - c.Center.X); double distanceY = Math.Abs(s.Center.Y - c.Center.Y); double sHalfSize = s.Size / 2.0; if (distanceX > c.Radius + sHalfSize || distanceY > c.Radius + sHalfSize) { return false; } if (distanceX < sHalfSize || distanceY < sHalfSize) { return true; } double cornerDistanceSq = Math.Pow((distanceX - sHalfSize), 2) + Math.Pow((distanceY - sHalfSize), 2); return cornerDistanceSq <= Math.Pow(c.Radius, 2); }