Beispiel #1
0
        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;
        }
Beispiel #2
0
        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);
        }