官术网_书友最值得收藏!

  • 創客智能電子制作
  • 《無線電》編輯部
  • 929字
  • 2021-01-06 18:06:12

2.2 彈道的計算

第二個問題就是彈道的模擬了。一般情況下,各類游戲引擎就是專門用來計算這個的,可是我需要的僅僅是簡單的2D拋物線計算而已,完全沒必要興師動眾地去移植一款大型的游戲引擎,所以就自己動手寫一個吧。

首先在不考慮空氣阻力的理想情況下簡化土豆拋射運動,如圖2.4所示。

圖2.4 在不考慮空氣阻力的理想情況下簡化的土豆拋射運動

如果土豆不是垂直向上發射,而是與地平面呈φ角度射出,那么,這物體會按照拋物線軌跡移動,它的水平運動與垂直運動可以通過下式計算。

其中,R代表土豆的拋射距離,v0代表拋射的初速度。

如果假設土豆是以初速度50m/s,與地平面呈30°角射出。根據公式,不考慮任何干擾因素,它會飛到220.7m遠的地方。如果真砸到怪獸,估計會很痛。

以上是假設了一個具體數字來幫助大家理解。在這個游戲程序中,我們需要解決的問題就是如何寫一個程序來計算任意φ時的土豆運動軌跡。一旦這個土豆在某時刻的位置達到怪獸的邊界坐標內,那么即說明怪獸被擊中;否則當土豆運動到0高度時,則說明碰撞到地面,沒有擊中目標。

為了能讓程序實時地計算出土豆的位置,我們回顧一下那個遺忘了很多年卻又十分神奇的牛頓定律。通常線性的運動方程表示如下。

F=mdv/dt

換個形式讓它可以被積分

dv/dt=F/m

dv=(F/mdt

可以認為速度上的無窮小的變化量dv等于(F/m)乘以時間無窮小的變化量。可是在計算機中我們是無法讓時間無窮小的,因此我們只能取一個較小的離散時間增量Δt,那么Δv就可以通過下式表示。

Δv=(F/m)Δt

Δv是在離散的時間片段內速度的改變值,因此當前的速度取決于之前的速度與速度變化之和。

vt)+Δv=vt)+(F/m)Δt

在初始條件下,vt為土豆離開炮筒時的速度。同理,位置的計算也可以用類似的方法表示。對于風力的影響,我們可以把它簡化為在水平方向上的恒定加速度,然后用與垂直方向相同的方法來處理。

經過這樣的轉化和簡化,以上微分方程問題就適合數字計算機來計算了,這就是游戲引擎中常用的所謂“歐拉積分法”。雖然這種方式的計算精度不高,只是對函數曲線進行了多邊形近似,但是如果把離散時間盡量取得小一些,對付這種簡單的小游戲還是綽綽有余了。搞明白了上面的內容,相關代碼就簡單了。我們只摘錄其中最需要說明的部分。

在精心地調整各項參數之后,彈道的模擬效果還是比較滿意的。

主站蜘蛛池模板: 禄丰县| 当涂县| 吉林市| 兴仁县| 五常市| 龙陵县| 新源县| 彝良县| 德安县| 梅河口市| 桂平市| 登封市| 锡林浩特市| 灵山县| 文水县| 喜德县| 旌德县| 宜丰县| 南江县| 无锡市| 娄底市| 子洲县| 西和县| 莫力| 安塞县| 漯河市| 赞皇县| 麻栗坡县| 团风县| 红桥区| 精河县| 嘉禾县| 东港市| 新巴尔虎左旗| 繁昌县| 山丹县| 集安市| 蛟河市| 巴楚县| 阿图什市| 勐海县|