c - 更新一个点的位置

标签 c algorithm math

<分区>

我的问题是:

我在 3D 空间中有一组点,它们的位置以一定的速度不时更新。但我需要在它们之间保持最小距离。

你能帮我吗?

编辑:我正在使用 C 来实现算法。

提前致谢。

最佳答案

您也可以使用物理模拟来做到这一点。这提供了更多的可能性,但计算成本更高。

例如,这里的其他人建议检测碰撞,但在您对 duffymo 的评论中,您建议您可能希望平稳减速以避免碰撞。在这种情况下,您可以创建一个粒子间力将它们彼此推开,然后使用 a = F/m 计算每个时间步长的速度,并且v = v0 + dt a,其中F是所有粒子相互作用力的总和.例如,您可以使用类似于以下之一的粒子间力: alt text

根据下面的 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/

相关文章:

c - 不用递归释放一个二叉树

c++ - 将 const char* 传递给 foo(char*)

c - 通过指向第一个结构的指针初始化结构内的结构

python - 输入错误 [] : findDistance() takes 0 positional arguments but 1 was given

c++ - 将while循环变成数学方程式?

java - 使用 'fib(N) = [Phi^N – phi^N]/Sqrt[5]' 公式计算 Fibonacci 项的时间复杂度是多少?

python - Python 中的定点迭代

c - 将 C 移植到 Go,难以理解一些指针语法

algorithm - 通过标志组值平滑地分割成固定序列

algorithm - 为每个输入重现相同数字的功能