讀《遊戲程式設計中的數理應用》

2021-05-11 09:08:42 字數 1334 閱讀 8656

下面是我看這本書中得到的一些比較有用的小技巧,在這裡總結一下:

1.檢測乙個整形數是否為以2為底數的乘方

bool   powoftwo(int num){

return !(num&(num-1));

2.判斷兩條直線是否垂直(m1,m2為兩條直線的斜率 斜率=(y2-y1)/(x2-x1))

if( m1 * m2  == –1 ) then 直線垂直

3.判斷直線的交點個數(即解兩直線組成的方程組的個數)

> 當兩直線斜率不同時,有一組解

>當兩直線斜率和截距都相同時,有無陣列解

>當兩直線斜率相同,而截距不同時,方程無解

4.通過vc編譯器中的#pragma intrinsic(sqrt,sin,cos,tan…) 指令,可以大大提高這些函式的執行速度

5.檢測兩個球是否發生碰撞,可以比較兩圓圓心之間的距離小於等於兩圓半徑之和,即檢測sqrt((y2-y1)^2+(x2-x1)^2) <=  r1+r2

為了提高速度可以寫成,(y2-y1)^2 + (x2-x1)^2 <= (r1+r2)^2

6.三角函式使用技巧

>定義巨集(const常量),如 const float pi = 3.141592654f

const float radtodeg = 57.29577951f (弧度乘以這個因子,可以變成角度,如果寫成  弧度*180/pi 速度慢,因為乘法比除法快)

const float degtorad = 0.0017453293f(角度轉弧度因子)

>建立三角函式對照表 方便快速查詢  因為三角函式在計算機中的執行速度比較慢

float sin_table[360]; 

for (int i =  0;i<360;++i)

sin_table[i] =  sin( i * degtorad);

以後使用的時候,可以這樣:float value = sin_table[ abs((int)angle) % 360];  這些三解函式表在程式初使時建立好,

程式執行以後可以大大提高運算速度。

7.記住,電腦進行的每一步計算都會花去一定的時間,所以我們要盡量化簡程式中的計算。在三角函式計算方便,可以多利用三角函式的

和差性質,單位圓性質等等

8.利用向量的點積:

>如果a.b = 0 那麼a與b垂直 (2d空間中判斷兩向量垂直,只需要二次乘法和一次加法)

>如果a.b < 0 那麼a與b的角度 > 90度

>如果a.b > 0 那麼a與b的角度 < 90度

應用:檢測物體是否在視野中,計算兩向量之間的夾角:a.b = ||a||.||b||.cos@,求向量在另乙個向量上的投影(如光源的投影)

vue中的狀態管理應用

vue.js官網中生態系統中給我們提供乙個官方的外掛程式vuex,利用這個外掛程式我們可以集中式管理資料,一處修改,多處應用,多個元件依賴同一狀態。主要應用於開發中大型專案。首先 npm i vuex s 引入外掛程式import vuex from vuex vuex是個物件,相關成員如下 成員用...

讀 遊戲之旅 我的程式設計感悟 難得的休閒讀物

昨天拿到了雲風的 遊戲之旅 我的程式設計感悟 一書,回家後按照習慣看了目錄,看了前言.是本很不錯的總結書籍.如果你做程式有些年頭的話,肯定會和作者有很多共鳴之處.昨天差不多看了100多頁.書中無處不是體現了作者多年的程式設計功力和成功之道.作者從1986年接觸計算機到如今,十幾年的時間,經歷了程式設...

C 事件程式設計在遊戲開發的應用

2d碰撞檢測 system.action 等於快捷建立乙個委託 使用泛型方式定義 public void callui actionobject callback,params object args where t cuibase 使用 cuimanager.instance.callui ui,...