3D 三角面的质心
Centroid of Triangulated Surface in 3D
想想不规则 3D 形状的表面(即石头)是三角形的。
我有:
- 顶点。
x,y,z
每个点的坐标(pointCloud)。
- 面孔。包含有关每个三角形顶点的信息。
- 每个三角形的面积
- 整个形状的体积
根据给定的信息,如何找到整个三角面质心的精确坐标?
您可以通过累加每个三角形质量加权的每个三角形的质心,然后最后除以总质量来计算表面的质心。在算法中,这给出:
mg : vector3d <- (0,0,0)
m : real <- 0
For each triangle t
m <- m + area(t)
mg <- mg + area(t) * centroid(t)
End for
Surfacecentroid <- mg / m
其中:
centroid(t) = 1/3 (p1+p2+p3)
area(t) = 1/2 * || cross(p2-p1, p3-p1) ||
现在如果你想要的是曲面包围的体积的质心,算法不同,你需要将体积分解成四面体并累加四面体质心如下:
mg : vector3d <- (0,0,0)
m : real <- 0
For each triangle t = (p1,p2,p3)
m <- m + signed_volume(O,p1,p2,p3)
mg <- mg + signed_volume(O,p1,p2,p3) * centroid(O,p1,p2,p3)
End for
volumeCentroid <- (1/m) * mg
其中
O=(0,0,0) and
centroid(p1,p2,p3,p4) = 1/4 (p1+p2+p3+p4)
signed_volume(p1,p2,p3,p4) = 1/6 * dot(p2-p1, cross(p3-p1, p4-p1))
即使 O 在曲面外,该公式也有效,因为曲面外的四面体部分的有符号体积完全抵消(如果您喜欢数学,另一种思考算法的方法是将 Stokes 公式应用于体积计算)。
想想不规则 3D 形状的表面(即石头)是三角形的。
我有:
- 顶点。
x,y,z
每个点的坐标(pointCloud)。 - 面孔。包含有关每个三角形顶点的信息。
- 每个三角形的面积
- 整个形状的体积
根据给定的信息,如何找到整个三角面质心的精确坐标?
您可以通过累加每个三角形质量加权的每个三角形的质心,然后最后除以总质量来计算表面的质心。在算法中,这给出:
mg : vector3d <- (0,0,0)
m : real <- 0
For each triangle t
m <- m + area(t)
mg <- mg + area(t) * centroid(t)
End for
Surfacecentroid <- mg / m
其中:
centroid(t) = 1/3 (p1+p2+p3)
area(t) = 1/2 * || cross(p2-p1, p3-p1) ||
现在如果你想要的是曲面包围的体积的质心,算法不同,你需要将体积分解成四面体并累加四面体质心如下:
mg : vector3d <- (0,0,0)
m : real <- 0
For each triangle t = (p1,p2,p3)
m <- m + signed_volume(O,p1,p2,p3)
mg <- mg + signed_volume(O,p1,p2,p3) * centroid(O,p1,p2,p3)
End for
volumeCentroid <- (1/m) * mg
其中
O=(0,0,0) and
centroid(p1,p2,p3,p4) = 1/4 (p1+p2+p3+p4)
signed_volume(p1,p2,p3,p4) = 1/6 * dot(p2-p1, cross(p3-p1, p4-p1))
即使 O 在曲面外,该公式也有效,因为曲面外的四面体部分的有符号体积完全抵消(如果您喜欢数学,另一种思考算法的方法是将 Stokes 公式应用于体积计算)。