您的位置:首页 > 其它

游戏开发中的数学和物理算法 2

2012-09-19 23:39 281 查看


游戏开发中的数学和物理算法(5):圆(2D)和球(3D)

1.圆(2D)

圆的两个关键因素:圆心和半径。
公式:

(x–h)2 + (y–k)2 = r2 圆心为(h,k) 半径为r.

举例:圆心为(1,2),半径为2的圆。



计算机中的实现:


[b][c-sharp] view
plaincopy[/b]

struct circle

{

Point2D center;

float radius;

}




[b]2.球(3D)

球的两个关键因素:球心和半径。[/b]
[b]公式:

(x–h)2 + (y–k)2 + (z–l)2 = r2
球心为(h,k,l) 半径为r.[/b]
计算机中的实现:


[b][b][c-sharp] view
plaincopy[/b][/b]

[b]struct sphere [/b]

[b]{ [/b]

[b] Point3D center; [/b]

[b] float radius; [/b]

[b]} [/b]





游戏开发中的数学和物理算法(6):圆和球的碰撞检测

1.圆的碰撞检测
圆的碰撞条件:

当两个圆相切或者相交时,我们认为两个圆应该开始发生碰撞。




数学表示:




计算机中的实现:


[b][c-sharp] view
plaincopy[/b]

bool CollisionBetweenCircles(circle c1,circle c2)

{

bool hit;

float distanceOfCenter=sqrt(pow((c1.center.x-c2.center.x),2)+

pow((c1.center.y-c2.center.y),2));

float distanceOfRadius=c1.radius+c2.radius;

if(distanceOfCenter<=distanceOfRadius)

{

hit=true;

}

else

{

hit=false;

}

return hit;

}




2.球的碰撞
[b]球的碰撞条件:

当两个球相切或者相交时,我们认为两个球应该开始发生碰撞。[/b]
[b]数学表示:


[/b]
计算机中的实现:


[b][b][c-sharp] view
plaincopy[/b][/b]

[b]bool CollisionBetweenSphere(sphere s1,sphere s2) [/b]

[b]{ [/b]

[b] bool hit; [/b]

[b] float distanceOfCenter=sqrt(pow((s1.center.x-s2.center.x),2)+ [/b]

[b] pow((s1.center.y-s2.center.y),2)+ [/b]

[b] pow((s1.center.z-s2.center.z),2)); [/b]

[b] float distanceOfRadius=s1.radius+s2.radius; [/b]

[b] if(distanceOfCenter<=distanceOfRadius) [/b]

[b] { [/b]

[b] hit=true; [/b]

[b] } [/b]

[b] else [/b]

[b] { [/b]

[b] hit=false; [/b]

[b] } [/b]

[b] return hit; [/b]

[b]} [/b]





游戏开发中的数学和物理算法(7):角度 vs 弧度

我们通常使用的笛卡尔坐标系统,角点通常在(0,0),即原点。初始边在x轴正半轴,终边与初始边成夹角。

初始边逆时针旋转为正值,顺时针旋转为逆值。







数学表示:

角度:degree=radian*180/π

弧度:radian=degree*π/180

π≈3.141592654

例如:120◦转换为弧度为2π/3

计算机中的实现:

#define RadToDeg 57.29577951f

#define DegToRad 0.017453293f



游戏开发中的数学和物理算法(8):三角函数

三角函数在计算机游戏开发中是经常被用到的。




主要三角函数


sin a=b/c

cos a=a/c

tan a=b/a

其他三角函数

csc a=c/b=1/ sin a

sec a=c/a=1/ cos a

cot a=a/b=1/ tan a

常用三角函数函数值表

[thead]
[/thead]

a (Degrees)
a (Radians)
sin a
cos a
tan a
0
0
0
1
0
30
p/6
0.5
0.8660
0.5774
45
p/4
0.7071
0.7071
1
60
p/3
0.8660
0.5
1.7321
90
p/2
1
0

120
2p/3
0.8660
–0.5
–1.7321
180
p
0
–1
0
270
3p/2
–1
0

360
0
0
1
0
正弦函数曲线




余弦函数曲线



计算机中的实现:

大多数的计算机高级语言中都内置了三角函数。



游戏开发中的数学和物理算法(9):三角代数

三角代数里的公式推理思路都是通过单位圆来完成的。

在单位圆中有x2+y2=1。下图为一单位圆:



推论出的公式:

cos2a + sin2a = 1
sin(–a) = –sina
cos(–a) = cosa
tan(–a) = –tana

sin(a1 + a2) = sina1cosa2 + cosa1sina2
sin(a1 – a2) = sina1cosa2 – cosa1sina2

cos(a1 + a2) = cosa1cosa2 – sina1sina2
cos(a1 – a2) = cosa1cosa2 + sina1sina2
等等。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: