<分区>
我的问题是:
我在 3D 空间中有一组点,它们的位置以一定的速度不时更新。但我需要在它们之间保持最小距离。
你能帮我吗?
编辑:我正在使用 C 来实现算法。
提前致谢。
<分区>
我的问题是:
我在 3D 空间中有一组点,它们的位置以一定的速度不时更新。但我需要在它们之间保持最小距离。
你能帮我吗?
编辑:我正在使用 C 来实现算法。
提前致谢。
最佳答案
您也可以使用物理模拟来做到这一点。这提供了更多的可能性,但计算成本更高。
例如,这里的其他人建议检测碰撞,但在您对 duffymo 的评论中,您建议您可能希望平稳减速以避免碰撞。在这种情况下,您可以创建一个粒子间力将它们彼此推开,然后使用 a = F/m 计算每个时间步长的速度,并且v = v0 + dt a,其中F是所有粒子相互作用力的总和.例如,您可以使用类似于以下之一的粒子间力:
根据下面的 Python 代码计算。但实际上任何东西都可以工作,只要它在你的最小距离附近变得足够大(所以点永远不会靠得太近),并且它在一定距离之外为零(所以这些点并不总是相互排斥)。
from pylab import *
def repulse(x, c, rmin=1., fmax=100):
if x<=rmin:
return fmax
try:
f = c/(x-rmin)-5.
if f<0.:
f = 0.
if f>fmax:
return fmax
except:
f = fmax
return f
x = arange(0, 100, .01)
r = 0.*x
for c in range(0, 10):
for i, xv in enumerate(x):
r[i] = repulse(xv, 2.**c)
plot(x, r)
show()
关于c - 更新一个点的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2131684/