您对中心的定义通常没有意义。
要查看这一点,只需在平面上绘制三个未对齐的点,然后计算一个唯一的圆通过所有三个点。显然,您的三角形中心必须是该圆的中心。
现在绘制一个不在圆上的第四个点并形成四边多边形。什么是中心?平面上没有与所有顶点等距的点。
还要注意,即使在三角形的情况下,使用与顶点等距的点也可以为您提供远离多边形的点,并且在数值上也是不稳定的(给定任何 ε>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
使用相同的公式添加即可。
在一般(不一定是凸的,不一定是简单连接的)多边形的情况下,我发现有用但计算起来并不简单的“中心”是距边界最大距离的(一个)内部点(在换句话说,一个“最内在”的点)。
在这种情况下,我采用了离散(位图)表示和高斯距离变换。