【问题标题】:JavaScript - I don't understand how this collision detection function worksJavaScript - 我不明白这个碰撞检测功能是如何工作的
【发布时间】:2018-03-21 11:00:25
【问题描述】:

我正在注册这个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,因此发生碰撞。

【问题讨论】:

    标签: javascript canvas collision-detection


    【解决方案1】:

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

    【讨论】:

    • 我有点理解,但并不完全。如果斜边小于 r*r,为什么要检查?
    • 如果矩形上最近的点比圆的半径更接近圆心,它们在某处重叠。矩形上最近点到圆心的距离平方为(cx-testX)*(cx-testX)+(cy-testY)*(cy-testY),半径平方为r*r .作者可能认为这比在左侧使用 JavaScript 的 Math.sqrt() 函数并要求它小于 r(完全等价)更简单。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多