我正在尝试计算平面多边形的中心,并想知道解决此问题的最佳方法是什么。
我可以访问形成多边形的顶点,但是没有其他权限。
有人对如何解决这个问题有任何建议吗?
谢谢。
我不会投影到2D。
将所有顶点的坐标求和,然后除以顶点数。请参阅有限点集的质心。
sx = sy = sz = 0
for i in 1..n:
sx = sx + px[i]
sy = sy + py[i]
sz = sz + pz[i]
cx = sx/n
cy = sy/n
cz = sz/n
将所有边的中心求和,再乘以这些边的长度加权,然后除以总周长。
sx = sy = sz = slen = 0
x1 = px[n]
y1 = py[n]
z1 = pz[n]
for i in 1..n:
x2 = px[i]
y2 = py[i]
z2 = pz[i]
dx = x2 - x1
dy = y2 - y1
dz = z2 - z1
len = sqrt(dx*dx + dy*dy + dz*dz)
sx = sx + (x1 + x2)/2*len
sy = sy + (y1 + y2)/2*len
sz = sz + (z1 + z2)/2*len
slen = slen + len
x1 = x2
y1 = y2
z1 = z2
cx = sx/slen
cy = sy/slen
cz = sz/slen
对多边形进行三角剖分,然后对所有三角形的质心求和,按其面积加权,然后除以总面积。您可以选择并非所有三角形都完全位于多边形内的三角剖分,只要外部区域由不同方向的三角形补偿即可。三角形的面积是其两个边缘向量的叉积的一半。
对于2D情况,请参见多边形的质心,但对于使用区域的此方法,更合适的是通过几何分解的质心。另请参见三角形的质心,因为三角形表面的质心等于其顶点的质心。
sx = sy = sz = sarea = 0
x1 = px[1]
y1 = py[1]
z1 = pz[1]
x2 = px[2]
y2 = py[2]
z2 = pz[2]
for i in 3..n:
x3 = px[i]
y3 = py[i]
z3 = pz[i]
dx1 = x3 - x1
dy1 = y3 - y1
dz1 = z3 - z1
dx2 = x3 - x2
dy2 = y3 - y2
dz2 = z3 - z2
cpx = dy1*dz2 - dz1*dy2
cpy = dz1*dx2 - dx1*dz2
cpz = dx1*dy2 - dy1*dx2
area = sqrt(cpx*cpx + cpy*cpy + cpz*cpz)/2
sx = sx + (x1 + x2 + x3)/3*area
sy = sy + (y1 + y2 + y3)/3*area
sz = sz + (z1 + z2 + z3)/3*area
sarea = sarea + area
cx = sx/sarea
cy = sy/sarea
cz = sz/sarea
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句