多边形面积,形心(重心?)计算--Python

多边形面积,形心(重心?)计算--Python,第1张

多边形面积,形心(重心?)计算--Python

**

多边形面积,形心(重心?)计算–Python

**

0.参考

1.鞋带公式
2.形心计算
3.代码参考

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(如上计算)将是负的;然而,即使在这种情况下,质心坐标也是正确的。
如果不按序,你自己试试结果。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5491064.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-13
下一篇 2022-12-12

发表评论

登录后才能评论

评论列表(0条)

保存