考虑不规则的3D形状的表面(即石头)是三角形的。
我有:
x,y,z
坐标(pointCloud)。根据给定的信息,如何找到整个三角形表面质心的精确坐标?
答案 0 :(得分:1)
您可以通过累加每个三角形质量加权的每个三角形的质心来计算曲面的质心,然后最后除以总质量。在算法中,这给出了:
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公式应用于体积计算)