**
多边形面积,形心(重心?)计算–Python**
0.参考1.鞋带公式
2.形心计算
3.代码参考
其实简单点就是
**注意:**这两个版本点的下表有点区别,一个从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)/22.形心(重心)计算公式
这里说重心可能不太准确
代码如下:
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(如上计算)将是负的;然而,即使在这种情况下,质心坐标也是正确的。
如果不按序,你自己试试结果。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)