// 定义圆形结构体
struct Circle {
int x, y; // 圆心坐标
int radius; // 半径
COLORREF color; // 颜色
};
// 定义矩形结构体
struct Rectangle {
int x, y; // 左上角坐标
int width, height; // 宽高
COLORREF color; // 颜色
};
// 圆形与圆形碰撞检测
bool checkCircleCollision(Circle c1, Circle c2) {
// 计算圆心距离的平方
int dx = c2.x - c1.x;
int dy = c2.y - c1.y;
int distanceSquared = dx * dx + dy * dy;
// 比较距离平方与半径和的平方
int sumRadius = c1.radius + c2.radius;
return distanceSquared <= sumRadius * sumRadius;
}
// 矩形与矩形碰撞检测 (轴对齐边界框, AABB)
bool checkRectCollision(Rectangle r1, Rectangle r2) {
return (r1.x < r2.x + r2.width &&
r1.x + r1.width > r2.x &&
r1.y < r2.y + r2.height &&
r1.y + r1.height > r2.y);
}
// 圆形与矩形碰撞检测
bool checkCircleRectCollision(Circle circle, Rectangle rect) {
// 找到矩形上离圆心最近的点
int closestX = circle.x;
int closestY = circle.y;
// 水平方向上的最近点
if (circle.x < rect.x)
closestX = rect.x;
else if (circle.x > rect.x + rect.width)
closestX = rect.x + rect.width;
// 垂直方向上的最近点
if (circle.y < rect.y)
closestY = rect.y;
else if (circle.y > rect.y + rect.height)
closestY = rect.y + rect.height;
// 计算最近点与圆心的距离
int dx = circle.x - closestX;
int dy = circle.y - closestY;
int distanceSquared = dx * dx + dy * dy;
// 比较距离平方与圆半径的平方
return distanceSquared <= circle.radius * circle.radius;
}