你对中心的定义一般没有意义。
要看到这只是在一个平面上绘制三个不对齐的点,并计算出一个只有三个点通过的圆。显然你的三角形的中心必须是这个圈子的中心。
现在画出第四点,它不位于圆上并形成四边形多边形。什么是中心?这个平面没有一点与所有顶点等距。要注意的是,即使三角形使用与顶点等距离的点,也可以给出远离多边形的点和远处的点,并且在数值上也不稳定(给定任意ε> 0且M> 0,您始终可以构建一个其中顶点的特定移动距离小于ε的三角形移动中心大于M的距离)。
计算简单的常用“中心”是所有顶点的平均值,边界的平均值,质心或甚至只是轴对齐边界框的中心。但是,如果多边形不是凸面的,它们都可以落在多边形之外,但在您的情况下它们可能会工作。
最简单的合理的(因为它不依赖于坐标系)为顶点的重心(在Python代码):
xc = sum(x for (x, y) in points)/len(points)
yc = sum(y for (x, y) in points)/len(points)
的一些坏事,但它只是分裂的一面该多边形为您提供了一个不同的中心(换句话说,它取决于顶点而不是由多边形界定的一组点)。依赖于多边形最简单的是IMO的边界的重心:
sx = sy = sL = 0
for i in range(len(points)): # counts from 0 to len(points)-1
x0, y0 = points[i - 1] # in Python points[-1] is last element of points
x1, y1 = points[i]
L = ((x1 - x0)**2 + (y1 - y0)**2) ** 0.5
sx += (x0 + x1)/2 * L
sy += (y0 + y1)/2 * L
sL += L
xc = sx/sL
yc = sy/sL
他们两人扩展到3D是平凡的...只是使用相同的公式新增z
。在一个普通的(不一定是凸的,不一定是简单连接的)多边形的情况下,我发现有用但是不是简单计算的“中心”是距离它的最大距离的(内)点,边界(换句话说就是“最内在的”一点)。
在这种情况下,我使用离散(位图)表示和高斯距离变换。
'mean(x)mean(y)'?我不确定所有多边形(例如(0,0),(0,1),(0,-1),(3,0))处的四边形点是否存在与所有顶点等距的点。 – Hugh
这不是一个四边形,而是一个T形 – Aeronaelius
一般来说,大多数多边形不会有与所有顶点等距的点。你知道他们是经常的吗? – PeterM