游戏编程数学与物理基础

上传人:suns****4568 文档编号:94767228 上传时间:2019-08-11 格式:PDF 页数:19 大小:1.32MB
返回 下载 相关 举报
游戏编程数学与物理基础_第1页
第1页 / 共19页
游戏编程数学与物理基础_第2页
第2页 / 共19页
游戏编程数学与物理基础_第3页
第3页 / 共19页
游戏编程数学与物理基础_第4页
第4页 / 共19页
游戏编程数学与物理基础_第5页
第5页 / 共19页
点击查看更多>>
资源描述

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

1、游戏编程数学与物理基础游戏编程数学与物理基础 http:/B 搜集搜集 点和直线点和直线 点的表示:在 2D 平面上用一个 2 元组表示(x, y) 在 3D 位置上用一个 3 元组表示(x, y, z) 记得要统一 x,y,z 轴的起点和方向。 直线的属性:斜率 斜率 slope = 12 12 xx yy x y = 性质 斜率相等的两条直线平行 斜率为负值,表示直线沿左上角到右下角延伸 斜率为正值,表示直线沿左下角到右上角延伸 斜率为 0,直线为水平线,和 x 轴平行 分母为 0,表示直线为垂直型,和 y 轴平行 相互垂直的直线斜率的积为-1 直线的标准表示是 Ax + By = C,斜

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

3、点,他们的距离 d 的计算方法如下: 2 12 2 12 )y - (y ) x- (x +=d 3D 场景中的距离公式: 2 12 2 12 2 12 )()()(zzyyxxd+= 2 两点的中点坐标两点的中点坐标 设有点 P1(x1, y1)和 P2(x2, y2),两点的中点 P3的坐标是: ) 2 , 2 ( 2121 3 yyxx p + = 3 抛物线抛物线 抛物线总是轴对称的。 有两个因素决定了抛物线的形状,第一是顶点,是抛物线的与对称轴的交点;第二个 是对称轴。 抛物线有 2 种形状,一种是对称轴垂直,一种是对称轴水平。 对称轴垂直的抛物线方程: y = a(x - h)2

4、+ 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 的抛 物线来说开口向右。 如果 a 是负数, 对于 y = a(x - h)2 + k 的抛物线来说开口向下, 对于 x = a(y k)2 + h 的抛 物线来说开口向左。 a 的绝对值越大,开口越小。 4 圆和球圆和球 圆是所有到定点长度等于定长的点的集合,这个定长称为半径,

5、定点称为圆心。 圆的方程:(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 在碰撞检测中的应用在碰撞检测中的应用 可以在游戏中利用圆或球的边界进行碰撞检测。当然也可以利用其他图形。不过圆和 球都可以方便地进行数学计算,它们在检测的速度上也优于其他图形。虽然精确度不高,但 是可以作为外围检测。 两圆之间,如果两圆心的距离小于两圆的半径和,即发生碰撞。 设两圆方程分别为:(

6、x h1)2 + (y k1)2 = r12和(x h2)2 + (y k2)2 = r22。如果: )()()( 21 2 12 2 12 rrkkhh+,则两圆发生碰撞。 由于开方运算会占用大量的处理器资源,所以建议使用平方进行比较。 利用圆边界进行碰撞检测是一种较快的方法,但是极有可能会产生错误的碰撞检测结 果, 所以避免错误的方法是寻找一种更适合的图形来检测。 只要这个图形可以用数学公式表 示出来。也可以使用多重圆形进行多重检测,先检测外面的圆,如果发生碰撞则检测内部的 圆,减小错误判断的几率。但多重检测会消耗更多的 CPU 时间。 三角函数三角函数 1 角度和弧度角度和弧度 每个角都

7、由相交于一点的两条射线组成,我们把其中一条射线称为始边,另一条称为 终边。而角的始边总是沿着 x 轴的正方向。 从 x 轴正方向开始,沿逆时针方向进行旋转的角称为正角,沿顺时针方向旋转的角称 为负角,注意该旋转也将决定了终边的位置。 一个周角是 360 。 ,也可以表示成 R 2。这是角度和弧度之间进行转换的基础。 角度转换成弧度公式: 角度 180 R = 弧度 注意: R 只是个单位符号 对于 C+中所有的三角函数,比如 sin()、cos()、tan()等它们都是以弧度值作 为输入的;因此在处理角度的时候,我们可以在函数开头用#define 定义一个 宏,完成弧度和角度的互换。 #def

8、ine RadToDeg 57.29577951f #define DegToRad 0.017453293f 只需把角度DegToRad 即可得到相应的弧度, 或弧度RadToDeg 即可得到相应角度。 弧度转换成角度公式:弧度 R 180 = 角度 2 三角函数三角函数 所有的三角函数都是直角三角形中定义的。 a b c a c b = = = tan cos sin 正切: 余弦: 正弦: b a a c b c = = = tan 1 cot cos 1 sec sin 1 csc 余切: 余割: 正割: 常用角度的三角函数值 (角度) (弧度) sin cos tan 0 0 0 1

9、 0 30 /6 0.5 2/3= 0.866 3/3 = 0.5774 45 /4 2/2 =0.7071 2/2 =0.7071 1 60 /3 2/3= 0.866 0.5 3 90 /2 1 0 不可算 120 2/3 2/3= 0.866 -0.5 -3 c a b 180 0 -1 0 270 3/2 -1 0 不可算 360 0 0 1 0 在真正进入游戏主循环之前,可以建立一个三角函数的查找表,这样在游戏中需要用 到三角函数值的时候就不用重新计算,只需进行查表工作就可以,大大加快运行速度。 插入代码 角的正弦值在第一、第二象限是正值; 角的余弦值在第一、第四象限是正值; 角的正

10、切值在第一、第三象限是正值; 对于所有的反三角函数,如果传入的参数是正值,那么它们的返回值都是正,即意味 着该角位于第一象限;如果传入的参数为负数,那么反正弦 asin()和反正切 atan()的返回角 度将位于第四象限,而反余弦 acos()的返回角度位于第二象限。 3 正弦函数的图像正弦函数的图像 对于正弦函数:Cx B 360 A,)sin(轴,偏移,周期是振幅是 +=CBxAy A 越大,振幅越高 B 越大,周期越小 4 三角函数的性质三角函数的性质 单位圆性质: 1sincos 22 =+ 正切和余切性质: sin cos cot cos sin tan = = 正弦函数的和与差:

11、sincoscossin)sin( sincoscossin)sin( = +=+ 余弦函数的和与差: sinsincoscos)cos( sinsincoscos)cos( += =+ 间接关系: cos)180cos( sin)90cos( sin)180sin( cos)90sin( =+ = = =+ 向量运算向量运算 一一、向量和标量向量和标量 当在游戏中使用一个量的时候,一定要区分它是标量还是向量,它们两者最大的差别 就是是否具有方向。 二、极坐标和笛卡儿坐标二、极坐标和笛卡儿坐标 1 极坐标 向量|A|A =,其中|A|是向量 A 的模,是方向角。 2 笛卡儿坐标(分量) 向量j

12、bibB 21 +=,其中 i 和 j 是 x 和 y 方向上的单位向量。 3 坐标转换 (1) 极坐标转换成笛卡儿坐标 对于向量|A|A =, jaiaA 21 +=,其中cos 1 Aa =,sin 2 Aa =。 (2) 笛卡儿坐标转换成极坐标 对于向量jbibB 21 +=, 2 2 2 1 )()(bbB+=,其中)(tan 1 21 b b = 三、向量的加法和减法三、向量的加法和减法 1 向量相加 向量 A 和向量 B 相加等于 A 的头连接 B 的尾,然后从 A 的尾构造向量 C 连接到 B 的 头,方向为从 A 到 B。 精确相加:jbaibaBA )()( 2211 +=+

13、,其中jaiaA 21 +=,jbibB 21 +=。 2 向量相减 向量相减等于加上第二个向量的负向量。 四、标量和向量相乘四、标量和向量相乘 1 标量和极坐标向量相乘 对于采用极坐标形式的向量,它只包含两个部分模和方向,当用向量与之相乘时, 只需把标量和模相乘即可,方向不用改变。 |A|cAc=,其中 c 是标量。 2 标量和笛卡儿坐标向量相乘 对于采用笛卡儿坐标形式的向量,那么只需将标量乘以每个分量即可。 jcaicacA 21 +=,其中 c 是标量。 五、向量的单位化五、向量的单位化 单位化就是将向量的模缩放到 1 的过程。 对于极坐标形式的向量,单位化只需将其模改成 1,而方向保持

14、不变即可。 对于笛卡儿坐标形式的向量,首先计算向量的模,然后将每个分量除以该数值即可。 如下: 2D 向量的单位化,对于向量 A=a1 a2,单位化的结果是: = A a A a A A A 21 1 六、点乘六、点乘 两个向量的点乘结果是一个标量。向量的点乘也叫做向量的数量积,这是因为向量的 点乘运算返回的是一个数值。 2D 向量的点乘运算: AB = a1b1+a2b2 其中,向量 A=a1 a2,向量 B=b1 b2 由上述公式可知,向量的点乘运算就是将对应的 x 分量相乘,然后加上对应的 y 分量 的乘积。 点乘可以获得两向量之间角度的信息。 如果 AB 90; 如果 AB = 0,那

15、么= 90; 如果 AB 0,那么 0 说明夹角小于 90。 因此该物体可视。 两向量之间的夹角:cosBABA= 向量的点乘同时可以表示一个向量在另一个向量方向上的投影长度。 七、叉乘七、叉乘 叉乘只适用于 3D 向量,返回的是一个向量,因此又称为向量积。 )()()( 122131132332 babababababaBA= 叉乘得到的结果向量分别垂直于两个原始向量, 也正是这个原因, 它仅适用于 3D 向量。 3D 向量间的夹角; sinBABA= 矩阵运算矩阵运算 一、矩阵的定义一、矩阵的定义 1 矩阵的维数 设矩阵有 n 行 m 列,那么矩阵的维数是 nm。 2 相等矩阵 对于两个具有相同维数的矩阵,我们把同行同列的两个元素称为对应元素。两矩阵相 等的充要条件是:它们具有相同的维数,并且所有的对应元素都相同。 nm 维和 mn 维不相同。 二、矩阵的加减运算二、矩阵的加减运算 矩阵的加减运算要求两个矩阵具有相同的维数,因此只需在对应元素上进行加减运算 即可。 三、矩

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 大杂烩/其它

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