简单的碰撞检测代码

// 定义圆形结构体
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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值