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(這完全等價)。 –