返回

圆形之间的碰撞检测

几何知识

svg

设两圆的圆心分别为(x1,y1)和(x2,y2),半径分别为 R 和 r,圆心距为 D,如果发生碰撞,则 D < R + r;
圆心距 D 可以通过勾定理求得,如下所示:
\(D = \sqrt{(x2 - x1)^2 + (y2 - y1)^2}\)

javascript代码实现

// 圆1
const circle1 = {x: 5, y: 5, r: 20};
// 圆2
const circle2 = {x: 10, y: 5, r: 12};

const dx = circle2.x - circle1.x;
const dy = circle2.y - circle1.y;
const distance = Math.sqrt(dx * dx + dy * dy);

if (distance < circle1.r + circle2.r) {
    // 发生碰撞
}

优化版

当大量检测碰撞时,开平方根的性能肯定不好

// 圆1
const circle1 = {x: 5, y: 5, r: 20};
// 圆2
const circle2 = {x: 10, y: 5, r: 12};

const dx = circle2.x - circle1.x;
const dy = circle2.y - circle1.y;
const distanceSQ = dx * dx + dy * dy;
const d = circle1.r + circle2.r;

if (distanceSQ < d * d) {
    // 发生碰撞
}
© 2022 Poli   •  Theme  Moonwalk