1
我正在注册这course,他们从他们的代码example有这个功能,我不明白这个特定的工作方式。JavaScript - 我不明白这种碰撞检测功能是如何工作的
function circRectsOverlap(x0, y0, w0, h0, cx, cy, r) {
var testX=cx;
var testY=cy;
if (testX < x0) testX=x0;
if (testX > (x0+w0)) testX=(x0+w0);
if (testY < y0) testY=y0;
if (testY > (y0+h0)) testY=(y0+h0);
return (((cx-testX)*(cx-testX)+(cy-testY)*(cy-testY))< r*r);
}
前四个参数是x和y位置,宽度和矩形的高度,而最后三个是x和y位置,并在画布上圆的半径。
如果矩形和圆形接触,函数返回true
,因此存在碰撞。
我有点理解,但不完全。为什么它检查,如果斜边比r * r小? –
如果矩形上的最近点比其半径更接近圆的中心,则它们在某处重叠。矩形上最近点与圆心之间的距离平方为(cx-testX)*(cx-testX)+(cy-testY)*(cy-testY),半径平方为r * r 。作者可能会比在左边使用JavaScript的Math.sqrt()函数编写起来要简单,并且要求它小于r(这完全等价)。 –