计算多形刚体的惯性

时间:2012-11-28 10:14:45

标签: dynamic physics inertia

我认为有人可能会问过这个问题,但我找不到答案。

我正在为我的游戏引擎编写物理库(2d,目前在actionscript3中,但很容易翻译成基于C语言)。

我在找到一个好的公式来计算我的游戏对象的惯性时遇到了问题。

事实上,有很多经过验证的公式来计算凸多边形质心周围的惯性,但我的结构略有不同:我有自己的局部空间的游戏对象。您可以将凸形状(如圆形和凸多边形)添加到此局部空间以形成复杂对象。形状本身也有自己的局部空间。所以有三个层次:World,object&形状空间。

使用moments of inertia Wikipedia article上提供的公式计算形状中每个单独多边形的惯性没有问题。

或令人敬畏的collision detection & response article中提供的那些。

但是我想知道如何将它与我的对象结构联系起来,我只是简单地添加对象形状的所有惯性吗?这是另一位作家用来calculate the inertia of triangulated polygons的东西,他补充了三角形的所有惯性矩。或者还有更多吗?

我发现这整个惯性概念很难理解,因为我没有强大的物理背景。因此,如果有人能够给我一个答案,最好是在给定质心周围的惯性背后的逻辑,我会非常感激。我实际上是在学习I.T. - 我大学的游戏开发,但令我非常沮丧的是,他们队伍中的老师都没有在物理领域经验丰富。

2 个答案:

答案 0 :(得分:2)

劳伦斯,如果你留在二维空间,物理学就会简单得多。在2D空间中,旋转由标量描述,旋转阻力(惯性矩)由标量描述,旋转是加性和可交换的。在三维空间里,事情变得多毛(多得多,多毛发)。

连接两个对象时,组合对象有自己的质心。要计算此组合对象的惯性矩,您需要对各个对象的惯性矩求和,并为每个单独对象添加Steiner parallel axis theorem给出的偏移项。此偏移项是对象的质量乘以到复合质心的距离的平方。

您需要知道惯性矩的主要原因是,您可以模拟对作用在物体上的扭矩的响应。这在2D物理学中相当简单。旋转行为类似于牛顿第二定律。而不是F = ma,你使用T =Iα。 (在3D空间中,事情再次变得更加毛躁。)你需要找到外力和扭矩,求解线性加速度和旋转加速度,然后用数字积分。

一本关于游戏物理的好初学者书可能是有序的。您可以在this question at the gamedev sister site中找到推荐文本列表。

答案 1 :(得分:-1)

对于线性运动,您只需添加它们即可。惯性与质量成正比。添加对象的质量并计算总和的惯性等同于添加它们各自的惯性。

旋转它变得更复杂,你需要找到质心。

阅读牛顿的运动定律。如果您正在编写物理引擎,则需要了解它们。法律本身很短,但理解它们需要更多的背景,所以google周围。

你应该特别尝试理解这些概念:质量,惯性,力,加速度,动量,速度,动能。他们都是相关的。