gpt4 book ai didi

python - 计算给定(x,y)坐标的多边形面积

转载 作者:IT老高 更新时间:2023-10-28 22:05:53 25 4
gpt4 key购买 nike

我有一组点,想知道是否有一个函数(为了方便和可能的速度)可以计算一组点所包围的面积。

例如:

x = np.arange(0,1,0.001)
y = np.sqrt(1-x**2)

points = zip(x,y)

给定points,面积应该大约等于(pi-2)/4。也许有来自 scipy、matplotlib、numpy、shapely 等的东西来做到这一点?我不会遇到 x 或 y 坐标的任何负值...它们将是没有任何定义函数的多边形。

编辑:

点很可能不会按任何指定的顺序(顺时针或逆时针)并且可能非常复杂,因为它们是一组边界下 shapefile 中的一组 utm 坐标

最佳答案

Shoelace formula 的实现可以在 Numpy 中完成。假设这些顶点:

import numpy as np
x = np.arange(0,1,0.001)
y = np.sqrt(1-x**2)

我们可以重新定义numpy中的函数来查找区域:

def PolyArea(x,y):
return 0.5*np.abs(np.dot(x,np.roll(y,1))-np.dot(y,np.roll(x,1)))

得到结果:

print PolyArea(x,y)
# 0.26353377782163534

避免 for 循环使这个函数比 PolygonArea 快约 50 倍:

%timeit PolyArea(x,y)
# 10000 loops, best of 3: 42 µs per loop
%timeit PolygonArea(zip(x,y))
# 100 loops, best of 3: 2.09 ms per loop.

计时在 Jupyter notebook 中完成。

关于python - 计算给定(x,y)坐标的多边形面积,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24467972/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com