读《游戏编程中的数理应用》

下面是我看这本书中得到的一些比较有用的小技巧,在这里总结一下:

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@,求向量在另一个向量上的投影(如光源的投影)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值