圆 A 与圆 B 的两半相撞
Circle A collides with both halves of circle B
我似乎无法解决与碰撞检测相关的数学问题。
我明白了基本的想法。找出两个相反的 x 和 y 值之间的差异。通过将两个结果乘以自身得到距离来计算距离,然后检查两个球是否碰撞。然后检查角度的任何部分是否相交。老实说,它有点用,但仍然坏了。
问题:开始游戏时,我让球与可见的一半碰撞,然后碰撞起作用,当球进入不可见区域时,碰撞returns 错误的。另一方面,当重新启动并让它与不可见区域碰撞时碰撞returns true,然后当它进入半圆的可见部分时为false。
会是什么?我怀疑是因为我的轮换。这真的很奇怪。这里有一个演示:
http://jsfiddle.net/2rz296tf/17/
下面是使其 "kind of" 起作用的基本公式:
var dx = a - b;
var dy = a - b;
var semi = Math.atan2(dx, dy)
var distance = Math.sqrt(dx * dx + dy * dy);
var hit = (distance < radiusA + radiusB) && (semi >= 0 && semi < angleB);
您正在比较角度与长度:semi < radiusB
。那没有任何意义。您应该将 semi
与盾牌的方向进行比较,而不是其半径。
查看您的代码,您应该改为执行类似 semi >= angle - Math.PI && semi <= angle
的操作。您需要实现一种方法来处理角度 运行 从 -pi 到 pi 然后循环的事实。
我似乎无法解决与碰撞检测相关的数学问题。
我明白了基本的想法。找出两个相反的 x 和 y 值之间的差异。通过将两个结果乘以自身得到距离来计算距离,然后检查两个球是否碰撞。然后检查角度的任何部分是否相交。老实说,它有点用,但仍然坏了。
问题:开始游戏时,我让球与可见的一半碰撞,然后碰撞起作用,当球进入不可见区域时,碰撞returns 错误的。另一方面,当重新启动并让它与不可见区域碰撞时碰撞returns true,然后当它进入半圆的可见部分时为false。
会是什么?我怀疑是因为我的轮换。这真的很奇怪。这里有一个演示:
http://jsfiddle.net/2rz296tf/17/
下面是使其 "kind of" 起作用的基本公式:
var dx = a - b;
var dy = a - b;
var semi = Math.atan2(dx, dy)
var distance = Math.sqrt(dx * dx + dy * dy);
var hit = (distance < radiusA + radiusB) && (semi >= 0 && semi < angleB);
您正在比较角度与长度:semi < radiusB
。那没有任何意义。您应该将 semi
与盾牌的方向进行比较,而不是其半径。
查看您的代码,您应该改为执行类似 semi >= angle - Math.PI && semi <= angle
的操作。您需要实现一种方法来处理角度 运行 从 -pi 到 pi 然后循环的事实。