下面是我看這本書中得到的一些比較有用的小技巧,在這裡總結一下:
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,...