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

上传人:wt****50 文档编号:39971339 上传时间:2018-05-21 格式:DOC 页数:19 大小:228.50KB
返回 下载 相关 举报
《游戏编程数学与物理基础》学习笔记_第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 = 1212 xxyy xy 性质 斜率相等的两条直线平行斜率为负值,表示直线沿左上角到右下角延伸斜率为正值,表示直线沿左下角到右上角延伸斜率为 0,直线为水平线,和 x 轴平行分母为 0,表示直线为垂直型,和 y 轴平行相互垂直的直线斜率的积为-1直线的标准表示是 Ax + By = C,斜率为 m=-A/B斜截式是 y = mx + b, 斜率为 m点斜式是(y y1) = m(x x1),

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

3、122 122 12)()()(zzyyxxd2 两点的中点坐标两点的中点坐标 设有点 P1(x1, y1)和 P2(x2, y2),两点的中点 P3的坐标是:)2,2(2121 3yyxxp3 抛物线抛物线 抛物线总是轴对称的。 有两个因素决定了抛物线的形状,第一是顶点,是抛物线的与对称轴的交点;第二个 是对称轴。 抛物线有 2 种形状,一种是对称轴垂直,一种是对称轴水平。 对称轴垂直的抛物线方程: y = a(x - h)2 + k 顶点是(h, k),对称轴为 x = h对称轴水平的抛物线方程: x = a(y k)2 + h 顶点是(h, k),对称轴为 y = k常数 a 代表了抛物

4、线的开口方向和开口大小。 如果 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 圆和球圆和球 圆是所有到定点长度等于定长的点的集合,这个定长称为半径,定点称为圆心。 圆的方程:(x - h)2 + (y - k)2 = r2 圆心是(h, k),半径是 r球是一个圆绕着圆心旋转所得到的。 球体的方程:(x - h)2 + (y

5、- k)2 + (z - l)2 = r2 圆心是(h, k, l),半径是 r使用方程时应注意圆心坐标的正负号。5 在碰撞检测中的应用在碰撞检测中的应用 可以在游戏中利用圆或球的边界进行碰撞检测。当然也可以利用其他图形。不过圆和 球都可以方便地进行数学计算,它们在检测的速度上也优于其他图形。虽然精确度不高, 但是可以作为外围检测。两圆之间,如果两圆心的距离小于两圆的半径和,即发生碰撞。 设两圆方程分别为:(x h1)2 + (y k1)2 = r12和(x h2)2 + (y k2)2 = r22。如果:,则两圆发生碰撞。)()()(212 122 12rrkkhh由于开方运算会占用大量的处

6、理器资源,所以建议使用平方进行比较。利用圆边界进行碰撞检测是一种较快的方法,但是极有可能会产生错误的碰撞检测结 果,所以避免错误的方法是寻找一种更适合的图形来检测。只要这个图形可以用数学公式 表示出来。也可以使用多重圆形进行多重检测,先检测外面的圆,如果发生碰撞则检测内 部的圆,减小错误判断的几率。但多重检测会消耗更多的 CPU 时间。三角函数三角函数1 角度和弧度角度和弧度 每个角都由相交于一点的两条射线组成,我们把其中一条射线称为始边,另一条称为 终边。而角的始边总是沿着 x 轴的正方向。 从 x 轴正方向开始,沿逆时针方向进行旋转的角称为正角,沿顺时针方向旋转的角称 为负角,注意该旋转也

7、将决定了终边的位置。一个周角是 360。,也可以表示成。这是角度和弧度之间进行转换的基础。R2角度转换成弧度公式: 角度 = 弧度 180R注意: R 只是个单位符号 对于 C+中所有的三角函数,比如 sin()、cos()、tan()等它们都是以弧度值 作为输入的;因此在处理角度的时候,我们可以在函数开头用#define 定义 一个宏,完成弧度和角度的互换。#define RadToDeg 57.29577951f #define DegToRad 0.017453293f 只需把角度DegToRad 即可得到相应的弧度,或弧度RadToDeg 即可得到相应角度。弧度转换成角度公式:弧度 =

8、 角度R1802 三角函数三角函数 所有的三角函数都是直角三角形中定义的。abcacbtancossin正切:余弦:正弦:baacbctan1cotcos1secsin1csc余切:余割:正割:常用角度的三角函数值(角度) (弧度)sincostan0001030/60.5= 0.8662/3 = 0.57743/345/4=0.70712/2=0.70712/2160/3= 0.8662/30.5390/210不可算cab 1202/3= 0.8662/3-0.5-31800-102703/2-10不可算3600010在真正进入游戏主循环之前,可以建立一个三角函数的查找表,这样在游戏中需要用

9、 到三角函数值的时候就不用重新计算,只需进行查表工作就可以,大大加快运行速度。插入代码角的正弦值在第一、第二象限是正值; 角的余弦值在第一、第四象限是正值; 角的正切值在第一、第三象限是正值; 对于所有的反三角函数,如果传入的参数是正值,那么它们的返回值都是正,即意味 着该角位于第一象限;如果传入的参数为负数,那么反正弦 asin()和反正切 atan()的返回角 度将位于第四象限,而反余弦 acos()的返回角度位于第二象限。3 正弦函数的图像正弦函数的图像对于正弦函数:CxB360A,)sin(轴,偏移,周期是振幅是CBxAyA 越大,振幅越高 B 越大,周期越小4 三角函数的性质三角函数

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

11、是方向角。|A|A 2 笛卡儿坐标(分量)向量,其中 i 和 j 是 x 和 y 方向上的单位向量。jbibB)213 坐标转换 (1) 极坐标转换成笛卡儿坐标对于向量,|A|A ,其中,。jaiaA)21cos1Aa sin2Aa (2) 笛卡儿坐标转换成极坐标对于向量,jbibB)21,其中2 22 1)()(bbB)(tan121 bb三、向量的加法和减法三、向量的加法和减法 1 向量相加 向量 A 和向量 B 相加等于 A 的头连接 B 的尾,然后从 A 的尾构造向量 C 连接到 B 的 头,方向为从 A 到 B。精确相加:,其中,。jbaibaBA)()(2211jaiaA)21jb

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

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

14、间的夹角:cosBABA向量的点乘同时可以表示一个向量在另一个向量方向上的投影长度。七、叉乘七、叉乘 叉乘只适用于 3D 向量,返回的是一个向量,因此又称为向量积。)()()(122131132332babababababaBA叉乘得到的结果向量分别垂直于两个原始向量,也正是这个原因,它仅适用于 3D 向 量。3D 向量间的夹角;sinBABA矩阵运算矩阵运算一、矩阵的定义一、矩阵的定义 1 矩阵的维数 设矩阵有 n 行 m 列,那么矩阵的维数是 nm。2 相等矩阵 对于两个具有相同维数的矩阵,我们把同行同列的两个元素称为对应元素。两矩阵相 等的充要条件是:它们具有相同的维数,并且所有的对应元

15、素都相同。 nm 维和 mn 维不相同。二、矩阵的加减运算二、矩阵的加减运算 矩阵的加减运算要求两个矩阵具有相同的维数,因此只需在对应元素上进行加减运算 即可。三、矩阵与标量相乘三、矩阵与标量相乘 矩阵与标量相乘,等于标量乘以矩阵中的每个元素。,其中 c 是任意常量值,A 是任意大小的矩阵。nncacacacacA100100nncacacacacA100100四、矩阵相乘四、矩阵相乘 矩阵相乘要有意义,必须满足 A 的列数等于 B 的行数。 如果矩阵相乘有意义,那么 AB 的行数等于 A 的行数,列数等于 B 的列数。记法:A 每行的每个元素乘以 B 每列的对应元素的结果的和,结果放在 A 元素对应的 位置。 )()()()(11110110101100101101100010010000 babababababababaAB其中,。 11100100 aaaaA 11100100 bbbbB矩阵相乘不满足交换律

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

当前位置:首页 > 生活休闲 > 社会民生

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