2013-05-27 36 views
1

我正在编程一个C++仿真应用程序,其中几个质量弹簧结构会移动并发生碰撞,而我目前正在努力应对碰撞检测和响应部分。这些结构可能会或可能不会被封闭(它可能是一个“球”,或者只是一连串的群众和弹簧),所以它(我认为)不可能在我们测试2个重叠形状时使用“经典”方法。处理质量弹簧系统之间碰撞的好方法

此外,碰撞是模拟的一个非常重要的部分,我需要它们尽可能准确,无论是在检测和响应方面(这里的实时不是约束)。我想尽可能地知道应用到每个节点(群众)的力量。

目前我正在检测节点和弹簧之间在每个时间步骤之间的碰撞,并且检测似乎正常。我可以计算一个节点和弹簧之间的碰撞时间,从而找出碰撞的确切位置。然而,我不确定这是否是正确的解决方案,经过大量研究后,我无法完全找到使事情正常工作的方法,主要是在碰撞的响应方面。

因此,我真的很想听听任何技术,算法或库,似乎非常适合这种碰撞问题或任何想法,你可能必须使这项工作。真的,任何形式的帮助将不胜感激。

+1

这似乎是一个很好的华夫饼,但是什么是关于编程语言的具体的具体问题? –

+0

这个问题不是关于特定的编程语言,而是关于询问是否有人知道可以帮助我(和其他面临这种问题的人)处理质量弹簧结构之间的碰撞的算法或(C++)库。如果这种问题不能在这里得到解答,我很抱歉,如果有什么问题,我会很感激。 – Petipo

+0

这就是为什么它在这里不合适。我想你应该找到一些留言板或一些描述的聊天室。那么搜索网络呢?这是寻找图书馆的好方法。 –

回答

0

我想八叉树方法可以最好地解决您的问题。八叉树将虚拟空间划分为树的多个递归树叶,并让您计算最可能的节点之间可能的冲突。

这里一个简短的介绍:http://www.flipcode.com/archives/Introduction_To_Octrees.shtml :)

+0

谢谢。八叉树可能对“宽泛”阶段有所帮助,但我已经可以计算节点和弹簧(或另一个节点)之间的碰撞时间。碰撞响应在这里是棘手的部分。 – Petipo

1

如果你能满足以下条件:

0) All collisions are locally binary - that is to say 
    collisions only occur for pairs of particles, not triples etc, 
1) you can predict the future time for a collision between 
    objects i and j from knowledge of their dynamics (assuming that no other 
    collision occurs first) 
2) you know how to process the physics/dynamicseac of the collision 

,那么你应该能够做到以下几点:

让TPQ是预测粒子p和q之间碰撞的时间,以及V p(V q)是保持每个粒子p(q)的局部动力学的结构(即其速度,位置,弹簧常数等)

对于n颗粒...

Initialise by calculating all Tpq (p,q in 1..n) 
Store the n^2 values of Tpq in a Priority Queue (PQ) 
repeat 
    extract first Tpq from the PQ 
    Advance the time to Tpq 
    process the collision (i.e. update Vp and Vq according to your dynamics) 
    remove all Tpi, and Tiq (i in 1..n) from the PQ 
    // these will be invalid now as the changes in Vp, Vq means the 
    // previously calculated collision of p and q with any other particle 
    // i might occur sooner, later or not at all 
    recalculate new Tpi and Tiq (i in 1..n) and insert in the PQ 
until done 

有一个O(N^2)初始设置成本,但重复循环应该是O(nlogn) - 拆卸和更换的成本的2n-1个无效碰撞。对于中等数量的粒子(高达数百个),这是非常有效的。它的好处是你只需要在碰撞时处理事物,而不是等间隔的时间步骤。这对于稀疏填充模拟而言尤其有效。