1
95
这里是 the standard method 。基本上求和每个顶点的交叉积。比三角测量简单得多。 python代码,给定一个以(x,y)顶点坐标列表表示的多边形,隐式地从最后一个顶点绕到第一个顶点:
DavidLehavi评论:值得一提的是,这个算法为什么有效:它是 Green's theorem 对于函数“y”和“x”;完全按照a planimeter 作品。更具体地说:
公式以上
|
2
14
交叉积是一个经典。 如果您有无数这样的计算要做,请尝试以下需要少一半乘法的优化版本:
为了清晰起见,我使用数组下标。使用指针更有效。尽管优秀的编译器会为您提供帮助。 假设多边形是“闭合”的,这意味着您将第一个点复制为带下标n的点。它还假设多边形有偶数个点。如果n不是偶数,则附加第一个点的额外副本。 该算法是通过展开并结合经典交叉积算法的两个连续迭代得到的。 我不太确定这两种算法在数值精度方面的比较。我的印象是,上面的算法比经典算法好,因为乘法往往会恢复减法的精度损失。当限制使用float时,就像使用gpu一样,这可能会产生显著的差异。 编辑: "Area of Triangles and Polygons 2D & 3D" 描述了一种更有效的方法
|
3
8
This page 显示公式
可以简化为:
如果你写出一些术语,并根据
最后的求和更有效,因为它只需要
我从乔·金顿那里学到了这种简化, here . 如果您有numpy,这个版本会更快(除了非常小的数组):
|
4
4
没有任何其他约束的点集不一定唯一地定义多边形。 所以,首先你必须决定从这些点构建什么多边形——也许是凸面外壳? http://en.wikipedia.org/wiki/Convex_hull 然后三角测量并计算面积。 http://www.mathopenref.com/polygonirregulararea.html |
5
4
为了在三角形区域上展开并求和,如果您碰巧有一个凸多边形,或者您碰巧选择了一个点,该点不会生成到与多边形相交的每个其他点的线。 对于一般的非相交多边形,需要求和向量(参考点,A点),(参考点,B点)的交叉积,其中A和B是“相邻”的。 假设您有一个按顺序定义多边形的点列表(顺序是点i和i+1构成多边形的一条线): i=1到n-1的和(叉积((点0,点I),(点0,点I+1))。 取这个叉积的大小,你就得到了表面积。 这将处理凹面多边形,而不必担心选择一个好的参考点;任何三个点生成一个不在多边形内的三角形都将有一个交叉积,该交叉积指向多边形内任何三角形的相反方向,因此面积得到正确的求和。 |
6
3
计算多边形面积的步骤
|
7
2
或者做一个轮廓积分。斯托克斯定理允许将面积积分表示为轮廓积分。有点高斯正交和鲍勃的叔叔。 |
8
1
一种方法是 decompose the polygon into triangles ,计算三角形的面积,并取和作为多边形的面积。 |
9
1
|
10
1
与三角形求和相比,笛卡尔空间中的梯形求和更好:
|
11
1
语言独立解决方案: 给定:多边形总是可以由n-2个不重叠的三角形组成(n=点或边的数目)。1个三角形=3边多边形=1个三角形;1个正方形=4边多边形=2个三角形;等等 因此,可以通过“切掉”三角形来减少多边形,总面积将是这些三角形的面积之和。试着用一张纸和一把剪刀,如果你能在接下来的过程中看到它是最好的。 如果在多边形路径中取任意3个连续点,并使用这些点创建三角形,则可能会有三种情况之一:
我们只对第一个选项(完全包含)中的情况感兴趣。 每次我们找到其中的一个,我们就把它切掉,计算它的面积(简单易懂,这里不解释公式),然后做一个新的边少的多边形(相当于这个三角形切掉的多边形)。直到我们只剩下一个三角形。 如何通过编程实现: 创建表示多边形周围路径的(连续)点数组。从点0开始。从点x、x+1和x+2运行数组,生成三角形(一次一个)。将每个三角形从一个形状转换为一个区域,并与从多边形创建的区域相交。如果生成的交集与原三角形相同,则该三角形完全包含在多边形中,可以被切掉。从数组中删除x+1,然后从x=0重新开始。否则(如果三角形在[部分或完全]多边形之外),移动到数组中的下一个点X+1。 此外,如果您希望与地图集成并从地理点开始,则必须先从地理点转换为屏幕点。这需要确定一个地球形状的模型和公式(尽管我们倾向于把地球看作一个球体,但实际上它是一个不规则的卵圆形(蛋形),带有凹痕)。有许多模型,为进一步的信息维基。一个重要的问题是你是否会认为这个区域是一个平面或者是曲线。一般来说,如果考虑到平面和非凸面,点间距达千米的“小”区域不会产生显著误差。 |
12
1
执行 Shoelace formula 可以在麻木中完成。假设这些顶点:
我们可以定义以下函数来查找区域:
获得结果:
避免循环使此函数比
注意:我已经为另一个人写了这个答案 question ,我只是在这里提到了一个完整的解决方案列表。 |
13
0
我倾向于简单地开始切掉三角形。我不明白还有什么能避免长得毛茸茸的。 取构成多边形的三个连续点。确保角度小于180。现在有了一个新的三角形,计算起来应该没问题,从多边形的点列表中删除中间点。重复,直到你只剩下三分。 |
14
0
C方法:
|
15
0
蟒蛇代码如下所述: http://www.wikihow.com/Calculate-the-Area-of-a-Polygon 与熊猫
|
16
0
|
mikanim · 改进二维余弦函数的numpy功能 2 年前 |
chutiya · 我被python中的变量困住了 2 年前 |
Mark Yo · 从成绩转换为gpa(带小数)[重复] 6 年前 |
Nick X Tsui · 2D插值导致溢出错误:要插值的数据点太多 6 年前 |
Gentem · 如何读取文本文件图像并将其保存到数组? 6 年前 |
AL BAHRI · 循环通过2D阵列(对角线)c++ 6 年前 |