kja*_*llo 4 algorithm performance distance
我正在寻找有效的算法来检查一个点是否在3D附近.
sqrt((x2-x1)^2 + (y2-y1)^2 + (z2-z1)^2) < radius
Run Code Online (Sandbox Code Playgroud)
这似乎不太快,实际上我不需要这么大的准确性.我怎么能这样做?
unw*_*ind 24
平方距离,然后拨打电话sqrt(),这要快得多:
(((x2-x1)^2 + (y2-y1)^2 + (z2-z1)^2 < radius * radius
Run Code Online (Sandbox Code Playgroud)
当然,在许多情况下,至少radius * radius可以提前计算并存储为例如squaredRadius.
Jac*_*yan 10
好吧,如果你可以满足于立方体距离而不是球形距离,那么非常天真的实现就像这样:
Math.Abs(x2-x1) < radius && Math.Abs(y2-y1) < radius && Math.Abs(z2-z1) < radius
Run Code Online (Sandbox Code Playgroud)
如果它被证明是瓶颈,您可以使用自己喜欢的优化Math.Abs的方法.
我还应该补充一点,如果其中一个尺寸通常变化小于其他尺寸,那么最后一个尺寸应该会带来性能提升.例如,如果您主要处理"地面"xy平面上的对象,则最后检查z轴,因为您应该能够通过使用x和y检查更早地排除碰撞.