返回
圆形之间的碰撞检测
13 Jun 2022
几何知识
设两圆的圆心分别为(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