我有一组点,并想知道是否有一个函数(为了方便和可能的速度)可以计算由一组点包围的区域.
例如:
x = np.arange(0,1,0.001)
y = np.sqrt(1-x**2)
points = zip(x,y)
Run Code Online (Sandbox Code Playgroud)
鉴于points该区域应大致相等(pi-2)/4.也许有scipy,matplotlib,numpy,shapely等的东西来做这个?我不会遇到x或y坐标的任何负值...它们将是没有任何定义函数的多边形.
编辑:
点很可能不是以任何指定的顺序(顺时针或逆时针),并且可能非常复杂,因为它们是来自一组边界下的shapefile的一组utm坐标
标题基本上都说明了一切.我需要使用Python计算地球表面多边形内的区域.计算由地球表面任意多边形包围的区域说明了一些内容,但对技术细节仍然模糊:
如果你想用更"GIS"的味道来做这件事,那么你需要为你的区域选择一个度量单位,找到一个保留区域的适当投影(不是所有的).既然你在谈论计算任意多边形,我会使用类似Lambert Azimuthal等面积投影的东西.将投影的原点/中心设置为多边形的中心,将多边形投影到新坐标系,然后使用标准平面技术计算面积.
那么,我如何在Python中执行此操作?
假设你有一份方向清单:
up, up, right, down, right, down, left, left
Run Code Online (Sandbox Code Playgroud)
如果您按照说明操作,您将始终返回起始位置.计算刚刚创建的形状的面积.
由上述方向形成的形状如下所示:
___
| |___
|_______|
Run Code Online (Sandbox Code Playgroud)
显然,从图片中可以看出该区域为3.
我试图使用2d矩阵来追踪方向,但不确定如何从中获取该区域......
例如,在我的2d数组中:
O O
O O O
O O O
Run Code Online (Sandbox Code Playgroud)
这可能不是处理这个问题的好方法,任何想法?
我设法写了一个'for dummies'如何计算C#中不规则多边形的面积,但我需要它对任何数量的顶点都是动态的.
有人可以帮忙吗?
类:
public class Vertex
{
private int _vertexIdx;
private double _coordX;
private double _coordY;
private double _coordZ;
public Vertex()
{ }
public Vertex(int vertexIdx, double coordX, double coordY, double coordZ)
{
_vertexIdx = vertexIdx;
_coordX = coordX;
_coordY = coordY;
_coordZ = coordZ;
}
public int VertexIdx
{
get { return _vertexIdx; }
set { _vertexIdx = value; }
}
public double X
{
get { return _coordX; }
set { _coordX = value; } …Run Code Online (Sandbox Code Playgroud) 所以我有一些功能可以接收N个随机2D点.
有没有算法来计算输入点定义的形状区域?
对于downvoters:请说明原因.谢谢!
我有一套积分A.我得到的凸包CH_A的A.
然后,我有额外的积分,点集B.我想补充B到A,并获得更大的点集.我获得了CH_AB包含两个A和的这个更大的集合的凸包B.
我想量化我需要支付多少才能加入B套装A.我正在考虑使用额外的区域来量化这个成本.
说CH_A有一个区域Area_A,然后CH_AB有一个区域Area_AB.然后,我想计算边际成本
(Area_AB - Area_A) / Area_A
Run Code Online (Sandbox Code Playgroud)
我如何在python中获得凸包的面积?
我希望能够使用numpys trapz函数计算跟随积分
numpy.trapz([-1, 1]) # returns 0
Run Code Online (Sandbox Code Playgroud)
但我不想允许负面区域.有没有一种有效的方法来做到这一点,还是我必须寻找最小点并手动转换数组?
是否numpy.trapz(numpy.abs([-1, 1]))有意义?
因此,我正在编写一段代码来获取RC平面裁剪器的位置数据,并计算横向的总表面积(不对任何区域进行重复计算).我无法弄清楚如何计算给定操作期间的面积.
给定下表计算点覆盖的面积.
x,y
1,2
1,5
4,3
6,6
3,4
3,1
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?我浏览了格林斯定理,但我没有一个实用的概念来编码.
谢谢你的任何建议
假设我有一张地理地图,其中各点由纬度\经度表示.我在这张地图上有很多点,可以随时添加\删除\移动点.
我需要的是获得"最热点" - 包括最大点数除以面积的区域 - 或者换言之,具有最高点密度的区域.
我需要一个有效的数据结构,以及一个重新计算任何变化的最热点的算法.计算复杂度和内存复杂度必须最小,因为点数可能会非常高.
我希望知道并保持一份最热门地点的降序排列 - 首先是最拥挤的地区,然后是不那么拥挤的地区.有一个有限大小的列表是可以的 - 例如,100个最热点.
当然,为了防止一个孤立点上的100%密度,存在最小区域(定义为常数).
这里"区域"的定义是地图上包含点的任何可感知区域.它可能是整个地图,但算法不应该将其视为当然的热点=)
谢谢!如果需要任何澄清,请说出来......
我做了一个用鞋带方式计算面积多边形的函数。
这非常有效,但现在我想知道是否没有更快的方法来获得相同的结果。我想知道这一点,因为这个函数对于具有大量坐标的多边形必须运行得更快。
我的职能:
def shoelace_formula(polygonBoundary, absoluteValue = True):
nbCoordinates = len(polygonBoundary)
nbSegment = nbCoordinates - 1
l = [(polygonBoundary[i+1][0] - polygonBoundary[i][0]) * (polygonBoundary[i+1][1] + polygonBoundary[i][1]) for i in xrange(nbSegment)]
if absoluteValue:
return abs(sum(l) / 2.)
else:
return sum(l) / 2.
Run Code Online (Sandbox Code Playgroud)
我的多边形:
polygonBoundary = ((5, 0), (6, 4), (4, 5), (1, 5), (1, 0))
Run Code Online (Sandbox Code Playgroud)
结果 :
22.
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
我尝试使用 Numpy :它速度最快,但您必须先转换坐标。
import numpy as np
x, y = zip(*polygonBoundary)
def shoelace_formula_3(x, y, absoluteValue = True):
result = 0.5 * np.array(np.dot(x, np.roll(y, …Run Code Online (Sandbox Code Playgroud) 我目前正在使用的算法存在一些问题。我希望它成为一个界限。
这是当前行为的示例:
这是通缉行为的MSPaint示例:
C#中凸包的当前代码:https : //hastebin.com/dudejesuja.cs
所以这是我的问题:
1)这有可能吗?
R:是的
2)这甚至被称为凸包吗?(我不这么认为)
R:不,这叫做边界,链接:https : //www.mathworks.com/help/matlab/ref/boundary.html
3)与传统的凸包相比,这是否会降低性能?
R:据我研究,它应该具有相同的性能
4)使用伪代码或类似方法的此算法示例?
R:尚未回答,或者我尚未找到解决方案
我们的应用程序允许用户追踪由直线和圆弧组成的闭合曲线。这些闭合曲线中可以有孔,孔也由直线和圆弧组成。像这样的东西:

弧段和直线段的数量、位置、方向、直径和扫描角/角度是可变的。
如何计算不包括孔面积的闭合曲线内的面积?我知道如何通过用一系列线段来逼近弧线来实现这一点。但是有没有更好、更准确的算法来做到这一点?
python ×6
algorithm ×4
area ×4
geometry ×4
polygon ×3
arrays ×2
c# ×2
geolocation ×2
concave-hull ×1
coordinates ×1
curve ×1
geospatial ×1
graphics ×1
list ×1
map ×1
mapping ×1
math ×1
numpy ×1
performance ×1
rc ×1
redgreen ×1