• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

      動量定理在Unity 3D中的應(yīng)用

      2022-10-14 08:53:22丁彥希張迪迪徐秋雨郭仁春
      現(xiàn)代信息科技 2022年16期
      關(guān)鍵詞:動量定理轉(zhuǎn)動慣量剛體

      丁彥希,張迪迪,徐秋雨,郭仁春

      (沈陽化工大學(xué),遼寧 沈陽 110142)

      0 引 言

      動量定理是動力學(xué)的普遍定理之一。剛體是力學(xué)中的一個(gè)科學(xué)抽象概念,即理想模型。Unity 3D簡稱U3D,是由Unity Technologies公司開發(fā)的一個(gè)讓玩家輕松創(chuàng)建諸如三維視頻游戲、建筑可視化、實(shí)時(shí)三維動畫等類型互動內(nèi)容的多平臺的綜合型游戲開發(fā)工具。在U3D中,是通過物理引擎機(jī)制來實(shí)現(xiàn)物體的物理效果。物理引擎通過為剛性物體賦予物理屬性的方式來模仿真實(shí)世界中的物體碰撞、跌落等反應(yīng)。本文通過給剛體添加力和力矩來使剛體產(chǎn)生運(yùn)動,包括平動和轉(zhuǎn)動,并對運(yùn)動狀態(tài)進(jìn)行定量分析,使讀者能更好的認(rèn)識動量定理在剛體運(yùn)動中的體現(xiàn),從而更好地設(shè)計(jì)一個(gè)仿真系統(tǒng)。

      1 剛體運(yùn)動——從剛體平動到剛體轉(zhuǎn)動

      1.1 牛頓定律和動量定理

      剛體都有質(zhì)心的概念,如果作用力的方向通過質(zhì)心,則可以將剛體視作質(zhì)點(diǎn)。當(dāng)剛體的作用力不在質(zhì)心上時(shí),剛體會發(fā)生轉(zhuǎn)動,轉(zhuǎn)動時(shí)所有的物理量和物理定律都可以從平動形式類推過來。

      剛體平動用位移,速度,加速度,慣性,力,動量,沖量等描述,對應(yīng)的剛體轉(zhuǎn)動要換成角位移,角速度,角加速度,轉(zhuǎn)動慣量,力矩,角動量,角沖量等概念,所有的物理定律都不變,如表1所示。

      表1 剛體平動與剛體轉(zhuǎn)動物理量對比

      1.1.1 平動慣性定律和轉(zhuǎn)動慣性定律

      牛頓第一定律也叫慣性定律,慣性是物體要保持原有的狀態(tài)。慣性是有大小的。物體的質(zhì)量mass就是衡量慣性的一個(gè)重要指標(biāo)。

      轉(zhuǎn)動時(shí),物體要保持勻速旋轉(zhuǎn)的狀態(tài),即保持角速度大小和方向不變,這就是轉(zhuǎn)動慣性定律。轉(zhuǎn)動慣性也有大小,用轉(zhuǎn)動慣量來衡量。轉(zhuǎn)動慣量用I來表示,其定義為

      其中是質(zhì)量,是該質(zhì)心的位置到轉(zhuǎn)軸的距離,的單位是kgm。

      1.1.2 平動牛頓第二定律和轉(zhuǎn)動牛頓第二定律

      如果要改變狀態(tài)就需要外力。外力越大狀態(tài)改變也越大,但如果慣性即質(zhì)量很大,狀態(tài)改變就越小。用數(shù)學(xué)公式來描述即

      這就是牛頓第二定律,其中是慣性,是外力,是加速度。

      如果要改變轉(zhuǎn)動的狀態(tài),即改變角速度,就需要對剛體加外力矩,因此角速度的改變用角加速度來衡量,該值與外力矩大小成正比,與轉(zhuǎn)動慣量成反比,這與加速度的定義極為相似,即:

      1.1.3 平動動量定理和轉(zhuǎn)動動量定理

      平動過程中的動量是,轉(zhuǎn)動過程中的角動量是。平動的動量定理和轉(zhuǎn)動的角動量定理分別為:

      1.1.4 動量守恒和角動量守恒

      當(dāng)兩個(gè)物體相互碰撞后,在沒有損耗的情況下,碰撞前的總動量=碰撞后的總動量,這就是動量守恒。與平動相似,角動量也滿足守恒定律。如果兩個(gè)剛體相碰撞,兩者相比較如下:

      這些定律都體現(xiàn)在U3D的物理引擎中,了解這些物理定律就會讓虛擬仿真更符合的預(yù)期。

      1.2 剛體屬性

      在場景中放置一個(gè)平面Plane作為地面,再添加一個(gè)立方體Cube和一個(gè)球體,并讓這兩個(gè)物體位于地面上方如圖1(a)所示。給立方體和球體增加剛體組件RigidBody如圖1(b)所示。運(yùn)行后物體會自動落到地面。

      圖1 Rigidbody組件

      讓場景中的物體運(yùn)動可以有兩種方式,其一是運(yùn)動學(xué),其二是用物理學(xué)。

      運(yùn)動學(xué)使用的是物體的Transform,直接用Translate(平移)和旋轉(zhuǎn)(Rotate)來使物體移動或旋轉(zhuǎn),或者直接用代碼改變物體的位置和歐拉角。

      場景中的物體加載了Rigidbody組件,就要受到物理定律的控制,如果希望不被物理定律控制,可以開啟該組件中的Is Kinematic選項(xiàng)。

      與物理問題相關(guān)的程序要寫在FixedUpdate中,F(xiàn)ixedUpdate兩幀之間的間隔是固定的,默認(rèn)是0.02 s,也就是1秒鐘運(yùn)行50次。這與Update不同,Update兩幀之間的間隔是不固定的。

      質(zhì)量mass(kg),速度velocity(m/s)是剛體的兩個(gè)基本屬性,一個(gè)代表慣性,一個(gè)代表狀態(tài)。在剛體的眾多屬性中最重要的就是速度velocity了,而mass多數(shù)時(shí)候可以忽略。

      2 轉(zhuǎn)動慣量inertiaTensor

      對于平動,剛體有一個(gè)慣性量就是質(zhì)量mass,同樣對于轉(zhuǎn)動,剛體也有一個(gè)描述轉(zhuǎn)動慣性的量,叫作慣性張量inertiaTensor。

      轉(zhuǎn)動慣量除了與質(zhì)量相關(guān)外還與旋轉(zhuǎn)軸位置、剛體形狀和大小有關(guān)。同一個(gè)剛體旋轉(zhuǎn)軸的位置,有不同的轉(zhuǎn)動慣量。若旋轉(zhuǎn)軸通過剛體的質(zhì)心,軸的方向不同,也會有不同的轉(zhuǎn)動慣量,其中沿著物體坐標(biāo)系,,主軸的三個(gè)方向的轉(zhuǎn)動慣量最為重要,其次是其他方向,這樣的轉(zhuǎn)動慣量共有9個(gè)參數(shù)形成一個(gè)張量矩陣如下:

      ,,主軸方向上的量處于矩陣的對角線上,即I,II。在U3D中,慣性張量inertiaTensor就是指這三個(gè)數(shù),形成一個(gè)向量。

      3 AddForce

      將場景中物體的質(zhì)量mass設(shè)為2 kg,給剛體施加一個(gè)沿軸方向500 N的力的代碼如下:

      其中,rb是指如圖1所示場景中的物體。

      像平時(shí)扔?xùn)|西,擊球或開槍都是給物體一個(gè)初始的力,然后物體就沿力的方向前進(jìn)了。但同樣是給物體一個(gè)水平方向500 N的力,瞬間給一下,持續(xù)一段時(shí)間和一直持續(xù)給,物體速度很顯然是完全不同的。如下文給出的代碼所示:

      其中AddForce代碼只在Start()中僅加載一次,AddForce是對物體加力,這個(gè)力的作用時(shí)間Δ其實(shí)就是0.02 s,也就是FixedUpdate兩幀之間的間隔Fixed Timestep。

      根據(jù)動量定理求出:

      U3D中對AddForce提供了四種模式,用ForceMode來區(qū)別,方法是對AddForce增加第2個(gè)參數(shù):

      rb.AddForce(new Vector3(500, 0, 0), ForceMode.Force);

      ForceMode的四種模式分別是:Acceleration、Force、Impulse、VelocityChange,其力的作用方式有些區(qū)別,默認(rèn)是Force,可以省略。

      3.1 Force

      3.2 Acceleration

      Acceleration是加速度,單位是m/s,加速度本身就是速度的改變量,因此下面的代碼:

      可以猜測得到物體的速度應(yīng)為:10 m/s

      因?yàn)榧铀俣?500 m/s,說明速度1秒增加500 m,因而作用時(shí)間是0.02 s,最終速度自然就是500×0.02=10 m/s。

      由于直接使用的是加速度,就不用考慮物體質(zhì)量了。

      3.3 Impulse

      Impulse是沖量,單位是N?s或者kg?m/s,該量就是直接給了Δ。因此下面的代碼:

      rb.AddForce(new Vector3(500, 0, 0), ForceMode.Impulse);

      可以猜測到物體的速度為:

      由于直接給的是沖量,這樣就不用考慮作用時(shí)間0.02 s了。因此Impulse應(yīng)該是每次運(yùn)行就施加500 N?s,與作用時(shí)間無關(guān),只考慮運(yùn)行次數(shù)即可。

      3.4 VelocityChange

      VelocityChange 顧名思義是速度的改變量,這樣的說法有點(diǎn)類似Acceleration,與Acceleration不同的是,VelocityChange是每次運(yùn)行就改變速度的量,而Acceleration則是每秒速度的改變量。因此VelocityChange的單位應(yīng)該是米/秒/次。

      因此代碼:

      運(yùn)行結(jié)果就應(yīng)該是:500 m/s

      VelocityChange與Acceleration一樣不用考慮物體的質(zhì)量。VelocityChange與Inmpuse一樣不用考慮那個(gè)時(shí)間間隔。

      通過這幾個(gè)例子可以看到velocity才是最想知道的量,而mass常被忽略。

      4 AddTorque

      4.1 給立方體加力矩

      與AddForce相似,可以給物體施加力矩AddTorque,該力矩可以使剛體繞質(zhì)心旋轉(zhuǎn)。如果外力矩為,則剛體的角速度的變化量為:

      在U3D中Δ=0.02 s,為轉(zhuǎn)動慣量,這個(gè)轉(zhuǎn)動慣量為慣性張量inertiaTensor,由于是張量,問題就變得比平動復(fù)雜得多,下面依然采用手工計(jì)算與代碼相結(jié)合的形式進(jìn)行相互驗(yàn)證。

      對場景中的立方體編寫下文的代碼:

      因此結(jié)果應(yīng)該是(1.2,0,0)。運(yùn)行后發(fā)現(xiàn)正是這個(gè)結(jié)果如圖2所示。

      圖2 給立方體加力矩后的運(yùn)行結(jié)果

      4.2 給長方體加力矩

      通過代碼驗(yàn)證,結(jié)果如圖3所示。

      圖3 長方體的轉(zhuǎn)動慣量運(yùn)行結(jié)果

      下面將長方體斜著放置,力矩仍保持不變,將立方體的歐拉角設(shè)為(0,30,0),如圖4(a)所示是頂視圖?,F(xiàn)在給一個(gè)力矩=(10,0,0),這個(gè)力矩是對世界坐標(biāo)系的而言的。那么認(rèn)為物體應(yīng)該繞世界坐標(biāo)x軸旋轉(zhuǎn),即如圖4(b)所示的那個(gè)樣子,繞紅色軸旋轉(zhuǎn)。

      圖4 斜長方體方體轉(zhuǎn)

      然而運(yùn)行結(jié)果卻是另外的形式,轉(zhuǎn)軸相對世界坐標(biāo)發(fā)生了偏移,其角速度如圖5所示。

      圖5 運(yùn)行結(jié)果

      如圖6(a)所示,物體是繞著黃色的軸旋轉(zhuǎn)的,不是紅色的軸

      圖6 對x軸加力矩,結(jié)果旋轉(zhuǎn)軸發(fā)生偏移

      如果再將歐拉角改成(0,60,0),結(jié)果如圖6(b)所示的樣子,其角速度如圖7所示。

      圖7 運(yùn)行結(jié)果

      本來是給世界坐標(biāo)系的軸施加力矩,實(shí)際上物體卻沒有繞世界坐標(biāo)系的軸旋轉(zhuǎn)而是發(fā)生了偏移,角速度為(1.02,0,-0.312)。

      4.3 ForceMode

      AddTorque與AddForce一樣也有ForceMode選項(xiàng),包括 Acceleration,F(xiàn)orce,Impulse,VelocityChange,含義也都與AddForce中一樣,只不過這幾個(gè)量改變的是角速度,默認(rèn)Force可以省略,具體如下文給出的代碼所示:

      含義是對角速度的改變量為10 rad/s,可以推知,作用時(shí)間為0.02 s時(shí)速度的改變量為0.2 rad/s,不 用考慮轉(zhuǎn)動慣量。

      ForceMode.Impulse是沖量,需要考慮轉(zhuǎn)動慣量:

      ForceMode.VelocityChange是每次直接改變角速度,不用考慮轉(zhuǎn)動慣量,代碼為:

      5 結(jié) 論

      動量定理是物理學(xué)中的一個(gè)基本規(guī)律。在Unity3D中,動量定理在剛體運(yùn)動過程中充分體現(xiàn),基于此定理的基礎(chǔ)上可以計(jì)算出物體的運(yùn)動狀態(tài),從而使用戶更精確地去控制虛擬物體的運(yùn)動。

      猜你喜歡
      動量定理轉(zhuǎn)動慣量剛體
      軌跡圓法與動量定理法解決帶電粒子在磁場中運(yùn)動問題的對比
      差值法巧求剛體轉(zhuǎn)動慣量
      三線擺測剛體轉(zhuǎn)動慣量誤差分析及改進(jìn)
      車載冷發(fā)射系統(tǒng)多剛體動力學(xué)快速仿真研究
      動量定理在解題中的應(yīng)用
      剛體定點(diǎn)轉(zhuǎn)動的瞬軸、極面動態(tài)演示教具
      基于扭擺振動的轉(zhuǎn)動慣量識別方法
      地震作用下承臺剛體假定的適用性分析
      地震研究(2014年1期)2014-02-27 09:29:47
      動量定理和質(zhì)心運(yùn)動定理的比較教學(xué)
      物理與工程(2012年3期)2012-03-25 10:05:36
      如何通過測量復(fù)擺的周期計(jì)算轉(zhuǎn)動慣量
      物理與工程(2010年1期)2010-03-25 10:01:51
      松江区| 牙克石市| 宁安市| 深圳市| 阿城市| 镇赉县| 松溪县| 山阴县| 博乐市| 泗阳县| 天台县| 禄丰县| 巴林右旗| 岑巩县| 卓资县| 柳江县| 淳化县| 溧水县| 简阳市| 安国市| 闽清县| 四川省| 新宾| 故城县| 耿马| 临武县| 眉山市| 颍上县| 天柱县| 锡林郭勒盟| 江油市| 班戈县| 隆林| 汉沽区| 大化| 余江县| 余姚市| 股票| 咸阳市| 卢氏县| 石狮市|