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

Math 如何计算多面体的质量和惯性矩?,math,physics,rigid-bodies,Math,Physics,Rigid Bodies,为了在刚体模拟中使用,我想计算质量和惯性张量(惯性矩),给定一个表示(不一定是凸的)物体边界的三角形网格,并假设内部密度恒定。我想看看这是一个相当稳健的算法,给定一个包围体积的曲面。将对象分解为一组围绕选定内部点的曲面。(即使用每个三角形面元素和选定的中心创建实体。) 您应该能够查找每个元素的体积。此外,还应提供 如果曲面是非凸的,那就麻烦多了 我似乎忘记了命名法,而歪斜不是我想要的形容词。我的意思是不规则的。假设你的修剪是闭合的(无论是否凸),有一种方法 正如dmckee指出的那样,一般的方

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

我想看看这是一个相当稳健的算法,给定一个包围体积的曲面。

将对象分解为一组围绕选定内部点的曲面。(即使用每个三角形面元素和选定的中心创建实体。)

您应该能够查找每个元素的体积。此外,还应提供

如果曲面是非凸的,那就麻烦多了


我似乎忘记了命名法,而歪斜不是我想要的形容词。我的意思是不规则的。

假设你的修剪是闭合的(无论是否凸),有一种方法

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

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

实际上,这样做是对体积块进行过多计数,然后在显示这些区域不是实体的一部分时进行纠正。如果一个物体有很多脂肪状的凸缘和奇怪的褶皱(明白了吗?)。通过这种方式,您甚至可以处理对象中的内部空间气泡(假设法线设置正确)。除此之外,每个三角形都可以独立处理,因此您可以随意进行并行处理。享受吧


事后思考:你可能想知道当点积给你一个等于或接近零的值时会发生什么。只有当三角形面平行(其法线垂直)且方向指向参考点时,才会发生这种情况——这仅适用于面积较小或为零的退化TET。也就是说,增加或减去TET的贡献的决定是值得怀疑的,当tet无论如何也不会贡献任何东西。

< P>如果你的多聚体复杂,考虑使用蒙特卡罗积分,它经常被用于多维积分。你需要一个封闭的超立方体,你需要能够测试一个给定的点是在多面体的内部还是外部。你需要耐心,因为蒙特卡罗积分很慢

像往常一样从维基百科开始,然后跟随外部链接页面进一步阅读

(对于那些不熟悉蒙特卡罗积分的人,这里介绍了如何计算质量。在包含的超立方体中选择一个点。添加到
点_total
计数器中。它在多面体中吗?如果是,添加到
点_internal
计数器中。执行此操作(参见收敛和误差界估计)。然后

质量多面体/质量超立方体\approx points\u internal/points\u total

对于惯性矩,通过点到参考轴距离的平方对每个计数进行加权


棘手的部分是测试一个点是在你的多面体内部还是外部。我确信有计算几何算法可以做到这一点。

这在D.Eberly的《游戏物理,第二版》一书中有介绍。示例代码在线提供。(刚刚找到,还没有试用过。)


还要注意的是,多面体不必是凸的,公式就可以工作,只要是。

如果对象不是凸的(有时甚至是凸的),tesselation到tets远比直接计算质量复杂得多。@Reed Copsey:我相信你的话。我提供的解决方案确实很幼稚。很好。我应该看到这一点。这是旧的“计算交叉点”方法的延伸,用于学习点是形状的内部还是外部。