物理學(xué)----碰撞
本文節(jié)選于《游戲開發(fā)物理學(xué)》如果你希望了解更多,請(qǐng)購(gòu)買正版圖書
現(xiàn)在你已了解了粒子和剛體的運(yùn)動(dòng),接著要看當(dāng)它們撞在一起時(shí)會(huì)發(fā)生什幺事情.這就是本章計(jì)論的主題,物別是告訴你如何處理粒子和剛體的碰撞反應(yīng)。
在開始之前,先將碰撞“偵測(cè)”和碰撞“反應(yīng)”做個(gè)區(qū)分。做個(gè)區(qū)分。碰撞偵測(cè)是計(jì)算的幾何問(wèn)題,這牽扯到判斷兩物體(或更多)是否碰撞及在何處碰撞。而碰撞反應(yīng)是物理問(wèn)題,牽涉到兩物體(或更多)在碰撞之后的運(yùn)動(dòng)。雖然這兩類問(wèn)題密切相關(guān),而本章將著重討論碰撞反應(yīng)方面的問(wèn)題。
然而我必須說(shuō),碰撞偵測(cè)并沒有被忽略:它是假定物體不能互相穿透的實(shí)時(shí)仿真中要考慮的重要方面。碰撞反應(yīng)算法依據(jù)碰撞偵測(cè)算法的結(jié)果,以準(zhǔn)確地判斷任何碰撞的適當(dāng)反應(yīng);因此,應(yīng)確定你的碰撞偵測(cè)法則是準(zhǔn)確而可靠的。也就是說(shuō),碰撞偵測(cè)不是件簡(jiǎn)單的差事,我發(fā)現(xiàn)要完整地實(shí)現(xiàn)它比剛體仿真的物理層面還難上許多。就游戲應(yīng)用而言,執(zhí)行速度也是主要的議題,相信你是知道的,十分精確的碰撞偵測(cè)會(huì)很慢。正是由于速度和簡(jiǎn)單的緣故,我們將利用邊界球體(以及邊界方塊)與邊和面的碰撞偵測(cè)法則。在第十三章、第十六章的范例仿真中將談到更多關(guān)于此主題的內(nèi)容。
本章中對(duì)剛體碰撞反應(yīng)的處理是根據(jù)標(biāo)準(zhǔn)的(牛頓)碰撞定律。碰撞的物體無(wú)論其結(jié)構(gòu)與材質(zhì)皆視為剛體。如同前幾章一樣,這里討論的剛體即使在碰撞時(shí)也不改變其外形。當(dāng)然,這只是理想化的情況。從日常經(jīng)驗(yàn)中可知,當(dāng)物體相撞時(shí)它們會(huì)凹冊(cè)陷、彎曲、壓縮或起皺。例如,當(dāng)棒球擊中球棒時(shí),棒球在撞擊的毫秒間會(huì)壓縮3/4英寸。盡管這是事實(shí),我們?nèi)砸蕾囃暾姆治黾敖?jīng)驗(yàn)方法來(lái)估算剛體碰撞。
這種標(biāo)準(zhǔn)的方法廣泛地應(yīng)用于工程機(jī)械設(shè)計(jì)、分析和仿真;然而,就剛體仿真而言,有另一套方法可使用,就是“懲罰法”(penalty method) (注1)。
懲罰法中,撞擊力就是使撞擊點(diǎn)上的物體間壓縮的暫時(shí)彈力。此彈力壓縮經(jīng)過(guò)很短暫的時(shí)間,并將大小相等且方向相反的力作用于碰撞物體上以仿真碰撞反應(yīng)。此方法的提議者說(shuō)它有容易實(shí)現(xiàn)的好處。然而實(shí)現(xiàn)上碰到的困難之一是數(shù)值的不穩(wěn)定。懲罰法的使用還有其它爭(zhēng)議,在這里不加以討論。我將許多參考資料加入?yún)⒖嘉墨I(xiàn)中,若你有興趣可以看看。
沖量/動(dòng)量定律
沖力的定義是作用時(shí)間非常短暫的力。例如,開槍時(shí)施加在子彈上的力稱為沖力。兩碰撞物體間的碰撞力也稱為沖力,當(dāng)你踢足球或以球棒擊中棒球時(shí)也是沖力。
沖量是一個(gè)向量,其大小等于動(dòng)量的變化量。所謂的“沖量/動(dòng)量”定律,就是力矩的變化等于所作用的沖量。關(guān)于定質(zhì)量及轉(zhuǎn)動(dòng)慣量的問(wèn)題??蓪懗?/span>
線性沖量= F dt=m( -v )
角沖量= M dt=I( - )
這些等式中。F是沖力,M是沖力的力矩,t是時(shí)間,v是速度,下標(biāo)符號(hào) ﹣表示沖撞前的瞬間, 上標(biāo)符號(hào)+表示沖撞后的瞬間。用下列等式便可求出平均沖力及力矩:
F=m( -v )/( - )
M=I( - )/( - )
考慮下面這個(gè)簡(jiǎn)單的例子:150g (0.01028 slug)的子彈以槍口速度2480ft/s發(fā)射出去,通過(guò)24in.長(zhǎng)的槍管共花了0.0008s;求子彈受到的沖量及平均沖力。本例中,子彈的質(zhì)量固定為150g,而其初速度為0;因此,其初動(dòng)量為0。在開槍后一瞬間,子彈的動(dòng)量為其質(zhì)量乘以槍口速度2480ft/s,得到動(dòng)量等于25.2 slug.ft/s。沖量等于動(dòng)量的變化量,所以是25.5 slug.ft/s。平均沖力等于沖量除以力作用的時(shí)間,本例為:
平均沖力=(25.5 slug-ft/s)/(0.0008s)
平均沖力 = lb
注:本文章用此準(zhǔn)方法并提到懲罰法,只是要讓你知道將示范的方法不只一個(gè)。大致來(lái)說(shuō),“懲罰法”中的“懲罰法”是指反彈常數(shù),它通常很大,用來(lái)表示反彈的的僵硬程度從而表示碰撞物體的硬度(或軟度)。這些常數(shù)會(huì)在描述物體碰撞前后的運(yùn)動(dòng)等式中用到。
這是對(duì)沖量概念簡(jiǎn)單而重要的說(shuō)明,而在你處理剛體碰撞時(shí)也會(huì)用到相同的定律。撞擊期間,沖撞力通常很大,而撞擊時(shí)間很短。當(dāng)兩物體相撞時(shí),兩者均施沖力于對(duì)方;這些力大小相等而方向相反。在步槍范例中,施于子彈上的沖量,也以反方向施于步槍上而產(chǎn)生后坐力。這就是牛頓第三運(yùn)動(dòng)定律。
撞擊
除了上一節(jié)討論的沖量/動(dòng)量定律,標(biāo)準(zhǔn)的撞擊或碰撞反應(yīng)分析依據(jù)另一個(gè)基本定律:牛頓的動(dòng)量守恒定律 - 當(dāng)剛體系統(tǒng)碰撞時(shí),動(dòng)量守恒。這表示固定質(zhì)量的物體,其質(zhì)量與速度之積的總和在撞擊前后是相等的:
-+ = -+
這里,m代表質(zhì)量,v代表速度,下標(biāo)符號(hào)1表示物體1、下標(biāo)符號(hào)2表示物體,下標(biāo)符號(hào) – 表示撞擊前的瞬間,而下標(biāo)符號(hào) + 表示撞擊后的瞬間。
本方法假設(shè)撞擊瞬間主要的力是沖撞力,其它的力都假設(shè)為在短時(shí)間內(nèi)可忽略。記住此假設(shè),因?yàn)樯院蟮牡谑聦?shí)現(xiàn)碰撞反應(yīng)2D實(shí)時(shí)仿真范例時(shí),將用到它。先前提到剛體在碰撞時(shí)并不會(huì)改變外形,而你自身的經(jīng)中真實(shí)的物體在碰撞時(shí)確實(shí)改變了外形。真實(shí)世界中,動(dòng)能會(huì)轉(zhuǎn)成應(yīng)變能(strain energy),使物體變形。當(dāng)物體的變形是永久的時(shí),能量消失,因此動(dòng)能不會(huì)轉(zhuǎn)換。
動(dòng)能
動(dòng)能是關(guān)于移動(dòng)物體的能量形式。動(dòng)能等于物體從靜止加速所需的能量,也等于使移動(dòng)物體靜止所需的能量。動(dòng)能是物體速率或速度與其質(zhì)量的函數(shù)。線性動(dòng)能的公式如下:
Kelinear=(1/2)
角或動(dòng)動(dòng)能是物體的轉(zhuǎn)動(dòng)慣量及角速度的函數(shù):
Keangular=(1/2)
兩碰撞物體間的動(dòng)能守恒是指,兩物體碰撞的能量總和等于碰撞后的能量總和:
+ + +
牽涉到動(dòng)量散失的碰撞稱為非彈性碰撞或塑性碰撞。例如,若以相反方向丟出兩個(gè)泥球,它們的動(dòng)能轉(zhuǎn)化成使泥球變形的應(yīng)變能,而它們的碰撞反應(yīng)(即撞擊之后的運(yùn)動(dòng))就沒那幺引人注目。若為完全非彈性碰撞,則兩泥球會(huì)粘在一塊且在撞擊后以相同的速度一起移動(dòng)。動(dòng)能守恒的碰撞稱為完全彈性碰撞。在這些碰撞中,所有物體動(dòng)能的總和在撞擊前后是相等的。彈性碰撞(雖非完全彈性)的最佳范例是兩顆撞球間的碰撞,其中球的變形是可忽略的,而且在正常情況下是非永久的。
當(dāng)然事實(shí)上,碰撞大多介于完全彈性和完全非彈性這間。這表示就剛體而言(其外形不會(huì)改變),將利用由經(jīng)驗(yàn)得出的關(guān)系式為要仿真的碰撞的彈性程度定量。此關(guān)系式是碰撞物體的相對(duì)分離速度與相對(duì)接近速度的比例:
e= - (v - v )/(v - v )
這里,e是恢復(fù)系數(shù)(coefficient of restitution)且為物體材質(zhì)、結(jié)構(gòu)、幾何形狀的函數(shù)。這個(gè)系數(shù)可由特殊的碰撞實(shí)驗(yàn)測(cè)得,例如,棒球與球棒或高爾夫球棍與球之間的碰撞。對(duì)于完全非彈性碰撞,e等于0;而對(duì)于完全彈碰撞,e等于1。對(duì)于既不是完全彈性也不是完全非彈性的碰撞的情況,e是介于0和1之間的任意值。在這方面,所考慮的速度沿著碰撞的作用線。
在無(wú)摩擦力的碰撞中,撞擊的作用線垂直(或正交)于碰撞的接觸面。當(dāng)物體速度沿著作用線時(shí),這種碰撞稱為“中心碰撞”(central impact)。粒子與質(zhì)量分布均勻的球體遭受的撞擊都是中心碰撞。而直接中心碰撞發(fā)生在作用線通過(guò)碰撞物體質(zhì)心且速度沿著作用線時(shí)。當(dāng)物體速度不沿著作用線時(shí),這種撞擊稱為“傾斜碰撞”(oblique impact)。你可以利用分量坐標(biāo)來(lái)分析傾斜碰撞,擔(dān)其中平行于作用線的分量才與撞擊有關(guān),而垂直于作用線的分量則無(wú)。圖5-1顯示了這些撞擊。
來(lái)看一個(gè)例子,考慮圖5-2中兩顆撞球之間的碰撞。
兩顆球直徑都是標(biāo)準(zhǔn)的2.25in.,重量都為5.5oz.,假設(shè)碰撞幾乎是完全彈性的且恢復(fù)系數(shù)是0.9。若當(dāng)球1撞倒球2時(shí)其x方向的速度為20ft/s,如圖5-2所示,求兩球碰撞后的速度(不考慮摩擦力)。
所要做的第一件事就是確認(rèn)撞擊的作用線是沿著兩球重心聯(lián)機(jī),因?yàn)閮晌矬w皆為球體,所以其它用線亦垂直于球體表面。則其單位垂直向量可寫成:
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