物理学----碰撞
本文节选于《游戏开发物理学》如果你希望了解更多,请购买正版图书
现在你已了解了粒子和刚体的运动,接着要看当它们撞在一起时会发生什幺事情.这就是本章计论的主题,物别是告诉你如何处理粒子和刚体的碰撞反应。
在开始之前,先将碰撞“侦测”和碰撞“反应”做个区分。做个区分。碰撞侦测是计算的几何问题,这牵扯到判断两物体(或更多)是否碰撞及在何处碰撞。而碰撞反应是物理问题,牵涉到两物体(或更多)在碰撞之后的运动。虽然这两类问题密切相关,而本章将着重讨论碰撞反应方面的问题。
然而我必须说,碰撞侦测并没有被忽略:它是假定物体不能互相穿透的实时仿真中要考虑的重要方面。碰撞反应算法依据碰撞侦测算法的结果,以准确地判断任何碰撞的适当反应;因此,应确定你的碰撞侦测法则是准确而可靠的。也就是说,碰撞侦测不是件简单的差事,我发现要完整地实现它比刚体仿真的物理层面还难上许多。就游戏应用而言,执行速度也是主要的议题,相信你是知道的,十分精确的碰撞侦测会很慢。正是由于速度和简单的缘故,我们将利用边界球体(以及边界方块)与边和面的碰撞侦测法则。在第十三章、第十六章的范例仿真中将谈到更多关于此主题的内容。
本章中对刚体碰撞反应的处理是根据标准的(牛顿)碰撞定律。碰撞的物体无论其结构与材质皆视为刚体。如同前几章一样,这里讨论的刚体即使在碰撞时也不改变其外形。当然,这只是理想化的情况。从日常经验中可知,当物体相撞时它们会凹册陷、弯曲、压缩或起皱。例如,当棒球击中球棒时,棒球在撞击的毫秒间会压缩3/4英寸。尽管这是事实,我们仍依赖完整的分析及经验方法来估算刚体碰撞。
这种标准的方法广泛地应用于工程机械设计、分析和仿真;然而,就刚体仿真而言,有另一套方法可使用,就是“惩罚法”(penalty method) (注1)。
惩罚法中,撞击力就是使撞击点上的物体间压缩的暂时弹力。此弹力压缩经过很短暂的时间,并将大小相等且方向相反的力作用于碰撞物体上以仿真碰撞反应。此方法的提议者说它有容易实现的好处。然而实现上碰到的困难之一是数值的不稳定。惩罚法的使用还有其它争议,在这里不加以讨论。我将许多参考资料加入参考文献中,若你有兴趣可以看看。
冲量/动量定律
冲力的定义是作用时间非常短暂的力。例如,开枪时施加在子弹上的力称为冲力。两碰撞物体间的碰撞力也称为冲力,当你踢足球或以球棒击中棒球时也是冲力。
冲量是一个向量,其大小等于动量的变化量。所谓的“冲量/动量”定律,就是力矩的变化等于所作用的冲量。关于定质量及转动惯量的问题。可写成
线性冲量= F dt=m( -v )
角冲量= M dt=I( - )
这些等式中。F是冲力,M是冲力的力矩,t是时间,v是速度,下标符号 ﹣表示冲撞前的瞬间, 上标符号+表示冲撞后的瞬间。用下列等式便可求出平均冲力及力矩:
F=m( -v )/( - )
M=I( - )/( - )
考虑下面这个简单的例子:150g (0.01028 slug)的子弹以枪口速度2480ft/s发射出去,通过24in.长的枪管共花了0.0008s;求子弹受到的冲量及平均冲力。本例中,子弹的质量固定为150g,而其初速度为0;因此,其初动量为0。在开枪后一瞬间,子弹的动量为其质量乘以枪口速度2480ft/s,得到动量等于25.2 slug.ft/s。冲量等于动量的变化量,所以是25.5 slug.ft/s。平均冲力等于冲量除以力作用的时间,本例为:
平均冲力=(25.5 slug-ft/s)/(0.0008s)
平均冲力 = lb
注:本文章用此准方法并提到惩罚法,只是要让你知道将示范的方法不只一个。大致来说,“惩罚法”中的“惩罚法”是指反弹常数,它通常很大,用来表示反弹的的僵硬程度从而表示碰撞物体的硬度(或软度)。这些常数会在描述物体碰撞前后的运动等式中用到。
这是对冲量概念简单而重要的说明,而在你处理刚体碰撞时也会用到相同的定律。撞击期间,冲撞力通常很大,而撞击时间很短。当两物体相撞时,两者均施冲力于对方;这些力大小相等而方向相反。在步枪范例中,施于子弹上的冲量,也以反方向施于步枪上而产生后坐力。这就是牛顿第三运动定律。
撞击
除了上一节讨论的冲量/动量定律,标准的撞击或碰撞反应分析依据另一个基本定律:牛顿的动量守恒定律 - 当刚体系统碰撞时,动量守恒。这表示固定质量的物体,其质量与速度之积的总和在撞击前后是相等的:
-+ = -+
这里,m代表质量,v代表速度,下标符号1表示物体1、下标符号2表示物体,下标符号 – 表示撞击前的瞬间,而下标符号 + 表示撞击后的瞬间。
本方法假设撞击瞬间主要的力是冲撞力,其它的力都假设为在短时间内可忽略。记住此假设,因为稍后的第十三章实现碰撞反应2D实时仿真范例时,将用到它。先前提到刚体在碰撞时并不会改变外形,而你自身的经中真实的物体在碰撞时确实改变了外形。真实世界中,动能会转成应变能(strain energy),使物体变形。当物体的变形是永久的时,能量消失,因此动能不会转换。
动能
动能是关于移动物体的能量形式。动能等于物体从静止加速所需的能量,也等于使移动物体静止所需的能量。动能是物体速率或速度与其质量的函数。线性动能的公式如下:
Kelinear=(1/2)
角或动动能是物体的转动惯量及角速度的函数:
Keangular=(1/2)
两碰撞物体间的动能守恒是指,两物体碰撞的能量总和等于碰撞后的能量总和:
+ + +
牵涉到动量散失的碰撞称为非弹性碰撞或塑性碰撞。例如,若以相反方向丢出两个泥球,它们的动能转化成使泥球变形的应变能,而它们的碰撞反应(即撞击之后的运动)就没那幺引人注目。若为完全非弹性碰撞,则两泥球会粘在一块且在撞击后以相同的速度一起移动。动能守恒的碰撞称为完全弹性碰撞。在这些碰撞中,所有物体动能的总和在撞击前后是相等的。弹性碰撞(虽非完全弹性)的最佳范例是两颗撞球间的碰撞,其中球的变形是可忽略的,而且在正常情况下是非永久的。
当然事实上,碰撞大多介于完全弹性和完全非弹性这间。这表示就刚体而言(其外形不会改变),将利用由经验得出的关系式为要仿真的碰撞的弹性程度定量。此关系式是碰撞物体的相对分离速度与相对接近速度的比例:
e= - (v - v )/(v - v )
这里,e是恢复系数(coefficient of restitution)且为物体材质、结构、几何形状的函数。这个系数可由特殊的碰撞实验测得,例如,棒球与球棒或高尔夫球棍与球之间的碰撞。对于完全非弹性碰撞,e等于0;而对于完全弹碰撞,e等于1。对于既不是完全弹性也不是完全非弹性的碰撞的情况,e是介于0和1之间的任意值。在这方面,所考虑的速度沿着碰撞的作用线。
在无摩擦力的碰撞中,撞击的作用线垂直(或正交)于碰撞的接触面。当物体速度沿著作用线时,这种碰撞称为“中心碰撞”(central impact)。粒子与质量分布均匀的球体遭受的撞击都是中心碰撞。而直接中心碰撞发生在作用线通过碰撞物体质心且速度沿著作用线时。当物体速度不沿著作用线时,这种撞击称为“倾斜碰撞”(oblique impact)。你可以利用分量坐标来分析倾斜碰撞,担其中平行于作用线的分量才与撞击有关,而垂直于作用线的分量则无。图5-1显示了这些撞击。
来看一个例子,考虑图5-2中两颗撞球之间的碰撞。
两颗球直径都是标准的2.25in.,重量都为5.5oz.,假设碰撞几乎是完全弹性的且恢复系数是0.9。若当球1撞倒球2时其x方向的速度为20ft/s,如图5-2所示,求两球碰撞后的速度(不考虑摩擦力)。
所要做的第一件事就是确认撞击的作用线是沿着两球重心联机,因为两物体皆为球体,所以其它用线亦垂直于球体表面。则其单位垂直向量可写成:
n= /|n|
n=(0.866)i - (0.5)j
图5-1:撞击的种类
图5-2:撞球碰撞范例
其中n是单位法线向量,r是球半径,而i和j分别表示<span lang=EN-US style='font-family:"Trebuchet MS","sans-serif";mso-fareast-font-fami