青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

牽著老婆滿街逛

嚴以律己,寬以待人. 三思而后行.
GMail/GTalk: yanglinbo#google.com;
MSN/Email: tx7do#yahoo.com.cn;
QQ: 3 0 3 3 9 6 9 2 0 .

基于沖量的剛體碰撞運動

來源:http://www.vbgamedev.com/AI/Impulsive.htm

基于沖量的剛體碰撞運動

 

原作者:

Katsuaki Kawachi ,Hiromasa Suzuki, Fumihiko Kimura,J¨org Sauer,Elmar,Sch omer

整理,編寫代碼:  ZH1110

 

我們在模擬中通常會遇到三種接觸情況:

1.雙側(cè)的強制約束(Bilateral Constraints),約束始終保持,以前所研究過的是其中的一種方法.

2.瞬間非持久接觸(non-permanent permanent contacts),如鍛鐵、打樁等,可稱為碰撞。其特點是在很短的時間間隔內(nèi)物體的速度發(fā)生突然的變化,所以我們很難直接計算其受力大小,而要通過碰撞前后速度變化的規(guī)律入手。在這一章我們主要討論基于沖量的兩剛體碰撞運動。

3.持久接觸(permanent contacts)第一種的特殊情況.運動著的物體,突然對其施加約束,物體的速度也會發(fā)生突變。但在一定條件下約束會消失.他是基于約束(Constraint-based)的

圖1,接觸的三種情況

 

本節(jié)將根據(jù)動力學(xué)的基本原理對碰撞現(xiàn)象進行描述,討論其的基本規(guī)律,及計算。

 

基本的沖突碰撞

 

一.簡化模型的基本的假設(shè):

1.剛體是堅硬的不會因碰撞發(fā)生變形

2.對象是多邊形

3.摩擦計算基于庫侖定律

我們使用下面的符號來表示用到的物理量:(粗體-矢量,常規(guī)-標量)

ma ,mb      

對象a,b的質(zhì)量

Ia ,Ib      

慣性矩, 轉(zhuǎn)動慣量

uA ,uB      

在碰撞前物體A,B中心線速度矢量

uA',uB'   

在碰撞以后物體A,B中心線速度矢量

ωA B     

碰撞前角速度

ωA',ωB'

碰撞以后角速度 

   

碰撞點

vA ,vB      

在碰撞前撞擊點線速度矢量

vA',vB'   

在碰撞以后撞擊點線速度矢量

GA ,GB

重心坐標

rA ,rB 

重心坐標到碰撞點的矢量

Pn 

碰撞的垂直沖量(Pn=Pn*N)

   

ra,rb在碰撞過程中不會改變,因為假設(shè)剛體在碰撞過程中不發(fā)生位置的變化.

寫成如下形式:

Va為碰撞前剛體A在碰撞點P的速度,Va'為碰撞后剛體A在碰撞點P的速度

 

 

角速度與線速度變化遵守沖量定理:

通過⑴,⑵方程式,我們合并為:

 

 

 

這個方程除了vA'還有Pn是未知量.注意:后面代碼我們是把N提到括號外面,計算沖量Pn的矢量數(shù)值的。

 

將后面已知部分化簡為一常量矢量CA, 類似的我們可得B物體的簡寫方程式:

B物體的N是相反的,即-N.

 

利用Va,Vb的的相對速度Vn,可以判斷是否發(fā)生碰撞,如果Vn < 0意味著發(fā)生碰撞,如果Vn = 0意味著發(fā)生接觸,如果Vn > 0意味著發(fā)生分離.Vn的定義如下:

和并后個方程式可得碰撞以后的相對速度V'n

如果有n個碰撞點這個方程可擴展為:

⑺ (本章暫不討論多個碰撞點同時發(fā)生的情況)

 

為了計算P,定義一個恢復(fù)因數(shù)ξ,(牛頓認為碰撞前后相對速度的比為此常數(shù),且該常數(shù)與碰撞物體的材料性質(zhì)有關(guān),與物體的形狀、大小與碰撞前的速度無關(guān)。)這個重要公式為:

它表明:如果發(fā)生碰撞( Pn<>0 ),那么方程就變?yōu)?/font>

 Vn'=-ξVn

 

計算剛體碰撞運動的一般過程:

1.利用碰撞檢測技術(shù)檢測發(fā)生碰撞的二剛體及碰撞點P,碰撞的垂直方向N

2.使用公式計算相對速度Vn.如果Vn>=0,表示兩物體處于分離,不再進行計算退出. 使用公式⑼計算相對速度Vn'.

3.使用公式⑶,⑷計算常量Ca,Cb(如果是地面,可將其看做一個質(zhì)量很大的剛體,也可單獨處理)

4.使用公式計算碰撞的垂直沖量Pn

5.將Pn代入⑵即可得到二剛體碰撞后的狀態(tài).

代碼如下:

Private Sub process_collision(Boxa As box, Boxb As box, collpos As D3DVECTOR, colN As D3DVECTOR, extra As Single)
'開始正沖量的計算
Dim cl As collision
cl.N = colN  ' 碰撞的垂直方向
cl.Ra = Subtract(collpos, Boxa.pos)'重心坐標到碰撞點的矢量
cl.Rb = Subtract(collpos, Boxb.pos)
cl.Va = Add(cross(Boxa.Vang, cl.Ra), Boxa.v) ' v'= v +ω×R
cl.Vb = Add(cross(Boxb.Vang, cl.Rb), Boxb.v)
 cl.Vn = Dot(cl.N, cl.Va) - Dot(cl.N, cl.Vb) - 0.2 * extra '相對垂直速度, 另外副加微小沖量

cl.Vn2 = -0.4 * cl.Vn '垂直相對速度(碰撞后),0.4是恢復(fù)因數(shù)

If cl.Vn >= 0 Then Exit Sub

'計算Ca  Ca = 1/m+((Ra×N)/Iz×Ra)N Cb = 1/m+((Rb×N)/Iz×Rb)N
cl.Ca = 1 / Boxa.m + Dot(cross(VScale(cross(cl.Ra, cl.N), 1 / Boxa.Iz), cl.Ra), cl.N)
cl.Cb = 1 / Boxb.m + Dot(cross(VScale(cross(cl.Rb, cl.N), 1 / Boxb.Iz), cl.Rb), cl.N)

D3DXVec3Scale cl.Pn, cl.N, ((cl.Vn2 - cl.Vn) / (cl.Ca + cl.Cb))
applyimpulse Boxa, cl.Pn, collpos '應(yīng)用正沖量
applyimpulse Boxb, VScale(cl.Pn, -1), collpos
...
End Sub

摩擦沖量

既然碰撞的正方向可以應(yīng)用沖量方程,那么在與之相垂直的方向(摩擦力方向)也可用此方程,只是后面的判斷方法不同.

如果2個對象接觸并滑行,摩擦力會一直作用于滑行點上,同樣的如果發(fā)生碰撞,正沖量與摩擦沖量也同時工作,我們描述摩擦產(chǎn)生的沖量為摩擦沖量.

如果摩擦力做工,相切的摩擦沖量將要運做,(t是單位矢量相切于碰撞的邊,它的方向可通過P的的速度判斷.)如圖:

這種情況,相切的速度與沖量關(guān)系可以寫成類似于方程⑶的形式,:

 

在碰撞期間的摩擦力

在無摩擦的系統(tǒng)下,正接觸力fn(t)在[t0,t1]段間持續(xù)的作用于2剛體上,因此P點的正沖量為:

現(xiàn)在假設(shè)在P點的速度在碰撞開始和期間始終不為0,等量摩擦力ft(t)持續(xù)的作用,P點的摩擦量沖為:

(11)

假設(shè)在P點碰撞期速度變成了0,摩擦力頂多保持在靜摩擦狀態(tài),摩擦量沖被限制在:

(12)

 

從上面的推斷我們可以推斷摩擦沖量的計算過程:

1.根據(jù)式⑼與式(11)的摩擦沖量都計算出來

2.如果前者小于后者表示動摩擦力不能一直維持到碰撞結(jié)束,實際摩擦沖量為前者,反之亦然.


'開始摩擦沖量的計算
Dim clnew As collision '已經(jīng)改變的碰撞

...
Vr_all = Subtract(clnew.Va, clnew.Vb)

clnew.tangent_vel = Subtract(Vr_all, VScale(clnew.N, Dot(Vr_all, clnew.N)))'tangent_vel=Va-((Va·N-Vb·N)*N) '相切的速度
clnew.tangent_speed = VLength(clnew.tangent_vel) '相切的速度標量
If clnew.tangent_speed > 0 Then
Dim T As D3DVECTOR
D3DXVec3Scale T, clnew.tangent_vel, -1 / clnew.tangent_speed
clnew.Ca = 1 / Boxa.m + D3DXVec3Dot(T, cross(VScale(cross(clnew.Ra, T), 1 / Boxa.Iz), clnew.Ra))'Ca = 1/m+((Ra×T)/Iz×Ra)T
clnew.Cb = 1 / Boxb.m + D3DXVec3Dot(T, cross(VScale(cross(clnew.Rb, T), 1 / Boxb.Iz), clnew.Ra))
clnew.C = clnew.Ca + clnew.Cb

If clnew.C > 0 Then
Const friction = 0.5 '動摩擦系數(shù)
Dim Ptt As Single '臨時摩擦沖量
Ptt = clnew.tangent_speed / clnew.C
If Ptt < friction * VLength(cl.Pn) Then '動靜摩擦判斷
clnew.Pt = Ptt
Else
clnew.Pt = friction * VLength(cl.Pn)
End If

applyimpulse Boxa, VScale(T, clnew.Pt), collpos  '應(yīng)用摩擦沖量
applyimpulse Boxb, VScale(T, -clnew.Pt), collpos
End If
End If

刺透處理

為防止一物體刺穿另一物體,需要對刺穿進行處理.一個方法是檢測時計算出刺入的深度,后在碰撞副加一微小沖量,使其分離.簡單的考慮到一次就對半分離過于突然,不能取得最好的效果,所以每次以按一比例分離

 

 

 

另一個簡單方法是直接修改剛體的位置:
Boxa.pos = Add(VScale(colN, extra * 0.2), Boxa.pos)
Boxb.pos = Add(VScale(colN, -extra * 0.2), Boxb.pos)

目前流行的物理引擎都是通過高級碰撞檢測技術(shù)即未發(fā)生刺穿前?

posted on 2008-01-15 16:41 楊粼波 閱讀(667) 評論(0)  編輯 收藏 引用

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            在线电影欧美日韩一区二区私密| 欧美一区2区视频在线观看| 亚洲免费观看高清完整版在线观看熊| 久久综合久色欧美综合狠狠| 欧美激情一区二区三区成人| 一本综合精品| 国产精品综合不卡av| 久久av在线看| 最新国产の精品合集bt伙计| 亚洲视频一区二区在线观看| 国产女精品视频网站免费| 久久久伊人欧美| 亚洲精品一区二区在线| 欧美在线视频一区二区| 在线观看免费视频综合| 欧美日韩久久不卡| 欧美有码在线观看视频| 亚洲精品乱码久久久久| 久久久久青草大香线综合精品| 亚洲经典三级| 国产欧美日韩精品专区| 欧美插天视频在线播放| 亚洲欧美999| 亚洲欧洲日韩在线| 久久久久国产精品一区三寸| 日韩一二在线观看| 极品尤物一区二区三区| 欧美午夜精品理论片a级按摩| 久久久久久久欧美精品| 在线综合欧美| 亚洲国内自拍| 久久婷婷影院| 午夜精品福利一区二区三区av | 欧美日韩在线播放一区| 欧美在线高清| 一区二区三区日韩欧美精品| 女女同性精品视频| 欧美一区二区性| 在线亚洲一区| 91久久线看在观草草青青| 国产视频久久| 国产精品九色蝌蚪自拍| 欧美黄色免费| 欧美91视频| 久久久国产精品亚洲一区 | 最新国产の精品合集bt伙计| 国产乱码精品一区二区三| 欧美区国产区| 欧美jizzhd精品欧美巨大免费| 久久精品道一区二区三区| 亚洲一区二区三区四区视频| 亚洲免费福利视频| 亚洲欧洲偷拍精品| 欧美激情一级片一区二区| 久久综合久久综合这里只有精品 | 久久精品国产成人| 亚洲欧美日韩一区在线观看| 亚洲毛片在线观看| 亚洲国产精品毛片| 欧美激情久久久久久| 麻豆久久精品| 美女在线一区二区| 美女999久久久精品视频| 久久视频在线看| 久久久久九九视频| 久久久免费av| 久久米奇亚洲| 久久综合999| 欧美成人精品在线播放| 欧美a级理论片| 欧美成人资源| 亚洲激情婷婷| 日韩午夜av| 亚洲香蕉在线观看| 亚洲欧美精品一区| 欧美中文字幕视频在线观看| 欧美影院视频| 另类图片综合电影| 欧美成熟视频| 欧美视频一区二区| 国产精品日韩一区二区| 国产日韩综合| 在线看片成人| 999亚洲国产精| 亚洲一区二区三区精品动漫| 亚洲欧美另类在线| 久久九九国产| 亚洲国产精品美女| av成人免费在线| 午夜免费日韩视频| 久久中文在线| 欧美视频中文字幕在线| 国产精品视频精品| 一区二区在线观看视频| 亚洲精品色婷婷福利天堂| 亚洲午夜成aⅴ人片| 欧美在线观看视频| 欧美电影资源| 一本色道久久88亚洲综合88| 午夜一区在线| 蜜乳av另类精品一区二区| 欧美日韩一区二区三区高清| 国产欧美高清| 亚洲老板91色精品久久| 性欧美暴力猛交另类hd| 老司机午夜精品视频| 亚洲区一区二区三区| 亚洲欧美制服中文字幕| 美脚丝袜一区二区三区在线观看| 欧美网站在线观看| 在线播放日韩欧美| 亚洲一区二区免费| 欧美成人一区在线| 亚洲性视频网站| 欧美成人激情在线| 国产欧美日韩中文字幕在线| 亚洲剧情一区二区| 久久久久久国产精品一区| 亚洲美女啪啪| 狂野欧美激情性xxxx| 国产欧美日韩综合一区在线播放| 亚洲黄色在线看| 久久九九99视频| 中文有码久久| 欧美大片免费观看| 国产一区二区三区日韩欧美| 中文高清一区| 欧美激情中文字幕乱码免费| 性色av一区二区怡红| 欧美日韩一区二区三区在线视频| 在线观看日韩精品| 久久国产精品久久久久久| 亚洲精品视频在线播放| 久久资源av| 一区二区三区在线免费视频| 香蕉精品999视频一区二区 | 夜夜爽99久久国产综合精品女不卡| 久久久国产午夜精品| 国产精品亚洲аv天堂网| 在线视频一区观看| 亚洲春色另类小说| 久久精品综合一区| 国产亚洲一级| 久久福利视频导航| 亚洲视频一区二区| 欧美日韩综合另类| 一区二区三区久久精品| 亚洲福利视频一区二区| 久久字幕精品一区| 在线观看亚洲视频| 久久最新视频| 久久久久国产精品麻豆ai换脸| 国产区二精品视| 欧美主播一区二区三区美女 久久精品人 | 美女脱光内衣内裤视频久久网站| 国产亚洲日本欧美韩国| 久久黄色小说| 性做久久久久久久久| 国产亚洲视频在线| 久久久一二三| 久久精品视频va| 在线观看成人av| 欧美国产免费| 欧美a级在线| 日韩亚洲成人av在线| 亚洲精品一区二区三区蜜桃久| 欧美日韩国产大片| 亚洲一区二区三区免费在线观看| 99精品视频免费全部在线| 欧美日韩一区二区免费在线观看| 这里只有精品在线播放| 中文精品一区二区三区| 亚洲黄色免费| 欧美精品自拍| 亚洲一区二区在线| 欧美丰满高潮xxxx喷水动漫| 亚洲第一网站| 亚洲激情校园春色| 欧美日韩国产一区精品一区| 亚洲一区二区三区涩| 亚洲女同性videos| 精品69视频一区二区三区| 美女被久久久| 欧美日韩国产美| 欧美一级视频一区二区| 久久综合久久88| 久久香蕉国产线看观看av| 日韩亚洲欧美在线观看| 久久九九热re6这里有精品| 欧美日韩在线一区二区| 国内揄拍国内精品久久| 亚洲一区免费| 亚洲国产日韩欧美在线动漫| 亚洲综合成人在线| 欧美精品三级日韩久久| 激情五月综合色婷婷一区二区| 亚洲图片激情小说| 欧美成人性网| 久久国产精彩视频| 国产精品久久久久av|