我正在注册此course,他们从其代码example中获得了此功能,但我不了解此特定代码的工作原理。

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,因此会发生冲突。

最佳答案

看来testX和testY成为最靠近矩形所包围的圆心的点的坐标。四个if测试会将这些值“钳住”到矩形的边缘,如果圆心在任一维度上都在矩形的外部。考虑圆在矩形内部居中的情况可能会有所帮助-所有ifs为false且testX和testY是圆中心的坐标。 return语句中的测试使用勾股定理确定测试点是否在圆的半径内。

10-07 22:52