**
多边形面积,形心(重心?)计算–Python
**
0.参考
1.计算高斯面积–鞋带公式
其实简单点就是
**注意:**这两个版本点的下表有点区别,一个从0开始一个从1开始,然后关键一个就是最后一个点+1就成了第一个点。
代码如下:
def cal_area(vertices): #Gauss's area formula 高斯面积计算
A = 0.0
point_p = vertices[-1]
for point in vertices:
A += (point[1]*point_p[0] - point[0]*point_p[1])
point_p = point
return abs(A)/2
2.形心(重心)计算公式
这里说重心可能不太准确
代码如下:
def cal_centroid(points):
A = cal_area(points)
c_x, c_y = 0.0, 0.0
point_p = points[-1] # point_p 表示前一节点
for point in points:
c_x +=((point[0] + point_p[0]) * (point[1]*point_p[0] - point_p[1]*point[0]))
c_y +=((point[1] + point_p[1]) * (point[1]*point_p[0] - point_p[1]*point[0]))
point_p = point
return c_x / (6*A), c_y / (6*A)
3.测试
points = [[-1., -1.],
[-2., -1.],
[-2., -2.],
[-1., -2.]]
points = np.array(points)
x, y = cal_centroid(points)
print('x : ', x, 'y : ',y)
输出:
x : -1.5 y : -1.5
注意:点要按序输入,最好逆时针!
如果这些点是按顺时针顺序编号的,面积A(如上计算)将是负的;然而,即使在这种情况下,质心坐标也是正确的。
如果不按序,你自己试试结果。