游戏编程数学与物理基础

kittycxy

贡献于2012-02-20

字数:0 关键词: 游戏开发

游戏编程数学与物理基础 http://www.cnBlogs.com/ElfSundae 搜集 点和直线 点的表示:在 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,斜率为 m=-A/B 斜截式是 y = mx + b, 斜率为 m 点斜式是(y – y1) = m(x – x1),斜率为 m 对于同一平面上的两条直线组成的线性方程组,其解的情况如下: ① 如果两直线的斜率不相等,则有一组解,该解为两直线交点; ② 如果两直线的斜率以及在 y 轴上的截距相等,则有无穷组解,即两直线重叠; ③ 如果两直线的斜率以及在 y 轴上的截距不相等,则无解,即两直线平行。 相关几何知识 1 两点间的距离 在人工智能程序中,智能体可以通过判断敌人与自己的距离来决定发动攻击的时机。 2D 场景中的距离公式: 设点 P1(x1, y1)和 P2(x2, y2)分别为线上的点,他们的距离 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 yyxxp ++= 3 抛物线 抛物线总是轴对称的。 有两个因素决定了抛物线的形状,第一是顶点,是抛物线的与对称轴的交点;第二个 是对称轴。 抛物线有 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 的抛 物线来说开口向右。 如果 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 在碰撞检测中的应用 可以在游戏中利用圆或球的边界进行碰撞检测。当然也可以利用其他图形。不过圆和 球都可以方便地进行数学计算,它们在检测的速度上也优于其他图形。虽然精确度不高,但 是可以作为外围检测。 两圆之间,如果两圆心的距离小于两圆的半径和,即发生碰撞。 设两圆方程分别为:(x – h1)2 + (y – k1)2 = r1 2 和(x – h2)2 + (y – k2)2 = r2 2。如果: )()()( 21 2 12 2 12 rrkkhh +≤−+− ,则两圆发生碰撞。 由于开方运算会占用大量的处理器资源,所以建议使用平方进行比较。 利用圆边界进行碰撞检测是一种较快的方法,但是极有可能会产生错误的碰撞检测结 果,所以避免错误的方法是寻找一种更适合的图形来检测。只要这个图形可以用数学公式表 示出来。也可以使用多重圆形进行多重检测,先检测外面的圆,如果发生碰撞则检测内部的 圆,减小错误判断的几率。但多重检测会消耗更多的 CPU 时间。 三角函数 1 角度和弧度 每个角都由相交于一点的两条射线组成,我们把其中一条射线称为始边,另一条称为 终边。而角的始边总是沿着 x 轴的正方向。 从 x 轴正方向开始,沿逆时针方向进行旋转的角称为正角,沿顺时针方向旋转的角称 为负角,注意该旋转也将决定了终边的位置。 一个周角是 360。,也可以表示成 Rπ2 。这是角度和弧度之间进行转换的基础。 角度转换成弧度公式: 角度 × ⎟⎟ ⎠ ⎞ ⎜⎜ ⎝ ⎛ °180 Rπ = 弧度 注意:① R 只是个单位符号 ② 对于 C++中所有的三角函数,比如 sin()、cos()、tan()等它们都是以弧度值作 为输入的;因此在处理角度的时候,我们可以在函数开头用#define 定义一个 宏,完成弧度和角度的互换。 #define 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 1cot cos 1sec sin 1csc 余切: 余割: 正割: 常用角度的三角函数值 α (角度) α (弧度) sinα cosα tanα 0 0 0 1 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 在真正进入游戏主循环之前,可以建立一个三角函数的查找表,这样在游戏中需要用 到三角函数值的时候就不用重新计算,只需进行查表工作就可以,大大加快运行速度。 插入代码 角的正弦值在第一、第二象限是正值; 角的余弦值在第一、第四象限是正值; 角的正切值在第一、第三象限是正值; 对于所有的反三角函数,如果传入的参数是正值,那么它们的返回值都是正,即意味 着该角位于第一象限;如果传入的参数为负数,那么反正弦 asin()和反正切 atan()的返回角 度将位于第四象限,而反余弦 acos()的返回角度位于第二象限。 3 正弦函数的图像 对于正弦函数: Cx B 360A,)sin( 轴,偏移,周期是振幅是 °+= CBxAy A 越大,振幅越高 B 越大,周期越小 4 三角函数的性质 ① 单位圆性质: 1sincos 22 =+ αα ② 正切和余切性质: α αα α αα sin coscot cos sintan = = ③ 正弦函数的和与差: βαβαβα βαβαβα sincoscossin)sin( sincoscossin)sin( −=− +=+ ④ 余弦函数的和与差: βαβαβα βαβαβα sinsincoscos)cos( sinsincoscos)cos( +=− −=+ ⑤ 间接关系: αα αα αα αα cos)180cos( sin)90cos( sin)180sin( cos)90sin( −=+° =−° =−° =+° 向量运算 一、向量和标量 当在游戏中使用一个量的时候,一定要区分它是标量还是向量,它们两者最大的差别 就是是否具有方向。 二、极坐标和笛卡儿坐标 1 极坐标 向量 θ@||A||A = ,其中||A||是向量 A 的模,θ 是方向角。 2 笛卡儿坐标(分量) 向量 jbibB  21 += ,其中 i 和 j 是 x 和 y 方向上的单位向量。 3 坐标转换 (1) 极坐标转换成笛卡儿坐标 对于向量 θ@||A||A = , jaiaA  21 += ,其中 θcos1 Aa = , θsin2 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 +++=+ ,其中 jaiaA  21 += , jbibB  21 += 。 2 向量相减 向量相减等于加上第二个向量的负向量。 四、标量和向量相乘 1 标量和极坐标向量相乘 对于采用极坐标形式的向量,它只包含两个部分——模和方向,当用向量与之相乘时, 只需把标量和模相乘即可,方向不用改变。 θ@||A||cA c= ,其中 c 是标量。 2 标量和笛卡儿坐标向量相乘 对于采用笛卡儿坐标形式的向量,那么只需将标量乘以每个分量即可。 jcaicacA  21 += ,其中 c 是标量。 五、向量的单位化 单位化就是将向量的模缩放到 1 的过程。 对于极坐标形式的向量,单位化只需将其模改成 1,而方向保持不变即可。 对于笛卡儿坐标形式的向量,首先计算向量的模,然后将每个分量除以该数值即可。 如下: 2D 向量的单位化,对于向量 A=[a1 a2],单位化的结果是: ⎥⎥ ⎦ ⎤ ⎢⎢ ⎣ ⎡== A a A aAAA 211 六、点乘 两个向量的点乘结果是一个标量。向量的点乘也叫做向量的数量积,这是因为向量的 点乘运算返回的是一个数值。 2D 向量的点乘运算: A·B = a1b1+a2b2 其中,向量 A=[a1 a2],向量 B=[b1 b2] 由上述公式可知,向量的点乘运算就是将对应的 x 分量相乘,然后加上对应的 y 分量 的乘积。 点乘可以获得两向量之间角度的信息。 ① 如果 A·B < 0,那么θ> 90°; ② 如果 A·B = 0,那么θ= 90°; ③ 如果 A·B > 0,那么θ< 90°。 其中θ是 A 和 B 的夹角。 实际运用,检测物体是否可见。 假设在游戏中,摄像机的位置是(1,4),向量 C=[5 3]表示摄像机的视线。现在物体位于 (7,2)处,且摄像机只能看到一个方向上 90°范围的物体,问该物体是否可见? 解:① 构造摄像机和物体间的向量,A = [7-1 2-4] = [6 -2] ② 计算夹角:A·C = 6 * 5 + (-2) * 3 = 24 > 0 说明夹角小于 90°。 因此该物体可视。 两向量之间的夹角: θcosBABA =⋅ 向量的点乘同时可以表示一个向量在另一个向量方向上的投影长度。 七、叉乘 叉乘只适用于 3D 向量,返回的是一个向量,因此又称为向量积。 )]()()[( 122131132332 babababababaBA −−−=× 叉乘得到的结果向量分别垂直于两个原始向量,也正是这个原因,它仅适用于 3D 向量。 3D 向量间的夹角; θsinBABA =× 矩阵运算 一、矩阵的定义 1 矩阵的维数 设矩阵有 n 行 m 列,那么矩阵的维数是 n×m。 2 相等矩阵 对于两个具有相同维数的矩阵,我们把同行同列的两个元素称为对应元素。两矩阵相 等的充要条件是:它们具有相同的维数,并且所有的对应元素都相同。 n×m 维和 m×n 维不相同。 二、矩阵的加减运算 矩阵的加减运算要求两个矩阵具有相同的维数,因此只需在对应元素上进行加减运算 即可。 三、矩阵与标量相乘 矩阵与标量相乘,等于标量乘以矩阵中的每个元素。 ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎣ ⎡ ⋅ ⋅⋅ ⋅⋅ ⋅ ⋅⋅⋅ = nnca ca caca cA 10 0100 ,其中 c 是任意常量值,A 是任意大小的矩阵。 ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎣ ⎡ ⋅ ⋅⋅ ⋅⋅ ⋅ ⋅⋅⋅ = nnca ca caca cA 10 0100 四、矩阵相乘 矩阵相乘要有意义,必须满足 A 的列数等于 B 的行数。 如果矩阵相乘有意义,那么 A×B 的行数等于 A 的行数,列数等于 B 的列数。 记法:A 每行的每个元素乘以 B 每列的对应元素的结果的和,结果放在 A 元素对应的 位置。 ⎥⎦ ⎤ ⎢⎣ ⎡ ++ ++= )()( )()( 1111011010110010 1101100010010000 babababa babababaAB 其中, ⎥⎦ ⎤ ⎢⎣ ⎡= 1110 0100 aa aaA , ⎥⎦ ⎤ ⎢⎣ ⎡= 1110 0100 bb bbB 。 矩阵相乘不满足交换律,即 A×B≠B×A 五、矩阵转置 对于任意大小的矩阵 A 的转置矩阵表示为 AT。 对于任意大小的矩阵,元素 amn 在矩阵 AT 中变为 anm 变换 矩阵在游戏编程中的具体应用:仿射变换。 变换是指在空间中能让物体发生运动的操作的总称,包括前后、上下、左右移动,缩 小放大、旋转等。 仿射是指物体在变换之后应该保持先前的形状。 一、平移 物体的平移运动既可以由矩阵的加法来完成,也可以利用矩阵的乘法来实现。 如果对物体进行的仅是平移变换,那么采用矩阵加法效率更高。 如果还要对物体进行缩放和旋转变换,那么应该用矩阵乘法来实现。 当对矩阵进行加法运算时仅仅是将对应元素相加,因此参加运算的两个矩阵的结构必 须相同。 利用矩阵加法实现 2D 平移: ⎥⎦ ⎤ ⎢⎣ ⎡+⎥⎦ ⎤ ⎢⎣ ⎡=⎥⎦ ⎤ ⎢⎣ ⎡ ʹ ʹ dy dx y x y x 利用矩阵加法实现 3D 平移: ⎥ ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎢ ⎣ ⎡ + ⎥ ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎢ ⎣ ⎡ = ⎥ ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎢ ⎣ ⎡ ʹ ʹ ʹ dz dy dx z y x z y x 利用矩阵乘法实现 2D 平移: ⎥ ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎢ ⎣ ⎡ ⎥ ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎢ ⎣ ⎡ = ⎥ ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎢ ⎣ ⎡ ʹ ʹ 1100 10 01 1 y x dy dx y x 注意乘法不满足交换律!! 利用矩阵乘法实现 3D 平移: ⎥ ⎥ ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎢ ⎢ ⎣ ⎡ ⎥ ⎥ ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎢ ⎢ ⎣ ⎡ = ⎥ ⎥ ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎢ ⎢ ⎣ ⎡ ʹ ʹ ʹ 11000 100 010 001 1 z y x dz dy dx z y x 注意乘法不满足交换律!! 二、缩放 我们可以使用矩阵乘法对一个物体进行缩放。如果对物体的所有顶点进行了缩放,那 么变换的结果便是缩放了整个物体。 2D 缩放变换 ⎥ ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎢ ⎣ ⎡ ⎥ ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎢ ⎣ ⎡ = ⎥ ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎢ ⎣ ⎡ ʹ ʹ 1100 00 00 1 y x Sy Sx y x 其中,Sx 为 x 方向上的缩放因子,Sy 是 y 方向上的缩放因子。 如果要进行均匀缩放的话,即保持物体原先的形状,那么就要保证 Sx = Sy。 当为缩放因子 Sx、Sy 赋值时,如果取值位于 0 和 1 之间,那么变换的结果将缩小物体; 反之,如果大于 1,那么变换将扩大物体。 如果缩放因子为负值时,那么变换会使物体产生镜像效果。 3D 缩放变换 ⎥ ⎥ ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎢ ⎢ ⎣ ⎡ ⎥ ⎥ ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎢ ⎢ ⎣ ⎡ = ⎥ ⎥ ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎢ ⎢ ⎣ ⎡ ʹ ʹ ʹ 11000 000 000 000 1 z y x Sz Sy Sx z y x 三、旋转 利用矩阵相乘可以对一个物体进行旋转变换。 2D 旋转变换: ⎥ ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎢ ⎣ ⎡ ⎥ ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎢ ⎣ ⎡ − = ⎥ ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎢ ⎣ ⎡ ʹ ʹ 1100 0cossin 0sincos 1 y x y x θθ θθ 正的旋转角度意味着沿逆时针方向进行旋转,而负的旋转角度意味着沿顺时针方向进 行旋转。 3D 空间中的旋转问题涉及到三个平面,分别是 xy、xz、yz。 其中,xy 平面就是计算机屏幕所在的 2D 平面。 因此,在 3D 空间的旋转就有 3 种情况,绕 x 轴、绕 y 轴、绕 z 轴。 (1)绕 z 轴 3D 旋转 ⎥ ⎥ ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎢ ⎢ ⎣ ⎡ ⎥ ⎥ ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎢ ⎢ ⎣ ⎡ − = ⎥ ⎥ ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎢ ⎢ ⎣ ⎡ ʹ ʹ ʹ 11000 0100 00cossin 00sincos 1 z y x z y x θθ θθ Z 轴的正方向由屏幕指向外面,因此绕 z 轴选择其实就是在屏幕空间旋转,和 2D 旋转 一样。Z 轴旋转经常用来模拟飞机的横向滚动。 (2)绕 x 轴 3D 旋转 ⎥ ⎥ ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎢ ⎢ ⎣ ⎡ ⎥ ⎥ ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎢ ⎢ ⎣ ⎡ −= ⎥ ⎥ ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎢ ⎢ ⎣ ⎡ ʹ ʹ ʹ 11000 0cossin0 0sincos0 0001 1 z y x z y x θθ θθ 在模拟飞行领域中,绕 x 轴选择可以看作是飞机的前倾和后仰。 绕 x 轴旋转时,x 坐标值是不会改变的。 (3)绕 y 轴旋转 ⎥ ⎥ ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎢ ⎢ ⎣ ⎡ ⎥ ⎥ ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎢ ⎢ ⎣ ⎡ −= ⎥ ⎥ ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎢ ⎢ ⎣ ⎡ ʹ ʹ ʹ 11000 0cos0sin 0010 0sin0cos 1 z y x z y x θθ θθ 在模拟飞行中,y 轴旋转可以看做是左右偏航。 四、组合变换 上述 3 节说提到的变换可以整合到一起,这样可以使程序在执行时更加快速,当然, 这会增加编程时的难度。 比如要对一个三角形(中心<75,93>)以中心旋转左转 90°,那么一共需要执行如下 几步: ① 将三角形的中心移动到原点,即 x 轴左移 75 个单位,y 轴移动 93 个单位。 ② 对三角形进行旋转。 ③ 将中心点移回<75,93>处。 那么变换如下: ⎥ ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎢ ⎣ ⎡ ⎥ ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎢ ⎣ ⎡ − = ⎥ ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎢ ⎣ ⎡ ⎥ ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎢ ⎣ ⎡ ⎥ ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎢ ⎣ ⎡ °° °−° ⎥ ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎢ ⎣ ⎡ − − = ⎥ ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎢ ⎣ ⎡ ʹ ʹ 1100 1801 16810 1100 9310 7501 100 090cos90sin 090sin90cos 100 9310 7501 1 y x y x y x 对于 2D 或 3D 的变换,都可以参照上述形式进行矩阵相乘。 一维空间运动 一、速度和速率 物体只要移动就会有速率,速率是用来表示物体运动的快慢。相应的,如果一个物体 有速率,那么它就会有速度,速度是速率的向量形式。即速度是有方向的速率。 匀速运动的公式: 位移 = 速度 × 时间 (D = v * t) 路程 = 速率 × 时间 (S = v * t) 平均速度: 表示时间间隔表示位移,t, xt xx t xv if Δ−=Δ= 二、加速度 加速度用来衡量速率的变化快慢程度。 if if tt vv t va − −=Δ Δ= vf 表示末速度,vi 表示初速度。 tf 表示末速度对应的时间,vi 表示初速度对应的时间。 如果 a 的方向和 v 一致,那么表示加速运动,如果相反,表示减速运动。 三、运动方程 xavv attvx tvvx vvv avv if i fi fi tif Δ+= +=Δ +=Δ += += 25 2 14 )(2 13 22 1 22 2 :运动方程 :运动方程 :运动方程 :运动方程 :运动方程 二维和三维空间运动 一、使用向量 二维和三维空间与一维空间的运动最大区别在于它们还有其他方向。在一维空间里, 我们使用正负号来表示位移、速度和加速度这些向量。但要在二维和三维空间中,就必须结 合向量来描述运动。 在二维空间中,我们利用末位置减去初位置来表示位移。 2D 和 3D 的平均速度 为时间段。表示位移向量,其中 trt rr t rv if Δ−=Δ= 2D 和 3D 中的移动方程 2 2 1 )(2 1 attvr tvvr atvv i if if +=Δ +=Δ += 这些方程对于任意矢量 a,vf,vi 和Δr 以及标量时间都适用。 在计算时,记得要将极坐标表示的向量使用直角坐标系表示。 二、抛物运动 二维空间计算抛物线的方法是将向量分解成竖直分量和水平分量,然后计算。由于分 量之间是完全独立的,所以可以分别对其进行计算。 如果只看竖直方向,那么速度、位移、加速度就回到了一维空间的竖直运动。 位移先运动到最高点,然后下落。 速度在最高点时由正值变成 0,接着下落变成负值。 加速度一直都是-9.8m/s2。除非有外力施加,比如弹簧,空气阻力。 如果只看水平方向,那么就是匀速直线运动,排除空气阻力等其他因素。 牛顿定律 一、力 当我们准备用程序来模拟物体的运动时,首先要对我们所要移动的物体进行受力分析。 物体所受力的总和决定了它的运动模式。 1 重力 物体运动的竖直分量加速度为-g 或-9.8m/s2。我们可以利用重力加速度和物体的质量求 出物体所受重力。重力是一个向量,方向指向地心。 重力公式: w = mg 其中 m 是物体质量,g 是重力加速度。 如果在游戏编程中,在不同星球之间切换,要考虑各个星球的不同重力加速度。 重力的单位是牛顿,记为 N,1N = 1kg×m/s2。 2 支持力 支持力作用在物体表面,抵消重力并保证它不向下落。支持力是正交的,总是垂直于 物体表面。 对于斜面上的物体,支持力减小了物体竖直方向的加速度。 3 摩擦力 摩擦力分为两种形式,静摩擦力和滑动摩擦力。 静摩擦力可以使物体保持稳定的状态,而滑动摩擦力则可以使物体减速。 如果物体所受的其他力总和小于静摩擦力,那么物体保持静止。一旦其他的力大于静 摩擦力,物体开始运动,静摩擦力就变成滑动摩擦力。两种摩擦力都取决于它们的接触面。 接触面越光滑,摩擦力越小。 要计算摩擦力,就必须知道摩擦系数。 静摩擦力: NF sS µ−= 其中 N 为支持力。 滑动摩擦力: NF KK µ−= 其中 N 为支持力。 二、牛顿定律 牛顿第一定律:当物体所受合力为 0 时,它将保持原有的运动状态不变。 牛顿第二定律:Fnet = ma。F 是合力,m 是物体质量,a 是物体的加速度。 即,① 一个物体受到合力越大,速度改变得越快。 ② 如果两个物体受到的合力相同,那么质量小的物体速度改变更快。 牛顿第三定律:对于每个力,都有一个与之方向相反、大小相同的反作用力。 能量 一、功和动能 功等于力乘以力方向上的位移。 W = FΔx 其中 Δx 为位移,F 为位移方向上的力。 功的单位是 N·m,也就是焦耳 J。 动能是物体由于运动而具有的能量。物体移动得越快,动能越大。 动能的定义是质量的一半乘以速率的平方。 2 2 1 mvKE = 其中 m 为质量,v 为速率。 动能是一个标量。单位也是焦耳 J。 二、势能 势能包括重力势能和弹性势能。 重力势能是根据物体距离地面的高度来衡量的能量。 GPE = mgy 其中 m 为质量,g 为重力加速度,y 为高度。 弹性势能是物体由于发生弹性形变而具有的能量叫做弹性势能。 弹性势能的大小与物体弹性形变的大小和弹簧的劲度系数有关。 2 2 1 xkE Δ= k 是劲度系数,Δx 是形变距离。 动量和碰撞 一、跟静止物体的碰撞 和静止物体的碰撞可以用向量反射来研究物体的运动,这种运动存在着一种对称性, 球射入的角度必然等于它射出的角度,即入射角等于反射角。 1 向量的轴平行反射 如果边是竖直方向的,则 vf = [-vix, viy]; 如果边是水平方向的,则 vf = [vix, -viy]; 入射向量:vi = [vix, viy]。 2 向量的非轴平行反射 如右图:球的入射方向为 vi,求射出方向 vf 先给公式:vf = 2·P + vi 其中 vi 是初速度,P 为-vi 基于分界线法线的发射向量。 ① 写出边界 B 的矩阵[Δx Δy]; ② 求出边界的垂直向量 N = [Δy -Δx]; ③ 将 N 单位化得 N’ = [Δy / ||N|| -Δx/||N||]; ④ 求发射向量 P,P=(-vi·N’)·N’ ⑤ 计算反射向量 vf,vf = 2·P + vi 二、动量和冲量 1 动量 P = mv,其中 m 是物体的质量,v 是物体的速度。 如果物体的速度用矩阵表示,那么物体的动量也用矩阵表示。 2 冲量 冲量 = Ft = Δp,其中 F 是合力,t 是时间,Δp 是动量增量。 三、碰撞建模 动量定理的变形: m1v1i + m2v2i = m1v1f + m2v2f 下标 1 表示第一个物体,下标 2 表示第二个物体。 每个碰撞的情况都介于弹性碰撞和非弹性碰撞之间。弹性碰撞是一种没有动量损失的 碰撞。但现实中的碰撞往往伴随着能量损失,因此可以用还原系数 ε 来表示能量损失的大小。 (v1f – v2f) = -ε(v1i – v2i) 0<ε<1 vf vi B N

下载文档,方便阅读与编辑

文档的实际排版效果,会与网站的显示效果略有不同!!

需要 15 金币 [ 分享文档获得金币 ] 2 人已下载

下载文档

相关文档