游戏编程数学与物理基础学习笔记

上传人:宝路 文档编号:7803337 上传时间:2017-09-23 格式:DOC 页数:19 大小:310.01KB
返回 下载 相关 举报
游戏编程数学与物理基础学习笔记_第1页
第1页 / 共19页
游戏编程数学与物理基础学习笔记_第2页
第2页 / 共19页
游戏编程数学与物理基础学习笔记_第3页
第3页 / 共19页
游戏编程数学与物理基础学习笔记_第4页
第4页 / 共19页
游戏编程数学与物理基础学习笔记_第5页
第5页 / 共19页
点击查看更多>>
资源描述

《游戏编程数学与物理基础学习笔记》由会员分享,可在线阅读,更多相关《游戏编程数学与物理基础学习笔记(19页珍藏版)》请在金锄头文库上搜索。

1、点和直线点的表示:在 2D 平面上用一个 2 元组表示(x, y)在 3D 位置上用一个 3 元组表示(x, y, z)记得要统一 x,y,z 轴的起点和方向。直线的属性:斜率斜率 slope = 12xy性质 斜率相等的两条直线平行斜率为负值,表示直线沿左上角到右下角延伸斜率为正值,表示直线沿左下角到右上角延伸斜率为 0,直线为水平线,和 x 轴平行分母为 0,表示直线为垂直型,和 y 轴平行相互垂直的直线斜率的积为-1直线的标准表示是 Ax + By = C,斜率为 m=-A/B斜截式是 y = mx + b, 斜率为 m点斜式是(y y 1) = m(x x1),斜率为 m对于同一平面上

2、的两条直线组成的线性方程组,其解的情况如下: 如果两直线的斜率不相等,则有一组解,该解为两直线交点; 如果两直线的斜率以及在 y 轴上的截距相等,则有无穷组解,即两直线重叠; 如果两直线的斜率以及在 y 轴上的截距不相等,则无解,即两直线平行。相关几何知识1 两点间的距离在人工智能程序中,智能体可以通过判断敌人与自己的距离来决定发动攻击的时机。2D 场景中的距离公式:设点 P1(x1, y1)和 P2(x2, y2)分别为线上的点,他们的距离 d 的计算方法如下:12-(x-(d3D 场景中的距离公式: 212121 )()()( zyx2 两点的中点坐标设有点 P1(x1, y1)和 P2(

3、x2, y2),两点的中点 P3 的坐标是:(3xp3 抛物线抛物线总是轴对称的。有两个因素决定了抛物线的形状,第一是顶点,是抛物线的与对称轴的交点;第二个是对称轴。抛物线有 2 种形状,一种是对称轴垂直,一种是对称轴水平。对称轴垂直的抛物线方程:y = a(x - h)2 + k 顶点是(h, k),对称轴为 x = h对称轴水平的抛物线方程:x = a(y k)2 + h 顶点是(h, k),对称轴为 y = k常数 a 代表了抛物线的开口方向和开口大小。如果 a 是正数,对于 y = a(x - h)2 + k 的抛物线来说开口向上,对于 x = a(y k)2 + h 的抛物线来说开口

4、向右。如果 a 是负数,对于 y = a(x - h)2 + k 的抛物线来说开口向下,对于 x = a(y k)2 + h 的抛物线来说开口向左。a 的绝对值越大,开口越小。4 圆和球圆是所有到定点长度等于定长的点的集合,这个定长称为半径,定点称为圆心。圆的方程:(x - h) 2 + (y - k)2 = r2 圆心是(h, k),半径是 r球是一个圆绕着圆心旋转所得到的。球体的方程:(x - h) 2 + (y - k)2 + (z - l)2 = r2 圆心是(h, k, l),半径是 r使用方程时应注意圆心坐标的正负号。5 在碰撞检测中的应用可以在游戏中利用圆或球的边界进行碰撞检测。

5、当然也可以利用其他图形。不过圆和球都可以方便地进行数学计算,它们在检测的速度上也优于其他图形。虽然精确度不高,但是可以作为外围检测。两圆之间,如果两圆心的距离小于两圆的半径和,即发生碰撞。设两圆方程分别为:(x h 1)2 + (y k1)2 = r12 和(x h2)2 + (y k2)2 = r22。如果:,则两圆发生碰撞。()(212rk由于开方运算会占用大量的处理器资源,所以建议使用平方进行比较。利用圆边界进行碰撞检测是一种较快的方法,但是极有可能会产生错误的碰撞检测结果,所以避免错误的方法是寻找一种更适合的图形来检测。只要这个图形可以用数学公式表示出来。也可以使用多重圆形进行多重检测

6、,先检测外面的圆,如果发生碰撞则检测内部的圆,减小错误判断的几率。但多重检测会消耗更多的 CPU 时间。三角函数1 角度和弧度每个角都由相交于一点的两条射线组成,我们把其中一条射线称为始边,另一条称为终边。而角的始边总是沿着 x 轴的正方向。从 x 轴正方向开始,沿逆时针方向进行旋转的角称为正角,沿顺时针方向旋转的角称为负角,注意该旋转也将决定了终边的位置。一个周角是 360。 ,也可以表示成 。这是角度和弧度之间进行转换的基础。R2角度转换成弧度公式: 角度 = 弧度180注意: R 只是个单位符号 对于 C+中所有的三角函数,比如 sin()、cos()、tan() 等它们都是以弧度值作为

7、输入的;因此在处理角度的时候,我们可以在函数开头用#define 定义一个宏,完成弧度和角度的互换。#define RadToDeg 57.29577951f#define DegToRad 0.017453293f只需把角度DegToRad 即可得到相应的弧度,或弧度 RadToDeg 即可得到相应角度。弧度转换成角度公式:弧度 = 角度R1802 三角函数所有的三角函数都是直角三角形中定义的。abcbtnosin正 切 :余 弦 :正 弦 : bacbtn1cosein1c余 切 :余 割 :正 割 :常用角度的三角函数值(角度) (弧度) sin cos tan0 0 0 1 030 /

8、60.5 = 0.8662/3 = 0.57743/45 /4 =0.70712/=0.7071 160 /3 = 0.86630.590 /2 1 0 不可算cab120 2 /3= 0.8662/3-0.5 - 3180 0 -1 0270 3 /2 -1 0 不可算360 0 0 1 0在真正进入游戏主循环之前,可以建立一个三角函数的查找表,这样在游戏中需要用到三角函数值的时候就不用重新计算,只需进行查表工作就可以,大大加快运行速度。插入代码角的正弦值在第一、第二象限是正值;角的余弦值在第一、第四象限是正值;角的正切值在第一、第三象限是正值;对于所有的反三角函数,如果传入的参数是正值,那

9、么它们的返回值都是正,即意味着该角位于第一象限;如果传入的参数为负数,那么反正弦 asin()和反正切 atan()的返回角度将位于第四象限,而反余弦 acos()的返回角度位于第二象限。3 正弦函数的图像对于正弦函数: CxB360A,)sin( 轴, 偏 移, 周 期 是振 幅 是 CBxAyA 越大,振幅越高B 越大,周期越小4 三角函数的性质 单位圆性质: 1sinco22 正切和余切性质: sincota 正弦函数的和与差: sincosi)i( 余弦函数的和与差: ic)cos( 间接关系: cos)180cos(in9ins(向量运算一、向量和标量当在游戏中使用一个量的时候,一定

10、要区分它是标量还是向量,它们两者最大的差别就是是否具有方向。二、极坐标和笛卡儿坐标1 极坐标向量 ,其中|A|是向量 A 的模, 是方向角。|A2 笛卡儿坐标(分量)向量 ,其中 i 和 j 是 x 和 y 方向上的单位向量。jbiB213 坐标转换(1) 极坐标转换成笛卡儿坐标对于向量 ,|A,其中 , 。jai21cos1 sin2Aa(2) 笛卡儿坐标转换成极坐标对于向量 ,jbiB21,其中2)()(tan12b三、向量的加法和减法1 向量相加向量 A 和向量 B 相加等于 A 的头连接 B 的尾,然后从 A 的尾构造向量 C 连接到 B 的头,方向为从 A 到 B。精确相加: ,其中

11、 , 。jbai)()(21 jai21jbi212 向量相减向量相减等于加上第二个向量的负向量。四、标量和向量相乘1 标量和极坐标向量相乘对于采用极坐标形式的向量,它只包含两个部分模和方向,当用向量与之相乘时,只需把标量和模相乘即可,方向不用改变。,其中 c 是标量。|Ac2 标量和笛卡儿坐标向量相乘对于采用笛卡儿坐标形式的向量,那么只需将标量乘以每个分量即可。,其中 c 是标量。jcaiA21五、向量的单位化单位化就是将向量的模缩放到 1 的过程。对于极坐标形式的向量,单位化只需将其模改成 1,而方向保持不变即可。对于笛卡儿坐标形式的向量,首先计算向量的模,然后将每个分量除以该数值即可。如

12、下:2D 向量的单位化,对于向量 A=a1 a2,单位化的结果是:AaA21六、点乘两个向量的点乘结果是一个标量。向量的点乘也叫做向量的数量积,这是因为向量的点乘运算返回的是一个数值。2D 向量的点乘运算:AB = a1b1+a2b2其中,向量 A=a1 a2,向量 B=b1 b2由上述公式可知,向量的点乘运算就是将对应的 x 分量相乘,然后加上对应的 y 分量的乘积。点乘可以获得两向量之间角度的信息。 如果 AB 90; 如果 AB = 0,那么 = 90; 如果 AB 0,那么 0 说明夹角小于 90。因此该物体可视。两向量之间的夹角: cosBA向量的点乘同时可以表示一个向量在另一个向量

13、方向上的投影长度。七、叉乘叉乘只适用于 3D 向量,返回的是一个向量,因此又称为向量积。 )()()( 121313232 bababaBA叉乘得到的结果向量分别垂直于两个原始向量,也正是这个原因,它仅适用于 3D 向量。3D 向量间的夹角; sinBA矩阵运算一、矩阵的定义1 矩阵的维数设矩阵有 n 行 m 列,那么矩阵的维数是 nm。2 相等矩阵对于两个具有相同维数的矩阵,我们把同行同列的两个元素称为对应元素。两矩阵相等的充要条件是:它们具有相同的维数,并且所有的对应元素都相同。nm 维和 mn 维不相同。二、矩阵的加减运算矩阵的加减运算要求两个矩阵具有相同的维数,因此只需在对应元素上进行

14、加减运算即可。三、矩阵与标量相乘矩阵与标量相乘,等于标量乘以矩阵中的每个元素。,其中 c 是任意常量值,A 是任意大小的矩阵。ncacaA10 ncacaccA1001四、矩阵相乘矩阵相乘要有意义,必须满足 A 的列数等于 B 的行数。如果矩阵相乘有意义,那么 AB 的行数等于 A 的行数,列数等于 B 的列数。记法:A 每行的每个元素乘以 B 每列的对应元素的结果的和,结果放在 A 元素对应的位置。 )()( 1010101 babaB其中, , 。10A10B矩阵相乘不满足交换律,即 ABBA五、矩阵转置对于任意大小的矩阵 A 的转置矩阵表示为 AT。对于任意大小的矩阵,元素 amn 在矩

15、阵 AT 中变为 anm变换矩阵在游戏编程中的具体应用:仿射变换。变换是指在空间中能让物体发生运动的操作的总称,包括前后、上下、左右移动,缩小放大、旋转等。仿射是指物体在变换之后应该保持先前的形状。一、平移物体的平移运动既可以由矩阵的加法来完成,也可以利用矩阵的乘法来实现。如果对物体进行的仅是平移变换,那么采用矩阵加法效率更高。如果还要对物体进行缩放和旋转变换,那么应该用矩阵乘法来实现。当对矩阵进行加法运算时仅仅是将对应元素相加,因此参加运算的两个矩阵的结构必须相同。利用矩阵加法实现 2D 平移:dyxyx利用矩阵加法实现 3D 平移:dzyxzyx利用矩阵乘法实现 2D 平移:101yxdyx注意乘法不满足交换律!利用矩阵乘法实现 3D 平移: 101zyxdzyx注意乘法不满足交换律!二、缩放我们可以使用矩阵乘法对一个物体进行缩放。如果对物体的所有顶点进行了缩放,那么变换的结果便是缩放了整个物体。2D 缩放变换10

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 中学教育 > 试题/考题

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号