1
私はcourseに登録しており、コードexampleからこの機能を持っています。最後の三つは、xおよびy位置、およびキャンバスに円の半径でありながら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);
}
最初の4つの引数は、矩形のxおよびy位置、幅及び高さです。
長方形と円が接触すると、関数はtrue
を返し、衝突が発生します。
多少は分かりますが、完全にはありません。斜辺がr * rよりも小さい場合、なぜそれがチェックされますか? –
長方形の最も近い点が半径よりも円の中心に近い場合、それらはどこかで重なっています。長方形上の最も近い点と円の中心との間の距離二乗は、(cx-testX)*(cx-testX)+(cy-testY)*(cy-testY)であり、半径二乗はr * r 。著者はおそらく、書くのが簡単だったのですが、左側のJavaScriptのMath.sqrt()関数を使って、それがrよりも小さくなる必要がある(これは全く同じです)。 –