Canbitwell Products

Yuri'Blog +[基于冲量物理实时模拟] [碰撞检测]
posts - 12, comments - 10, trackbacks - 0, articles - 1
   :: 首页 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理

多对碰撞点的碰撞处理

Posted on 2007-07-05 17:00 Yuri 阅读(264) 评论(3)  编辑 收藏 网摘 所属分类: 物理

 假设:你已经熟悉单点带摩擦冲量问题。

  对于有多对碰撞点的碰撞处理工作如下。

  首先,根据牛顿碰撞定律将每对碰撞点的碰后相对速度算出来 。然后碰撞冲量将会在一个迭代循环中计算出来。在第i次迭代时,对于每一组碰撞点,我们将测试碰前相对速度 是否已经达到了之前求出的相应的碰后相对速度 。如果是,我们就直接处理下一对碰撞点。否则就按老样子计算冲量 ,并且作用在刚体上。直到所有对碰撞点都不需要计算。

另外,为了防止碰撞物体相互sticking,必须保证在每次迭代中,每对碰撞点的合冲量必须在正法向量方向,即:

 

如果上式在i次迭代时成立,而在第i-1 次迭代时不成立,那么则需

 

就是说

 

  对了,别忘了摩擦冲量。摩擦冲量是在碰撞法向冲量的基础上产生的,因此,摩擦冲量要和碰撞冲量在同一个迭代循环中求出。它的计算是基于Coulomb摩擦力法则的。如果切线相对速度分量 不是0。我们会计算一个冲量来模拟动摩擦力,方向是切线速度的相反方向,切线向量t我们用法向量n和相对速度的向量三重积算出来。在第i次迭代中,一对碰撞点的摩擦冲量可以由下式算出:


其中 就是动摩擦系数。在我们把这个冲量作用到刚体上碰撞位置前,必须保证切线速度t的相反方向,因为摩擦力是使接触点的相对速度减小的。那么允许的极端情况就是摩擦冲量使切线相对速度为0。即:

 

好了,考虑上 ,即:

 

Feedback

#1楼 [楼主]   回复  引用  查看    

2007-07-06 02:13 by Yuri      
自己给自己回复个:
迭代法可以求解约束:
两刚体多点碰撞
多刚体多点碰撞(物体堆栈)
Joint

迭代的思想就是不断计算,更改局部状态(但是这个局部状态会影响到其他局部状态),直到多有的状态都满足你的条件。
但是我认为这种方法并不高效,尤其是我们要用到物理引擎中。

JiangWei为什么要在他的DynaForce里用线形互补(我不了解这个),我想也就是因为这。
唉,自己毕竟是个高中生,学识不够只能用冲量解决……LCP那方面就不懂了。听说现在大部分物理引擎都用的线形互补。
在冲量这方面好像可以用冲量传导,SPE的特性中就有提到,不过资料太少,只能自己想。。我觉得好像可以用某种数据结构解决……

#2楼    回复  引用    

2007-10-13 17:20 by ZMZMAX [未注册用户]
希望你能写个物理引擎,用VB写也没关系,能实现就行,不知道我的想法对不对,有点像冲量传送的感觉。以我的能力,不会做这个,不过我会用,DynaForce/ODE和SPE's bug 常常出现,我想要一个更稳定的物理SDK,简单好用,但到处找都找不到,我觉得物理引擎在计算物理反应时不应出现bug[程序故障],你可以做么?或是教一下我。physX 要人家装驱动,好烦。不知道要等到什么时候才可以啊!!!

#3楼    回复  引用    

2008-08-26 08:37 by GODplayer [未注册用户]
..............................完全看不懂

标题  
姓名  
主页
Email (博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
Google站内搜索

China-pub 计算机图书网上专卖店!6.5万品种 2-8折!
近千种 9-95 新二手计算图书火热销售中!
开发者征途系统新作:《设计模式——基于C#的工程化实现及扩展》



相关文章:

相关链接: