二维多边形和三维多面体的重心公式
本文主要讨论的是如何快速求解二维多边形和三维多面体的重心。最终的结果分别在公式(3)(6)(3)(6)(3)(6)。
首先给出任意维几何体重心的公式,
xc=1V∫VxdV(1)
\boldsymbol{x}_c =\frac{1}{V}\int_V \boldsymbol{x} dV \tag{1}
xc=V1∫VxdV(1)
其中,x\boldsymbol{x}x是几何体中点的坐标。
二维任意多边形
二维多边形重心的求解思路是将多边形分解为若干个三角形,以三角形的面积为权重,对子三角形重心求加权平均值获得多边形的重心。
三角形面积和重心公式
任意三角形Δijk\Delta ijkΔijk的重心公式为,
xcijk=xi+xj+xk3(2)
\boldsymbol{x}_c^{ijk}=\frac{\boldsymbol{x}_i+\boldsymbol{x}_j+\boldsymbol{x}_k}{3} \tag{2}
xcijk=3xi+xj+xk(2)
其中,xi,xj,xk\boldsymbol{x}_i,\boldsymbol{x}_j,\boldsymbol{x}_kxi,xj,xk是三角形三个顶点的坐标。
面积公式可以使用秦九韶公式,或者
S=12∣1xiyi1xjyj1xkyk∣
S= \frac{1}{2} \begin{vmatrix} 1 & x_i & y_i \\
1 & x_j & y_j \\
1 & x_k & y_k
\end{vmatrix}
S=21111xixjxkyiyjyk
二维任意多边形的面积和重心公式
对任意一个二维多边形假设其有NNN个顶点,也就是NNN条边,则固定一个顶点,向与其不相邻的顶点做连线,可以将多边形分解为N−2N-2N−2个三角形,
下图是一个例子,
将六边形分解为 Δ123,Δ134,Δ145,Δ156\Delta 123,\Delta 134,\Delta 145,\Delta 156Δ123,Δ134,Δ145,Δ156四个三角形。
任意NNN边形,分解为N−2N-2N−2个三角形之后,重心公式(1)为,
xc=1V∫VxdV=∑iN−2∫VixdV∑iN−2Vi=∑iN−2∣Vi∣xci∑iN−2∣Vi∣(3)
\boldsymbol{x}_c = \frac{1}{V}\int_V \boldsymbol{x} dV = \frac{\displaystyle \sum_{i}^{N-2} \int_{V_i} \boldsymbol{x} dV}{\displaystyle \sum_{i}^{N-2} V_i} =\frac{\displaystyle \sum_{i}^{N-2} |V_i| \boldsymbol{x}_c^i}{\displaystyle\sum_i^{N-2} |V_i|} \tag{3}
xc=V1∫VxdV=i∑N−2Vii∑N−2∫VixdV=i∑N−2∣Vi∣i∑N−2∣Vi∣xci(3)
其中,xci\boldsymbol{x}_c^ixci和∣Vi∣|V_i|∣Vi∣分别是三角形Δ1,i+1,i+2\Delta 1,i+1,i+2Δ1,i+1,i+2的重心和面积。
三维任意多面体
三维重心公式的推到需要散度定理(高斯-格林公式),会对多面体的边界三维多边形分解为若干个三角形,并求他们的面积和重心。
三维多面体的体积公式
这里x=(x,y,z)\boldsymbol{x}=(x,y,z)x=(x,y,z)是点的坐标。
三维多面体的体积公式为,
V=∫V1dV=13∫V∇⋅xdV=13∫∂Vx⋅ndS
V=\int_V 1 dV = \frac{1}{3}\int_V \nabla \cdot \boldsymbol{x} dV =\frac{1}{3} \int_{\partial V} \boldsymbol{x} \cdot \boldsymbol{n} dS
V=∫V1dV=31∫V∇⋅xdV=31∫∂Vx⋅ndS
其中,∇⋅x=∂x∂x+∂y∂y+∂z∂z=1+1+1=3\nabla \cdot \boldsymbol{x} =\frac{\partial x}{\partial x}+ \frac{\partial y}{\partial y} +\frac{\partial z}{\partial z}=1+1+1=3∇⋅x=∂x∂x+∂y∂y+∂z∂z=1+1+1=3,最后一个等式使用了散度定理(高斯-格林公式),n\boldsymbol{n}n是单位外法向量。∂V\partial V∂V是包围多面体VVV的若干个多边形组成的。这些多边形可以按照第一节中的方式,分解为若干个三角形(假设分解为NNN个三角形),因此多面体的体积是
V=13∑i=1Nxci⋅ni∣Si∣(4)
V=\frac{1}{3}\sum_{i=1}^N \boldsymbol{x}_c^i \cdot \boldsymbol{n}_i |S_i| \tag{4}
V=31i=1∑Nxci⋅ni∣Si∣(4)
其中,三角形重心的求解请见公式(2),SiS_iSi是第iii个三角形的面积, ni\boldsymbol{n}_ini 是第iii个三角形指向多面体外的单位法向量。
三维多面体的重心公式
引入关于xxx的标量函数AAA,并记AcA_cAc为
Ac=1V∫VAdV
A_c=\frac{1}{V}\int_V A dV
Ac=V1∫VAdV
显然有
A=133A=13(∇⋅x)A=13[∇⋅(Ax)−x⋅∇A]
A =\frac{1}{3} 3A =\frac{1}{3} (\nabla \cdot \boldsymbol{x})A =\frac{1}{3} [\nabla \cdot (A \boldsymbol{x} )-\boldsymbol{x}\cdot \nabla A]
A=313A=31(∇⋅x)A=31[∇⋅(Ax)−x⋅∇A]
因此,利用上面两个式子
AcV=∫VAdV=∫V13[∇⋅(Ax)−x⋅∇A]dV=13∫V∇⋅(Ax)dV−13∫Vx⋅∇AdV(5)
A_cV= \int_V A dV =\int_V \frac{1}{3} [\nabla \cdot (A \boldsymbol{x} )-\boldsymbol{x}\cdot \nabla A] dV = \frac{1}{3} \int_V \nabla \cdot (A \boldsymbol{x} ) dV - \frac{1}{3} \int_V \boldsymbol{x}\cdot \nabla A dV \tag{5}
AcV=∫VAdV=∫V31[∇⋅(Ax)−x⋅∇A]dV=31∫V∇⋅(Ax)dV−31∫Vx⋅∇AdV(5)
根据AAA的任意性,可以分别取AAA为x,y,zx,y,zx,y,z,这里x,y,zx,y,zx,y,z是向量x\boldsymbol{x}x的分量。
因此,x⋅∇A\boldsymbol{x}\cdot \nabla Ax⋅∇A 分别等于x,y,zx,y,zx,y,z因此 公式(5)可以分别写为
xcV=13∫V∇⋅(xx)dV−13∫VxdV=13∫V∇⋅(xx)dV−13xcV
x_c V = \frac{1}{3} \int_V \nabla \cdot (x \boldsymbol{x} ) dV - \frac{1}{3} \int_V x dV = \frac{1}{3} \int_V \nabla \cdot (x \boldsymbol{x} ) dV - \frac{1}{3} x_c V
xcV=31∫V∇⋅(xx)dV−31∫VxdV=31∫V∇⋅(xx)dV−31xcV
ycV=13∫V∇⋅(yx)dV−13∫VydV=13∫V∇⋅(yx)dV−13ycV y_c V = \frac{1}{3} \int_V \nabla \cdot (y \boldsymbol{x} ) dV - \frac{1}{3} \int_V y dV = \frac{1}{3} \int_V \nabla \cdot (y \boldsymbol{x} ) dV - \frac{1}{3} y_c V ycV=31∫V∇⋅(yx)dV−31∫VydV=31∫V∇⋅(yx)dV−31ycV
zcV=13∫V∇⋅(zx)dV−13∫VzdV=13∫V∇⋅(zx)dV−13zcV z_c V = \frac{1}{3} \int_V \nabla \cdot (z \boldsymbol{x} ) dV - \frac{1}{3} \int_V z dV = \frac{1}{3} \int_V \nabla \cdot (z \boldsymbol{x} ) dV - \frac{1}{3} z_c V zcV=31∫V∇⋅(zx)dV−31∫VzdV=31∫V∇⋅(zx)dV−31zcV
可以看到第一项和最后一项可以合并同类项,可以得到,
4xcV=∫V∇⋅(xx)dV=∫Sxx⋅ndS
4 x_cV = \int_V \nabla \cdot (x \boldsymbol{x} ) dV =\int_S x \boldsymbol{x} \cdot \boldsymbol{n} dS
4xcV=∫V∇⋅(xx)dV=∫Sxx⋅ndS
4ycV=∫V∇⋅(yx)dV=∫Syx⋅ndS 4 y_cV = \int_V \nabla \cdot (y \boldsymbol{x} ) dV = \int_S y \boldsymbol{x} \cdot \boldsymbol{n} dS 4ycV=∫V∇⋅(yx)dV=∫Syx⋅ndS
4zcV=∫V∇⋅(zx)dV=∫Szx⋅ndS 4 z_cV = \int_V \nabla \cdot (z \boldsymbol{x} ) dV = \int_S z \boldsymbol{x} \cdot \boldsymbol{n} dS 4zcV=∫V∇⋅(zx)dV=∫Szx⋅ndS
上面式子中第二个等式是再应用一次散度定理(高斯-格林公式)。注意x,y,zx,y,zx,y,z是向量x\boldsymbol{x}x的分量,三个分量写成一个向量式为,
4xcV=∫Sx(x⋅n)dS=∑i=1N∫Six(x⋅n)dS=∑i=1N(xci⋅ni)∫SixdS=∑i=1N(xci⋅ni)∣Si∣xci
4 \boldsymbol{x}_c V =\int_S \boldsymbol{x}(\boldsymbol{x} \cdot \boldsymbol{n}) dS=\sum_{i=1}^N \int_{S_i} \boldsymbol{x}(\boldsymbol{x} \cdot \boldsymbol{n}) dS = \sum_{i=1}^N (\boldsymbol{x}_c^i \cdot \boldsymbol{n}_i) \int_{S_i} \boldsymbol{x} dS = \sum_{i=1}^N (\boldsymbol{x}_c^i \cdot \boldsymbol{n}_i) |S_i| \boldsymbol{x}_c^i
4xcV=∫Sx(x⋅n)dS=i=1∑N∫Six(x⋅n)dS=i=1∑N(xci⋅ni)∫SixdS=i=1∑N(xci⋅ni)∣Si∣xci
这里(x⋅n)(\boldsymbol{x} \cdot \boldsymbol{n})(x⋅n)能够从积分式子中拿出来的原因是它在SiS_iSi上是一个常数,因此结合公式(4)(4)(4)我们就可以得到三维多面体重心坐标公式,
xc=∑i=1N(xci⋅ni)∣Si∣xci4V=3∑i=1N(xci⋅ni)∣Si∣xci4∑i=1Nxci⋅ni∣Si∣(6)
\boldsymbol{x}_c =\frac{\displaystyle \sum_{i=1}^N (\boldsymbol{x}_c^i \cdot \boldsymbol{n}_i) |S_i| \boldsymbol{x}_c^i }{4V} = \frac{\displaystyle 3\sum_{i=1}^N (\boldsymbol{x}_c^i \cdot \boldsymbol{n}_i) |S_i| \boldsymbol{x}_c^i }{\displaystyle 4 \sum_{i=1}^N \boldsymbol{x}_c^i \cdot \boldsymbol{n}_i |S_i| } \tag{6}
xc=4Vi=1∑N(xci⋅ni)∣Si∣xci=4i=1∑Nxci⋅ni∣Si∣3i=1∑N(xci⋅ni)∣Si∣xci(6)
其中,xci\boldsymbol{x}_c^ixci是将多面体VVV的边界∂V\partial V∂V分解为第iii个三角形的重心,∣Si∣|S_i|∣Si∣是其面积,nin_ini是单位外法向量。
参考文献
Z.-J. Wang, Improved formulation for geometric properties of arbitrary polyhedra, AIAA J. 37 (10) (1999) 1326–1327.
本文介绍了如何计算二维多边形和三维多面体的重心,通过分解多边形为三角形,利用面积和重心公式进行加权平均,以及应用散度定理和高斯-格林公式,推导出三维多面体的重心公式。方法涉及了秦九韶公式和几何体的边界处理。

211

被折叠的 条评论
为什么被折叠?



