游戏中的物理与数学(一):物体运动算法的实现
(看了《游戲開(kāi)發(fā)的數(shù)學(xué)與物理》,感覺(jué)很不錯(cuò),記下點(diǎn)東西。 這是本“圖靈程序叢書(shū)”,對(duì)于這個(gè)系列的書(shū),我一直是蠻喜歡的,感覺(jué)書(shū)的內(nèi)容、排版等,都讓人看著很舒服。)
1.1讓物體沿水平方向運(yùn)動(dòng)
了解勻速直線(xiàn)運(yùn)動(dòng)(最簡(jiǎn)單的運(yùn)動(dòng)),若左邊為x,速度為v,則:x+=v,v=-v。
注意: 注意物體的中心點(diǎn),不同的游戲引擎,可能設(shè)計(jì)的中心點(diǎn)不同,而中心點(diǎn)不同,邊界也就不同。
1.2通過(guò)鍵盤(pán)控制物體的運(yùn)動(dòng)
主要用到小學(xué)學(xué)的勾股定理,原理很簡(jiǎn)單,而且很實(shí)用。
PS: 在模擬運(yùn)動(dòng)時(shí),要控制個(gè)方向的速度。
1.3讓物體沿任意方向運(yùn)動(dòng)
?
注1:請(qǐng)將角的單位統(tǒng)一為弧度(主要關(guān)系到微積分的一些問(wèn)題)。
注2:在計(jì)算浮點(diǎn)數(shù)中,計(jì)算機(jī)不可避免的會(huì)有誤差,絕對(duì)值越大誤差也就越大。因此應(yīng)該盡可能地使用絕對(duì)值小的數(shù)字進(jìn)行計(jì)算。
1.4在物體運(yùn)動(dòng)中加入重力
?
用此方法算的Vy與y分別是:
?
計(jì)算機(jī)所使用的重力加速度單位是特殊的 dot/F^2 (像素/平方幀)
但是對(duì)于真實(shí)的情況,我們用積分模擬
?
這樣就和前面代碼所表示的存在一些誤差,則代碼應(yīng)該改成:
?
1.5物體隨機(jī)飛濺運(yùn)動(dòng)
隨機(jī)數(shù)、均勻隨機(jī)數(shù)、正態(tài)分布 ——>火山噴發(fā)、煙花、摩擦迸出的火花。
產(chǎn)生隨機(jī)速度的部分:
?
生成了均勻隨機(jī)數(shù)(所有數(shù)字的出現(xiàn)概率都相等的隨機(jī)數(shù)),其中,Screen_width 和 screen_height 分辨是屏幕的寬和高。而vx與vy生成的初始值的范圍分別為(-Screen_width/2.0 ~ Screen_width/2.0) 和 (-Base - Screen_height/2.0f ~ -Base+Screen_height/2.0)。
1.6讓物體進(jìn)行圓周角運(yùn)動(dòng)
?
所以物體施加一個(gè)指向某一點(diǎn)的角速度為ω的力,賣(mài)手機(jī)靚號(hào)平臺(tái)物體就會(huì)圍繞該點(diǎn)做圓周運(yùn)動(dòng)。
把t=0代入上面兩式得初始時(shí)間與速度:
1.7[難]微分方程式及其數(shù)值解法
常用:微分方程的數(shù)學(xué)值解法;??歐拉法
?
但是球類(lèi)等運(yùn)動(dòng),需要更高精度,則有以下幾種方法
使用精度更高的高階近似求解微分方程,eg,Runge-Kutta methods 。(數(shù)學(xué)難)
使用線(xiàn)性多步法(Linear multistep method)計(jì)算,即不光使用前一次的值,還使用前兩次或更多次的值進(jìn)行計(jì)算, eg,Adams-Bashforth等。
在一幀內(nèi)多次使用歐拉法計(jì)算,縮小△t——重復(fù)使用歐拉法,比較常用。
總結(jié)
以上是生活随笔為你收集整理的游戏中的物理与数学(一):物体运动算法的实现的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Unity超级角色控制器研究(四)——地
- 下一篇: VR游戏开发者如何避免“移动引起眩晕”