鞘翅動力學(xué)-1.航空安全&末速度的理論公式 [minecraft]

在上一期,我們通過實驗得出了一些關(guān)于鞘翅的簡單結(jié)論,但是這顯然不夠精細。為了獲得更精確的答案,我們還需要從基本的動力學(xué)原理上分析,對于mc來說就是翻源碼。當(dāng)然也可以繼續(xù)通過實驗和猜想得出結(jié)論,但事實證明結(jié)論過于復(fù)雜導(dǎo)致我不太能猜出來……
以下原理是根據(jù)Java Edition 1.12.2的(偽)源代碼翻譯的(沒有找到反混淆的1.13源碼orz),上一期的實驗是在Java Edition 1.13.2進行的。這兩個版本對于鞘翅和煙花火箭本身似乎沒有特別大的改動,因此這些原理是可以解釋實驗的。
本節(jié)主要應(yīng)用內(nèi)容是根據(jù)以下原理驗證上一期的實驗結(jié)論,并不提出過多的新內(nèi)容。
如果有錯誤,請在評論區(qū)指出。
本文末尾提到了鞘翅的安全問題:包含對于“感受動能”與“墜毀”的簡要解釋。這是我認(rèn)為本章最重要的內(nèi)容,如果太長,請直接看結(jié)尾。
本期主要內(nèi)容:
?鞘翅滑翔的動力學(xué)方程
?穩(wěn)態(tài)速度的理論預(yù)期
?飛行安全注意事項

鋪墊知識1 - 時間的離散性
在Minecraft中,時間是不連續(xù)的,對于實體的運動來說是以gametick(簡稱gt)為最小單位,正常情況下 1gt 等于(1/20)秒。又因為一些“力”是正比于速度的(例如流體(空氣、水、巖漿)阻力以及與鞘翅有關(guān)的很多力),這種力的作用效果相當(dāng)于等比例地將速度縮?。ɑ蚍糯螅?,所以力的作用順序會對速度和位移變化的結(jié)果產(chǎn)生影響。
(這次圖清楚一些了嗎emmm)


以上關(guān)于速度、位移的類似過程可用類似以下(偽)代碼表示(以java為例):

鋪墊知識2 - 視線方向的描述
“實體螺旋坐標(biāo)”:玩家的視線方向在調(diào)試界面(F3)中顯示為pitch = α,yaw = β。其中pitch是俯仰角,取值范圍是[-90°, 90°],向下為正;yaw是水平旋轉(zhuǎn)角,取值范圍是[-180°, 180°],正南方向的值為0,以此為基準(zhǔn),向西為正,向東為負(fù)。
“世界坐標(biāo)”:右手系空間直角坐標(biāo)系,東 = +x,上 = +y,南 = +z。
為了方便描述視線方向,在本文中規(guī)定了一些參量(主要是視線矢量)。注意:這些只是我臨時規(guī)定的,具有強烈的主觀性。

鞘翅的動力規(guī)則
本節(jié)只討論鞘翅在空氣中自由作用時的原理,即暫不考慮煙花火箭和三叉戟的作用。

“時間量子化”相關(guān)段落已經(jīng)介紹了分析速度變化過程的方法,根據(jù)類似的方法,可以得出在不同情況下鞘翅的動力學(xué)方程。

根據(jù)以上原理,就可以計算出鞘翅滑翔的理論終末速度,詳細解釋上一期的實驗結(jié)果。

實驗結(jié)果?-?純鞘翅
根據(jù)常識可知,終末速度必須是向下的,因此我們只需要求出俯視下降、仰視下降這兩種情況的終末速度。當(dāng)運動趨于穩(wěn)定時,可以認(rèn)為達到勻速運動狀態(tài),即速度的變化率為零,聯(lián)立二元一次方程組求解即可(但是這個方程組比較復(fù)雜233)。

根據(jù)上述公式還可以得出一些結(jié)論,但不一定正確:
*以俯角53.4°滑翔時,水平速度最大,67.776m/s;
*以俯角5.716°滑翔時,飛行方向與視線平行;
滑翔終末速度的變化率在俯仰角為0°的點附近發(fā)生突變;
當(dāng)仰角57.9° ~?俯角38.6°之間時,下降速度小于10m/s;
*以仰角12.8°滑翔時,下降速率最小,1.517m/s;
以0°滑翔時,下降率最?。?.099):每下降1m,水平方向飛行10.102m;
……
將上述公式繪制成圖像和表格,與實驗數(shù)據(jù)對照:


從圖像上看著差不多(

仔細對比數(shù)據(jù)就會發(fā)現(xiàn),雖然總體上差不多,但還是有一定的誤差。在俯視時誤差很小,仰視時誤差偏大一些??傮w來說,此結(jié)論幾乎完全適用于俯視的情形,但對于仰視的情形不一定完全適用。
對于以上情況,我暫時沒有想到比較好的解釋或修改方法(咕咕咕)。

鞘翅飛行的安全問題
這實際上是本章重點內(nèi)容,讀者或許是空降過來的。
由于傷害判定的代碼在動力規(guī)則附近,因此在查找后者時自然看到了前者。這是很有意義的內(nèi)容,因此也在這里簡述一遍。
鞘翅飛行中,玩家可能受到的傷害分為兩種:摔落傷害、沖撞傷害。前者就是傳統(tǒng)意義上的摔落傷害,后者即為我們所熟知的“xxx感受到了動能”。前者完全不能用“碰撞”來解釋,非常反直覺;后者可以認(rèn)為是“水平碰撞”,它的算法比較符合物理學(xué)常識。
1. 摔落傷害
用鞘翅飛行時,摔落傷害也是可能出現(xiàn)的,這其實就是按照高度計算的傳統(tǒng)的摔落傷害。1gt中,在整個加速過程之前,會先檢測豎直速度 v(以向上為正方向,單位為m/s)。
如果 v < -10(向上運動或下降速度不足10 m/s),就會將摔落高度重置為1 m,因此以這樣的速度撞擊地面不會受到摔落傷害。
如果 v > -10(以大于或等于10 m/s的豎直速度下降),就會開始記錄下落的相對高度,并按照相應(yīng)的規(guī)則計算摔落傷害。一般情況下,落地時,傷害為 { 高度 - 3 }。
因此,使用鞘翅飛行時,撞擊地面時受到的傷害與速度并無必然聯(lián)系,而只取決于在撞擊之前以10 m/s或更大的豎直速度下降的豎直距離。玩家下落時的速度是有限的,但可能受到的摔落傷害卻是無限的。以看起來不是很大的速度落地,也有可能發(fā)生墜毀事故。
在“自動駕駛(不駕駛,掛機)”的過程中,為了保證安全,最好應(yīng)保證以不足10 m/s的豎直速度下落;為了保證效率,水平速度可以比較大。視俯角的一個臨界取值是38.6°,此時的豎直速度(絕對值)為9.991 m/s,水平速度是59.089 m/s,可能受到的最大水平碰撞傷害是26.5445。
2.“動能”
當(dāng)使用鞘翅飛行的玩家在水平方向高速撞擊方塊時,會受到相應(yīng)的傷害,如果因此致死,則會顯示“<玩家>感受到了動能(experienced kinetic energy)”。這種傷害實際上是根據(jù)水平動量的變化判定的,當(dāng)某1gt內(nèi)水平速度大幅減小時,玩家會受到撞擊傷害。這種傷害不受護甲本身影響,但會受保護附魔影響,具體的減傷機制在Minecraft Wiki上已經(jīng)寫得很詳細,這里不再贅述,請自行查看。
這種傷害(u)大體上與水平方向碰撞前后gt的動量(速度)變化量(Δv)正相關(guān),具體關(guān)系大致為:u = 10*Δv - 3 (v 取游戲單位(方塊/gt))。
在不使用三叉戟的情況下,玩家用鞘翅飛行能夠達到的最大水平速度約為67.776 m/s,即3.3888 bl/gt,以此速度水平撞擊方塊,受到的傷害應(yīng)為30.888。以這個速度飛行時,一定不會處在火箭生效的狀態(tài),因此撞一次就停下了。
在使用平視火箭的情況下,玩家的水平速度大致為33.695 m/s,即1.68475 bl/gt,在這時撞墻受到的傷害為13.8475。但要注意火箭有重置速度的功能,撞擊后還會恢復(fù)到較大的速度,因此使用火箭時撞擊很可能是連環(huán)多次的,最終導(dǎo)致感受動能。在天花板凹凸不平的通道(例如某些服務(wù)器里精心裝飾的地獄交通)里,這一點尤其危險。
重要結(jié)論:
墜落傷害由高度直接決定,上限不可觀(至少10萬是可以有的);
水平碰撞傷害由速度(動量)決定,上限可觀;
由1,2可知,鞘翅滑翔時的主要傷害是墜落,而不是“感受動能”;
但是,在使用火箭時,“感受動能”的風(fēng)險很大;
最大安全滑翔俯角約為38.6°。