如何找到一个复杂多边形的面积- c++
How to find the area of a complex polygon - c++
对于非复杂多边形,这很简单:
A = 1/2 * (x1*y2 - x2*y1 + x2*y3 - x3*y2 + ... + x(n-1)*yn - xn*y(n-1) + xn*y1 - x1*yn)
这是我在c++中的实现:
struct Point {
double x, y;
} point[210];
double area(int n) {
double a=0, b=0;
for(int i=0; i<n-1; ++i) {
a += point[i].x * point[i+1].y;
b += point[i].y * point[i+1].x;
}
return (a - b)/2;
}
但是如果多边形是复数呢?有没有类似的方法来求它的面积?
注意:我尝试使用相同的技术,但它不起作用。对于多边形
(0,0) , (0,7) , (4,3) , (0,3) , (2,4) , (2,1) , (0, 0)
上面的公式给我28000,应该是26000。我能给出的唯一解释是三角形(0,3),(2,4),(2,3)被计数了两次(点(2,3)是段(0,3),(4,3)和(2,4),(2,1)的交点)。
根据这个链接,你所说明的公式是对于凸多边形,但是你给出的例子似乎不是一个。
注。为了更好的可读性,可以考虑使用下面的数组来代替2D数组。
struct Point{
double x,y;
};
Point point[210];
...
a += point[i].x * point[i+1].y;
该公式适用于简单的多边形(那些不自相交的多边形),凸或非凸。注意,它计算多边形的带符号的面积。如果(简单)多边形顺时针方向,使用该公式计算的面积将是负的。
对于非简单多边形,公式计算该多边形所有简单分量的带符号面积之和。您的示例组件具有自相交,并且它的一个组件,三角形,贡献了两倍的面积。
相关文章:
- 计算缩放多边形的比例,得到给定的多边形面积
- 将QGraphicsItem的移动区域限制在多边形区域内
- 重新排列单线以形成闭合多边形?
- 提升几何体:C++并集多个多边形
- 在 QT C++中绘制/操作多边形
- Maya API C++:从多边形获取材质
- 添加带有提升的多边形::p奥利贡不编译?
- 使用 C++在 OpenGL 中对 3D 多边形进行纹理处理
- 使用 C++在 OpenGL 中移动自动旋转的 3D 多边形
- 如何使用增强::几何计算多边形的旋转固体体积?
- 从拉伸多边形构建多面体
- 使用提升几何缓冲区缩放多边形时的冗余折点
- cgal多边形网格中的tet网格密度分级
- 如何绘制具有随机顶点数量的多边形并旋转它们
- 多边形裁剪 - 一点点详细说明
- 使用裁剪器库在线和多边形之间相交
- 平移 CGAL 多边形,而无需循环穿过折点
- 无法正确改变窗口中多边形的形状
- 在多边形内查找增强 rtree 元素
- 将当前多边形数据单元与下一个多边形单元格 - VTK 进行比较