如何计算多面体的质量和惯性矩?

时间:2009-05-01 01:09:51

标签: math physics rigid-bodies

对于在刚体模拟中使用,我想计算质量和惯性张量(惯性矩),给定一个三角形网格表示(不一定是凸起的)对象的边界,并假设内部的密度恒定。

5 个答案:

答案 0 :(得分:9)

假设你的trimesh 关闭(无论凸起与否)都有办法!

正如dmckee指出的那样,一般的方法是从每个表面三角形构建四面体,然后应用明显的数学来计算每个tet的质量和力矩贡献。当你从任何参考点看时,身体表面都有凹陷,形成内部口袋,这就是诀窍。

因此,要开始,选择一些参考点(模型坐标中的原点将正常工作),它甚至不需要在体内。对于每个三角形,将该三角形的三个点连接到参考点以形成四面体。这是诀窍:使用三角形的曲面法线来确定三角形是朝向还是远离参考点(通过查看法线的点积和指向的向量的符号可以找到三角形的质心。如果三角形背离参考点,则正常处理其质量和力矩,但如果它面向参考点(表明参考点和实体之间存在开放空间),则否定该结果

实际上,它的作用是过量计算体积块,然后一旦这些区域显示为不是实体的一部分就更正。如果一个身体有很多褶皱凸缘和怪诞的褶皱(得到那个图像?),一个特定的体积可能被一个巨大的因素过度计算,但如果你的网格是你的网格,它将被减去足够的时间来取消它关闭。通过这种方式,您甚至可以处理对象中的内部空间气泡(假设法线设置正确)。最重要的是,每个三角形都可以独立处理,因此您可以随意进行并行化。享受!

事后的想法:你可能想知道当这个点积给你一个零或接近零的值时会发生什么。这只发生在三角面是平行的(其法线是垂直的)做到参考点的方向 - 这只发生在具有小区域或零区域的退化算子上。也就是说,增加或减少tet的贡献的决定只有在tet无论如何都不会贡献任何东西时才会有问题。

答案 1 :(得分:1)

我会看一下vtkMassProperties.这是一个相当强大的计算算法,给定一个包围体积的表面。

答案 2 :(得分:1)

将对象分解为选定内部点周围的一组tetrahedrons。 (这是使用每个三角形面元素和所选中心的实体。)

您应该能够查找每个元素的音量。 moment of inertia也应该可用。

如果表面是非凸的,那就更麻烦了。


我似乎错过了通过命名法记忆而且歪斜不是我想要的形容词。我的意思是非常规。

答案 3 :(得分:1)

如果你的polydedron很复杂,可以考虑使用Monte Carlo积分,它通常用于多维积分。您将需要一个封闭的超立方体,您需要能够测试给定点是在多面体内部还是外部。而且你需要耐心等待,因为蒙特卡洛的整合很慢。

在维基百科上照常开始,然后按照外部链接页面进一步阅读。

(对于那些不熟悉蒙特卡罗积分的人,这里是如何计算质量。在包含超立方体中选择一个点。添加到point_total计数器。它是否在多面体中?如果是,请添加到{ {1}}计数器。这样做很多(参见收敛和误差约束估计。)然后

point_internal

对于惯性矩,您可以通过点到参考轴的距离的平方来计算每个计数。

棘手的部分是测试点是在多面体内部还是外部。我确信有计算几何算法。

答案 4 :(得分:1)

这在D. Eberly的“Game Physics,Second Edition”一书中有所介绍。 chapter 2.5.5和示例代码可在线获取。 (刚发现它,还没试过。)

另请注意,多面体不必是凸面的,公式才能工作,只需要simple