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

标签 math physics rigid-bodies

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

最佳答案

假设您的三边网格是封闭的(无论是否凸出),都有一种方法!

正如dmckee所指出的那样,通常的方法是从每个曲面三角形构建四面体,然后应用显而易见的数学运算来汇总每个tet的质量和力矩贡献。当从您的引用点观察时,当 body 的表面具有凹入并形成内部口袋的凹坑时,就会产生诀窍。

因此,要开始使用,请选择一些引用点(模型坐标中的原点可以正常工作),它甚至不必位于体内。对于每个三角形,将该三角形的三个点连接到引用点以形成四面体。诀窍是:使用三角形的表面法线来判断三角形是朝向还是背离引用点(可以通过查看法线的点积和指向矢量质心的矢量来找到该点。三角形)。如果三角形背离引用点,则应正常对待其质量和力矩,但如果三角形面对引用点(建议引用点与实体之间存在开放空间),则对该定点进行求反。

有效的做法是对大量的体积进行计数,然后在这些区域显示为不属于实体的一部分时进行更正。如果物体有很多凸边和怪异的褶皱(得到那个图像?),则特定体积的体积可能会被高估,但是如果您的网格物体为正,则将其减去的时间恰好足以抵消它关闭。通过这种方式,您甚至可以处理对象中的内部气泡(假设法线设置正确)。最重要的是,每个三角形都可以独立处理,因此您可以随意并行化。享受!

事后思考:您可能想知道当该点积为您提供零或接近零的值时会发生什么。这仅在三角形面平行于其法线垂直于引用点的方向时才发生-但这仅适用于面积较小或为零的退化tet。也就是说,仅在tet不会贡献任何东西时才决定增加或减少tet的贡献。

关于math - 如何计算多面体的质量和惯性矩?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/809832/

相关文章:

haskell - 有没有双向分配之类的东西?我在这里需要什么功能?

python - 编写更快的 Python 物理模拟器

math - 轨迹-数学,c#

java - 在 2d 平台游戏中,玩家有时会被困在方 block 中

unity-game-engine - 在unity 5.0.0p2中向刚体添加物理的代码是什么?

c# - 在 C# 脚本中使用 Translate.translate 2d sprite 速度太快(unity)

java - 两条线会在笛卡尔平面相交吗

java - 安全整数中值公式

c# - UnityPhysics - 计算在指定距离处停止所需的减速度

java - Java中的随机可逆矩阵