游戏开发中的数学和物理算法 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
常用三角函数函数值表
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
等等。
相关文章推荐
- 游戏开发中的数学和物理算法 1
- 游戏开发中的数学和物理算法(4):抛物线
- 游戏开发中的数学和物理算法(15):矩阵的加减法
- 游戏开发中的数学和物理算法(12):矢量的加减法
- 游戏开发中的数学和物理算法3
- 游戏开发中的数学和物理算法(5):圆(2D)和球(3D)
- 游戏开发中的数学和物理算法(16):矩阵的乘法
- 游戏开发中的数学和物理算法(3):点之间的距离
- 游戏开发中的数学和物理算法(13):点积和叉积
- 游戏开发中的数学和物理算法(6):圆和球的碰撞检测
- 游戏开发中的数学和物理算法(14):矩阵的相等和转置
- 游戏开发中的数学和物理算法(7):角度 vs 弧度
- 游戏开发中的数学和物理算法(17):平移
- 游戏开发中的数学和物理算法(4):抛物线
- 游戏开发中的数学和物理算法(15):矩阵的加减法
- 游戏开发中的数学和物理算法(6):圆和球的碰撞检测
- 游戏开发中的数学和物理算法(3):点之间的距离
- 游戏开发中的数学和物理算法(17):平移
- 游戏开发中的数学和物理算法(5):圆(2D)和球(3D)
- 游戏开发中的数学和物理算法(18):缩放