日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

游戏中的物理与数学(一):物体运动算法的实现

發(fā)布時(shí)間:2024/8/26 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 游戏中的物理与数学(一):物体运动算法的实现 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

(看了《游戲開(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)中加入重力
?

  • y += vy;? ?? ? //對(duì)位置加入速度??
  • vy +=G;? ?? ? //為速度加上加速度??
  • 復(fù)制代碼


    用此方法算的Vy與y分別是:
    ?


    計(jì)算機(jī)所使用的重力加速度單位是特殊的 dot/F^2 (像素/平方幀)

    但是對(duì)于真實(shí)的情況,我們用積分模擬
    ?


    這樣就和前面代碼所表示的存在一些誤差,則代碼應(yīng)該改成:
    ?

  • v=vx*t;? ?? ?? ?? ?? ?? ? //x方向的位置??
  • y=1/2*G*t*t+vy*t+y0;? ?? ?//y方向的位置??
  • 復(fù)制代碼


    1.5物體隨機(jī)飛濺運(yùn)動(dòng)

    隨機(jī)數(shù)、均勻隨機(jī)數(shù)、正態(tài)分布 ——>火山噴發(fā)、煙花、摩擦迸出的火花。

    產(chǎn)生隨機(jī)速度的部分:
    ?

  • Balls[i].vx = rand()*Screen_width/(float)RAND_MAX - Screen_width/2.0f;? ?? ?? ?? ?? ?//vx的初始值??
  • Balls[i].vy = rand()*Screen_height/(float)RAND_MAX - Screen_height/2.0f - Base;? ?? ?//vy的初始值??
  • 復(fù)制代碼


    生成了均勻隨機(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)
    ?

  • x=R*cosf(fAngle)+(Screen_width-Char_width)/2.0f;??
  • y=R*sinf(fAngle)+(Screen_Height-Char_height)/2.0f;??
  • fAngle+=2.0f*PI/120.0f;? ?? ? //一周的時(shí)間為2min??
  • 復(fù)制代碼


    所以物體施加一個(gè)指向某一點(diǎn)的角速度為ω的力,賣(mài)手機(jī)靚號(hào)平臺(tái)物體就會(huì)圍繞該點(diǎn)做圓周運(yùn)動(dòng)。

    把t=0代入上面兩式得初始時(shí)間與速度:

  • //使用向心力的圓周運(yùn)動(dòng),決定初始位置及初始速度的部分??
  • rx=R;??
  • ry=0.0f;? ?? ?? ?? ?? ?? ?? ?? ?? ? //(r,0)??
  • vx=0.0f;??
  • vy=R*AngleSpeed;? ?? ?? ?? ?//(0,rw)??
  • 復(fù)制代碼


    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)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。