我想计算一个由点组成的图形的质心:(0,0)、(70,0)、(70,25)、(45,45)、(45,180)、(95,188)、(95,200)、(-25,200)、(-25,188)、(25,180)、(25,45)、(0,25)、(0,0)。
我知道这个多边形质心的正确结果是x = 35和y = 100.4615,但是下面的代码没有返回正确的值(下面的多边形图)。
import numpy as np
import matplotlib.pyplot as plt
poligono = np.array([(0,0), (70,0), (70,25), (45,45), (45,180), (95,188), (95,200), (-25,200), (-25, 188), (25,180), (25,45), (0,25), (0,0)])
x = pontos[:, 0]
y = pontos[:, 1]
points_array_2 = np.array(points)
centroid = np.mean(points_array_2, axis=0)
print("Centroide:", centroid)
我想知道是否有人可以帮助我正确计算多边形的质心。
4条答案
按热度按时间imzjd6km1#
已经提供了非常好和详细的答案。如果你不想从头开始做数学,我强烈建议在处理多边形时使用shapely库。
要在给定多边形顶点坐标的情况下计算多边形的质心,可以执行以下操作:
axzmvihb2#
固定:
产生:
wfypjpf43#
下面是一些代码,解释如下。
在我的计算机上运行这段代码的结果是您所期望的:
基本思想是将形状分解为三角形,通过一个明显的公式(即顶点的平均值)计算每个三角形的质心,要计算整个多边形的质心,只需计算组成三角形的质心的平均值,每个三角形按其面积(带符号)加权。
对于多边形来说,这一任务之所以特别容易,是因为我们可以允许自己包含“负”三角形--也就是说,我们可以将多边形表示为三角形的和与差。只要我们跟踪面积中的符号,一切都可以解决。因此,不必担心多边形是否是凸的,或者原点是否在多边形内部。
在上面的代码中,我们简单地分解成由连续顶点和原点组成的三角形。
更多信息请参见维基百科页面。
zf2sa74q4#
一系列对准点的质心是它们的平均值。
对于闭合的、非自相交的多边形,必须使用一些更复杂的公式,请参见wikipedia centroid中的“多边形的”
注意,我想你还需要梁的惯性,为此,我建议分解成三角形和三角形,然后使用斯坦纳定理