示例#1
0
        static inline bool IsColliding( Rect rect,Circle circle, double angle ){
            // Rotate circle's center point back
            float centerX = rect.GetXCenter();
            float centerY = rect.GetYCenter();

            double unrotatedCircleX = cos(angle) * (circle.x - centerX) - sin(angle) * (circle.y - centerY) + centerX;
            double unrotatedCircleY = sin(angle) * (circle.x - centerX) + cos(angle) * (circle.y - centerY) + centerY;

            double closestX, closestY;

            if (unrotatedCircleX  < rect.x)
                closestX = rect.x;
            else if (unrotatedCircleX  > rect.x + rect.w)
                closestX = rect.x + rect.w;
            else
                closestX = unrotatedCircleX ;

            // Find the unrotated closest y point from center of unrotated circle
            if (unrotatedCircleY < rect.y)
                closestY = rect.y;
            else if (unrotatedCircleY > rect.y + rect.h)
                closestY = rect.y + rect.h;
            else
                closestY = unrotatedCircleY;

            // Determine collision


            double distance = Point(unrotatedCircleX , unrotatedCircleY).GetDistance(Point(closestX, closestY));
            if (distance < circle.r)
                return true;
            else
                return false;
        };