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; };