How to find the inertia tensor (or othermass properties) of a 3d solid body represented by a triangle mesh()

  • 算法流程正则四面体的协方差变换协方差矩阵正则四面体映射到目标四面体其他质量属性(四面体)累加结果
  • 正则四面体的协方差
  • 变换协方差矩阵
  • 正则四面体映射到目标四面体
  • 其他质量属性(四面体)
  • 累加结果
  • 参考资料

算法流程

  • 任意选择一个参考点
  • 对于在mesh上的每个三角形:

    形成由参考点与该三角形所围成的四面体
    计算四面体的协方差(通过仿射变换映射到一个已知的正则四面体
    将这个协方差加到累加器中

  • 形成由参考点与该三角形所围成的四面体
  • 计算四面体的协方差(通过仿射变换映射到一个已知的正则四面体
  • 将这个协方差加到累加器中
  • 将累加器从协方差矩阵转换为惯性张量

固定的惯性张量可以表示为:

其中\(1_3\)是\(3 \times 3\)的单位矩阵,以及\(C\)是物体的质量权重的协方差矩阵。

C是一个封闭、简单的几何体。

正则四面体的协方差

正则四面体有四个顶点\(v_0=(0,0,0),v_1=(1,0,0),v_2=(0,1,0),v_3=(0,0,1)\),我们首先得到协方差矩阵的连续形式:

其中\(\rho\)是物体的密度(常量).其中\(C\)是一个\(3 \times 3\)的对称矩阵,只包含两个分量。

因此我们只需要求解两个分量\(C_{xx},C_{xy}\)即可,考虑正则四面体的密度为1,我们有:

因此,

变换协方差矩阵

为了映射\({C}_{\text {canonical }}\)到四面体,我们需要用两个方式操作协方差矩阵。

  • 我们通过对每个输入点应该线性变换A,从而得到变换后的矩阵:
    \[\begin{aligned}
    \mathbf{C}^{\prime} &=\rho \int_{V}(\mathbf{A} \mathbf{x})(\mathbf{A} \mathbf{x})^{\mathrm{T}} d V_{(\mathbf{A})} \\
    &=\rho \int_{V} \mathbf{A x} \mathbf{x}^{\mathrm{T}} \mathbf{A}^{\mathrm{T}} d V \operatorname{det} \mathbf{A} \\
    &=(\operatorname{det} \mathbf{A}) \mathbf{A} \mathbf{C A}^{\mathrm{T}}
    \end{aligned}
    \]\(det A\)因子描述:变换A扭曲了积分的体积元(\(d V_{(A)}=dV\ det A\))
  • 我们通过对每个输入点应用偏移\(\Delta x\),从而得到偏移后的矩阵:
    \[\begin{aligned}
    \mathbf{C}^{\prime} &=\operatorname{Translate}(\mathbf{C}, \boldsymbol{\Delta} \mathbf{x}) \\
    &=\rho \int_{V}(\mathbf{x}+\boldsymbol{\Delta} \mathbf{x})(\mathbf{x}+\boldsymbol{\Delta} \mathbf{x})^{\mathrm{T}} d V \\
    &=\rho \int_{V}\left(\mathbf{x x}^{\mathrm{T}}+\boldsymbol{\Delta} \mathbf{x} \mathbf{x}^{\mathrm{T}}+\mathbf{x} \boldsymbol{\Delta} \mathbf{x}^{\mathrm{T}}+\Delta \mathbf{x} \boldsymbol{\Delta} \mathbf{x}^{\mathrm{T}}\right) d V \\
    &=\rho \int_{V} \mathbf{x x}^{\mathrm{T}} d V+\rho \boldsymbol{\Delta} \mathbf{x} \int_{V} \mathbf{x}^{\mathrm{T}} d V+\rho \int_{V} \mathbf{x} d V \Delta \mathbf{x}^{\mathrm{T}}+\rho \Delta \mathbf{x} \Delta \mathbf{x}^{\mathrm{T}} \int_{V} d V \\
    &=\mathbf{C}+m\left(\boldsymbol{\Delta} \overline{\mathbf{x}}^{\mathrm{T}}+\overline{\mathbf{x}} \boldsymbol{\Delta} \mathbf{x}^{\mathrm{T}}+\Delta \mathbf{x} \Delta \mathbf{\Delta} \mathbf{x}^{\mathrm{T}}\right)
    \end{aligned}
    \]其中\(\overline{\mathbf{x}}\)是输入点的质心用于构造C,以及\(m=\rho V\)是这些点的总质量。

正则四面体映射到目标四面体

我们首先开始于一个正则四面体,通过线性变换使其与目标形状相同,然后平移它使其在相同的位置。

正则四面体的顶点表示为:\(\{v_0,v_1,v_2,v_3\}\),目标四面体的顶点表示为\(\{w_0,w_1,w_2,w_3\}\)

为了使四面体的形状相同,我们定义以下线性变换:

因为我们使用了正四面体有:

因此我们可以得到:

因此有\(C’=(det A)AC_{canonical}A^T\),现在我们发现\(C”=Translate(C’,w_0-v_0)\),又因为\(v_0=0\),因此我们可以得到\(C”=Translate(C’,w_o)\),\(w_o\)是我们选择的参考点。

其他质量属性(四面体)

质量:\(m=\rho V\)

体积:\(V=\frac{1}{6}detA\),因为\(V=\frac{|c\cdot(a\times b)|}{6}\)

质心:四个顶点的平均值

累加结果

我们定义如下一组质量属性:\(B_n=\{C_n,x_n,m_n\}\)

我们想要找到\(B_3=B_1+B_2\):

  • 协方差:设想\(C_1,C_2\)在同一原点上计算,有\(C_3=C_1+C_2\)
  • 质心:\(\overline{\mathbf{x}}_3=(\overline{\mathbf{x}}_1m_1+\overline{\mathbf{x}}_2m_2)/(m_1+m_2)\)
  • 总质量:\(m3=m_1+m_2\)

因为\(C_{total}\)是围绕我们的选择的参考点计算的,我们希望将它移动到质心上(物理模拟器最希望它移动的地方):

最后我们便可以根据一开始的公式从\(C_{total}’\)计算出\(I_{total}’\)。

参考资料

[BB04] BLOW J., BINSTOCK A.: How to find the inertia tensor (or othermass properties) of a 3d solid body represented by a triangle mesh

————————
  • 算法流程正则四面体的协方差变换协方差矩阵正则四面体映射到目标四面体其他质量属性(四面体)累加结果
  • 正则四面体的协方差
  • 变换协方差矩阵
  • 正则四面体映射到目标四面体
  • 其他质量属性(四面体)
  • 累加结果
  • 参考资料

算法流程

  • 任意选择一个参考点
  • 对于在mesh上的每个三角形:

    形成由参考点与该三角形所围成的四面体
    计算四面体的协方差(通过仿射变换映射到一个已知的正则四面体
    将这个协方差加到累加器中

  • 形成由参考点与该三角形所围成的四面体
  • 计算四面体的协方差(通过仿射变换映射到一个已知的正则四面体
  • 将这个协方差加到累加器中
  • 将累加器从协方差矩阵转换为惯性张量

固定的惯性张量可以表示为:

其中\(1_3\)是\(3 \times 3\)的单位矩阵,以及\(C\)是物体的质量权重的协方差矩阵。

C是一个封闭、简单的几何体。

正则四面体的协方差

正则四面体有四个顶点\(v_0=(0,0,0),v_1=(1,0,0),v_2=(0,1,0),v_3=(0,0,1)\),我们首先得到协方差矩阵的连续形式:

其中\(\rho\)是物体的密度(常量).其中\(C\)是一个\(3 \times 3\)的对称矩阵,只包含两个分量。

因此我们只需要求解两个分量\(C_{xx},C_{xy}\)即可,考虑正则四面体的密度为1,我们有:

因此,

变换协方差矩阵

为了映射\({C}_{\text {canonical }}\)到四面体,我们需要用两个方式操作协方差矩阵。

  • 我们通过对每个输入点应该线性变换A,从而得到变换后的矩阵:
    \[\begin{aligned}
    \mathbf{C}^{\prime} &=\rho \int_{V}(\mathbf{A} \mathbf{x})(\mathbf{A} \mathbf{x})^{\mathrm{T}} d V_{(\mathbf{A})} \\
    &=\rho \int_{V} \mathbf{A x} \mathbf{x}^{\mathrm{T}} \mathbf{A}^{\mathrm{T}} d V \operatorname{det} \mathbf{A} \\
    &=(\operatorname{det} \mathbf{A}) \mathbf{A} \mathbf{C A}^{\mathrm{T}}
    \end{aligned}
    \]\(det A\)因子描述:变换A扭曲了积分的体积元(\(d V_{(A)}=dV\ det A\))
  • 我们通过对每个输入点应用偏移\(\Delta x\),从而得到偏移后的矩阵:
    \[\begin{aligned}
    \mathbf{C}^{\prime} &=\operatorname{Translate}(\mathbf{C}, \boldsymbol{\Delta} \mathbf{x}) \\
    &=\rho \int_{V}(\mathbf{x}+\boldsymbol{\Delta} \mathbf{x})(\mathbf{x}+\boldsymbol{\Delta} \mathbf{x})^{\mathrm{T}} d V \\
    &=\rho \int_{V}\left(\mathbf{x x}^{\mathrm{T}}+\boldsymbol{\Delta} \mathbf{x} \mathbf{x}^{\mathrm{T}}+\mathbf{x} \boldsymbol{\Delta} \mathbf{x}^{\mathrm{T}}+\Delta \mathbf{x} \boldsymbol{\Delta} \mathbf{x}^{\mathrm{T}}\right) d V \\
    &=\rho \int_{V} \mathbf{x x}^{\mathrm{T}} d V+\rho \boldsymbol{\Delta} \mathbf{x} \int_{V} \mathbf{x}^{\mathrm{T}} d V+\rho \int_{V} \mathbf{x} d V \Delta \mathbf{x}^{\mathrm{T}}+\rho \Delta \mathbf{x} \Delta \mathbf{x}^{\mathrm{T}} \int_{V} d V \\
    &=\mathbf{C}+m\left(\boldsymbol{\Delta} \overline{\mathbf{x}}^{\mathrm{T}}+\overline{\mathbf{x}} \boldsymbol{\Delta} \mathbf{x}^{\mathrm{T}}+\Delta \mathbf{x} \Delta \mathbf{\Delta} \mathbf{x}^{\mathrm{T}}\right)
    \end{aligned}
    \]其中\(\overline{\mathbf{x}}\)是输入点的质心用于构造C,以及\(m=\rho V\)是这些点的总质量。

正则四面体映射到目标四面体

我们首先开始于一个正则四面体,通过线性变换使其与目标形状相同,然后平移它使其在相同的位置。

正则四面体的顶点表示为:\(\{v_0,v_1,v_2,v_3\}\),目标四面体的顶点表示为\(\{w_0,w_1,w_2,w_3\}\)

为了使四面体的形状相同,我们定义以下线性变换:

因为我们使用了正四面体有:

因此我们可以得到:

因此有\(C’=(det A)AC_{canonical}A^T\),现在我们发现\(C”=Translate(C’,w_0-v_0)\),又因为\(v_0=0\),因此我们可以得到\(C”=Translate(C’,w_o)\),\(w_o\)是我们选择的参考点。

其他质量属性(四面体)

质量:\(m=\rho V\)

体积:\(V=\frac{1}{6}detA\),因为\(V=\frac{|c\cdot(a\times b)|}{6}\)

质心:四个顶点的平均值

累加结果

我们定义如下一组质量属性:\(B_n=\{C_n,x_n,m_n\}\)

我们想要找到\(B_3=B_1+B_2\):

  • 协方差:设想\(C_1,C_2\)在同一原点上计算,有\(C_3=C_1+C_2\)
  • 质心:\(\overline{\mathbf{x}}_3=(\overline{\mathbf{x}}_1m_1+\overline{\mathbf{x}}_2m_2)/(m_1+m_2)\)
  • 总质量:\(m3=m_1+m_2\)

因为\(C_{total}\)是围绕我们的选择的参考点计算的,我们希望将它移动到质心上(物理模拟器最希望它移动的地方):

最后我们便可以根据一开始的公式从\(C_{total}’\)计算出\(I_{total}’\)。

参考资料

[BB04] BLOW J., BINSTOCK A.: How to find the inertia tensor (or othermass properties) of a 3d solid body represented by a triangle mesh