不理解碰撞检测代码
Not understanding collision detection code
我在 Whosebug 上看到了这个关于圆形和矩形之间碰撞检测的主题。
原文post可以在这里找到@markE:Detecting collision of rectangle with circle
var circle={x:100,y:290,r:10};
var rect={x:100,y:100,w:40,h:100};
// return true if the rectangle and circle are colliding
function RectCircleColliding(circle,rect){
var distX = Math.abs(circle.x - rect.x-rect.w/2);
var distY = Math.abs(circle.y - rect.y-rect.h/2);
if (distX > (rect.w/2 + circle.r)) { return false; }
if (distY > (rect.h/2 + circle.r)) { return false; }
if (distX <= (rect.w/2)) { return true; }
if (distY <= (rect.h/2)) { return true; }
var dx=distX-rect.w/2;
var dy=distY-rect.h/2;
return (dx*dx+dy*dy<=(circle.r*circle.r));
}
有人可以向我解释最后一段代码吗?
var dx=distX-rect.w/2;
var dy=distY-rect.h/2;
return (dx*dx+dy*dy<=(circle.r*circle.r));
我真的不明白它背后的数学原理。
也许有人可以 post 一张可以帮助我形象化的照片?我附上了我在尝试弄清楚时画的照片。
谢谢
好的。所以 dx
就是矩形边缘到圆心的 "horizontal" 距离。 dy
同理:是矩形的垂直边缘到圆心的长度。
现在根据毕达哥拉斯,如果你想得到长方形角点的长度(从圆心算起),你可以取 dx^2
+ dy^2
的平方根。
现在你想知道角"sticks"是否入圆
为此,dx^2+dy^2
的平方根必须小于(或等于)圆的半径。因此:sqrt(dx^2 + dy^2) <= circle.r
.
对等式两边求平方得到dx^2 + dy^2 <= circle.r^2
.
我在 Whosebug 上看到了这个关于圆形和矩形之间碰撞检测的主题。
原文post可以在这里找到@markE:Detecting collision of rectangle with circle
var circle={x:100,y:290,r:10};
var rect={x:100,y:100,w:40,h:100};
// return true if the rectangle and circle are colliding
function RectCircleColliding(circle,rect){
var distX = Math.abs(circle.x - rect.x-rect.w/2);
var distY = Math.abs(circle.y - rect.y-rect.h/2);
if (distX > (rect.w/2 + circle.r)) { return false; }
if (distY > (rect.h/2 + circle.r)) { return false; }
if (distX <= (rect.w/2)) { return true; }
if (distY <= (rect.h/2)) { return true; }
var dx=distX-rect.w/2;
var dy=distY-rect.h/2;
return (dx*dx+dy*dy<=(circle.r*circle.r));
}
有人可以向我解释最后一段代码吗?
var dx=distX-rect.w/2;
var dy=distY-rect.h/2;
return (dx*dx+dy*dy<=(circle.r*circle.r));
我真的不明白它背后的数学原理。
也许有人可以 post 一张可以帮助我形象化的照片?我附上了我在尝试弄清楚时画的照片。
谢谢
好的。所以 dx
就是矩形边缘到圆心的 "horizontal" 距离。 dy
同理:是矩形的垂直边缘到圆心的长度。
现在根据毕达哥拉斯,如果你想得到长方形角点的长度(从圆心算起),你可以取 dx^2
+ dy^2
的平方根。
现在你想知道角"sticks"是否入圆
为此,dx^2+dy^2
的平方根必须小于(或等于)圆的半径。因此:sqrt(dx^2 + dy^2) <= circle.r
.
对等式两边求平方得到dx^2 + dy^2 <= circle.r^2
.