《游戏开发物理学(第2版)》一1.7 牛顿第二运动定律

本节书摘来异步社区《游戏开发物理学(第2版)》一书中的第1章,第1.7节,作者: 【美】David M Bourg , Bryan Bywalec 译者: 崔力强 , 魏广程 责编: 陈冀康,更多章节内容可以访问云栖社区“异步社区”公众号查看。
1.7 牛顿第二运动定律
我们在本章第一节讲过:在力学的研究中,人们对牛顿第二运动定律特别感兴趣。让我们来回顾一下牛顿第二运动定律的方程:

《游戏开发物理学(第2版)》一1.7 牛顿第二运动定律


F是物体受到的合力,m是物体的质量,a是物体重心所受到的线性加速度。将等式变形可以得到:

《游戏开发物理学(第2版)》一1.7 牛顿第二运动定律


你可以看到物体的质量如何作为物体抵抗运动程度的度量。从中可以观察出:如果分母中的质量增长而所施加的力不变,物体所产生的加速度就会减小。因此可以说质量更大的物体抵抗运动的程度更大。相似的,当质量减小而施加的力不变时,物体所产生的加速度会增大,因此可以说质量小的物体抵抗运动的程度也更小。

牛顿第二定律同时也描述了力所产生的加速度与施加在物体上的力在同一方向。因此,力和加速度都必须作为向量来处理。总的来说,给定时刻作用于物体上的力可能不止一个。其合力应该是所有作用于物体上的力的向量和。由此可得:


《游戏开发物理学(第2版)》一1.7 牛顿第二运动定律


其中a表示加速度向量。

在三维空间中,力的向量和加速度的向量在笛卡尔坐标系中都会有x、y、z分量。在这个等式中,运动的分量方程写成如下形式:

《游戏开发物理学(第2版)》一1.7 牛顿第二运动定律


另一种牛顿第二定律的表达方式是:所有作用在物体上的力之和等于物体动量(momentum)随时间的变化率。也就是动量对时间的微分。动量等于质量乘以速度,而速度是个向量,所以动量也是个向量。因此有:

《游戏开发物理学(第2版)》一1.7 牛顿第二运动定律

其中G是物体的线性动量,m是物体质量,v是物体重心的速度。动量随时间的变化率是动量对时间的微分:

《游戏开发物理学(第2版)》一1.7 牛顿第二运动定律

假设物体质量不变(暂时),可以写出

《游戏开发物理学(第2版)》一1.7 牛顿第二运动定律


观察到速度随时间的变化率dv/dt,即加速度,我们可以得出:

《游戏开发物理学(第2版)》一1.7 牛顿第二运动定律




《游戏开发物理学(第2版)》一1.7 牛顿第二运动定律

至此,我们只考虑了物体的位移,而没有考虑转动。在通常的三维运动中,你必须考虑物体的转动。因此,我们需要增加一些方程来更完整地描述物体的运动。特别地,你需要类比的方程来表示物体上所有力矩的总和(扭矩),即角动量随时间的变化率或角动量对时间的倒数。

《游戏开发物理学(第2版)》一1.7 牛顿第二运动定律


其中 ∑Mcg是物体质心所有力矩的和,H是物体的角动量。Mcg可以表示为:

《游戏开发物理学(第2版)》一1.7 牛顿第二运动定律


其中F是作用在物体上的力,r是F的距离向量,其方向与F的作用线垂直(例如与向量F垂直),大小为从F到物体的重心,×是向量积符号。

物体的角动量是物体上所有粒子相对于转动轴的动量之和。在本例中,我们假设转动轴过物体重心,则物体角动量可表示为:

《游戏开发物理学(第2版)》一1.7 牛顿第二运动定律

其中i表示第i个组成物体的粒子,ω是物体相对于参考轴的角速度。(ri×mi(ω ×ri))是第i个粒子的角动量,其幅度为miω ri2,对于给定轴的转动,可以列出如下方程:

《游戏开发物理学(第2版)》一1.7 牛顿第二运动定律

由于对刚体来说,所有组成物体的粒子具有相同的角速度,有:

《游戏开发物理学(第2版)》一1.7 牛顿第二运动定律

又有转动惯量I等于 ∫r2 dm,因此我们得到:


对时间微分得:

dHcg/dt = d/dt(Iω)= I dω/dt = Iα

其中α是物体相对于给定轴的角加速度。最终,我们可以写出:

∑ Mcg=Iα

正如我们在转动惯量中所讨论的,我们需要进一步泛化我们的转动惯量方程和角动量方程,以期能够用来描述物体针对任意轴的转动。总的来说,M和α会是向量,而由于物体巨大的转动惯量可能依转动轴的不同而不同,I将会是张量(tensor)[2](见本节附加栏“张量”)。

张量

张量是一种具有大小和方向的数学表达式,但它的大小依方向而并不唯一。张量通常用于描述材料中有不同大小和不同方向的属性。属性随方向变化的材料被称为各向异性(anisotropic),各向同性(isotropic)意味着在所有方向上大小相同。例如:考虑两个普通材料的弹性(或强度),一张纸和一片织物。拿起这张纸并展平,分别从长边、宽边和对角线两端轻拉。你应该会感觉到纸的所有方向似乎强度相同,或者说被拉伸的程度相同。它是各项同性的,因此只需要一个常量就能表明它各个方向的强度。

现在,假设有一片拥有简单的,相对宽松的编织的布,它在两个方向上的线互相垂直,就像大多数领带那样。对这片布进行与上述纸张相同的拉伸实验,先沿织线方向,然后再沿对角线方向拉动布。你应该可以观察到布在被沿对角线方向拉动时被拉伸了,而在沿织线方向拉动时没有被拉伸。由于它根据拉力的方向不同表现出不同的弹性(或强度)的特性,所以说布是各向异性的。因此,需要用向量的集合(张量)来表示它各个方向的强度。

在这本书的背景下,所考虑的属性是物体的转动惯量,在3D空间中,需要9个分量完全描述它的任意转动。转动惯量不是在之前纸和布的例子中的强度属性,但它是随转动轴的物体的一个属性。由于表示它必须要有9个分量,转动惯量将以3×3的矩阵,即二阶(second-rank)张量的形式在本书后面出现。

关于坐标,我们在此必须要提到几个问题。当你编写实时仿真器时,这些问题就会变得很重要。两个运动方程到目前为止都是在全局坐标系中表示的,而不是由物体确定的坐标系。对于可以在全局坐标系中追踪物体位置和速度的运动的线性方程而言,这样是没问题的。
但是,从计算的观点而言,你并不会想对三维空间中转动物体的角运动方程也做同样的计算[13]。其原因是转动惯量以全局坐标计算时,随时会根据物体的位置和朝向改变。也就是说你需要在仿真中进行很多次转动惯量阵(和它的逆矩阵)的重新计算。这么做在计算上来说是非常低效率的。更好的方法是将这些运动方程在(随物体而变的)局部坐标系中重写,这样你就只需要计算一次转动惯量矩阵(和它的逆矩阵)。

在一般情况下,一个向量对时间的微分V,在一个固定的(非转动)坐标系中与它在转动坐标系中对时间的微分可以通过以下内容联系起来:

《游戏开发物理学(第2版)》一1.7 牛顿第二运动定律

(ω×V)这一项就是在固定坐标系中V对时间的倒数与在转动的坐标系中V对时间微分的差。我们可以利用这一关系来重写在局部坐标系或对于物体固定的坐标系中的角运动方程。更进一步,考虑到这个向量其实是角动量向量Hcg。回想起Hcg = Iω和它对时间的倒数等于对于物体重心力矩的和。这些就是你用于得出角运动方程的所有拼图,接下来你就可以通过将倒数变形中的V替换为Hcg来得到如下方程:

《游戏开发物理学(第2版)》一1.7 牛顿第二运动定律

其中力矩、惯性张量、角速度都在局部(物体)坐标系中表示。虽然这个方程看起来比前我们展示的略微复杂一些,但是由于I在你整个的仿真过程中会是一个常量(除非你的物体在仿真中由于什么原因改变了质量或者形状),新的方程会变得更加便于使用。在第15章中我们向你展示如何开发一个简单的3D刚体仿真器时,你会用到这个方程。

上一篇:Linux系统基础知识整理


下一篇:【转载】ASP.NET Core 依赖注入