计算3D平面多边形的质心

时间:2010-03-01 13:04:10

标签: c# math computational-geometry

这是与此one here类似的问题。

给定定义曲面的3D坐标列表(Point3D1Point3D2Point3D3等),如何计算质心表面?

在2D中计算is given by the following formula

alt text

alt text

alt text

3D模拟怎么样?

3 个答案:

答案 0 :(得分:7)

只使用你有两次的方程式,但第二次用 z 交换 y

即,计算两个投影的质心,一个投影到 x-y 平面,另一个投影到 x-z 平面。投影的质心将是实际质心的投影,因此答案将是您从中找到的 x y z 值这两个计算。

更明确地说明:如果您的点是(x1,y1,z1),(x2,y2,z2),...,要获得xy质心(Cx,Cy),请使用(x1, y1),(x2,y2),...和得到xz质心,(Cx,Cz)使用点(x1,z1),(x2,z2),...... - 只做第二次计算使用相同的2D公式,将z值视为等式中的y。然后你的3D质心将是(Cx,Cy,Cz)。只要您的表面是平坦的并且与x-y,x-z或y-z平面不平行(但如果它是平行的,它只是2D方程),这将起作用。

答案 1 :(得分:4)

让点为v 0 ,v 1 ,...,v N 逆时针,其中v i < / sub> =(x i ,y i ,z i )。

然后是三元组(v 0 ,v 1 ,v 2 ),(v 0 ,v 2 ,v 3 ),...,(v 0 ,v i ,v i +1 ),...,(v 0 ,v N-1 ,v N )形成N-1个三角形创建多边形。

每个三角形的面积为 | (v i - v 0 )×(v i + 1 - v 0 )| ÷2 ,其中×是叉积和| ·|是矢量长度。

您可能需要将区域设为负值以补偿凹陷部分。一个简单的检查是计算(v i - v 0 )×(v i + 1 - v 0 < / sub>)·(v 1 - v 0 )×(v 2 - v 0 。该区域应与结果具有相同的符号。

由于2D图形的面积比率在平行投影下是恒定的,您可能需要选择不平行于平面的单位矢量(例如z),处理(v i - v 0 )×(v i + 1 - v 0 )·z 作为区域。这样,您就不需要执行昂贵的平方根,并且会自动处理符号检查。

每个三角形的质心是(v 0 + v i + v i + 1 )÷3

因此,假设密度均匀,整个多边形的质心是

                1       N-1
centroid = ——————————    ∑  ( centroid-of-triangle-i × area-of-triangle-i )
           total-area   i=1

(对于尺寸≥4D,需要使用A i =½| v i -v 0 | | v计算面积 i + 1 -v 0 |sinθ i ,其中cosθ i =(v i -v 0 )·(v i + 1 -v 0 )。)

答案 2 :(得分:2)

如果它是平面,您可以转换为平面局部坐标系,使用您呈现的公式计算质心,然后变换回来在3D空间中获取其坐标。