bat*_*tty 5 math physics rigid-bodies
为了在刚体模拟中使用,我想计算质量和惯性张量(惯性矩),给定一个三角形网格表示(不一定是凸起的)对象的边界,并假设内部的密度恒定.
假设你的trimesh是关闭的(无论凸起还是没有凸起),有一种方法!
正如dmckee指出的那样,一般方法是从每个表面三角形构建四面体,然后应用明显的数学来总计每个tet的质量和力矩贡献.当你从任何参考点看时,身体表面都有凹陷,形成内部口袋,这就是诀窍.
因此,要开始,选择一些参考点(模型坐标中的原点将正常工作),它甚至不需要在体内.对于每个三角形,将该三角形的三个点连接到参考点以形成四面体.这里的诀窍是:使用三角形的曲面法线来确定三角形是朝向还是远离参考点(您可以通过查看法线的点积和指向质心的向量的符号来找到它).三角形).如果三角形背离参考点,则正常处理其质量和力矩,但如果它面向参考点(表明参考点和实体之间存在开放空间),则否定该结果.
实际上,它的作用是超过体积的块,然后一旦这些区域显示为不是实体的一部分就更正.如果一个身体有很多褶皱凸缘和怪诞的褶皱(得到那个图像?),一个特定的体积可能被一个巨大的因素过度计算,但是如果你的网格是你的网格,它将被减去足够的时间以取消它关闭.通过这种方式,您甚至可以处理对象中的内部空间气泡(假设法线设置正确).最重要的是,每个三角形都可以独立处理,因此您可以随意进行并行化.请享用!
事后的想法:你可能想知道当这个点积给你一个零或接近零的值时会发生什么.这只发生在三角面是平行的(其法线是垂直的)做到参考点的方向 - 这只发生在具有小区域或零区域的退化算子上.也就是说,增加或减少tet的贡献的决定只有在tet无论如何都不会贡献任何东西时才有问题.