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);
}
처음 네
인수는 X 및 Y 위치, 폭, 사각형의 높이이다.사각형과 원이 만지면이 함수는 true
을 반환하므로 충돌이 발생합니다.
다소 이해하지만 완전히는 아닙니다. 빗변이 r * r보다 작은 이유는 무엇입니까? –
직사각형의 가장 가까운 점이 반지름보다 원 중심에 더 가깝게 있으면 어딘가에 겹쳐 있습니다. 직사각형의 가장 가까운 점과 원의 중심 사이의 거리 제곱은 (cx-testX) * (cx-testX) + (cy-testY) * (cy-testY)이며 반경 제곱은 r * r입니다. . 필자는 아마도 작성자가 왼쪽에서 JavaScript의 Math.sqrt() 함수를 사용하고 r보다 작을 것을 요구하는 것보다 작성하는 것이 더 간단했을 지 모르지만 (아마도 완전히 동일합니다). –