gpt4 book ai didi

c++ - 如何找到复杂多边形的面积 - C++

转载 作者:太空宇宙 更新时间:2023-11-04 14:11:11 24 4
gpt4 key购买 nike

对于非复杂的多边形,很简单:

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)

上面的公式给出了 28.000,应该是 26.000。我能给出的唯一解释是三角形 (0,3) , (2,4) , (2,3) 被计算了两次(点 (2,3) 是线段 (0,3) 的交点, (4,3) 和 (2,4) , (2,1)).

最佳答案

根据 this link您说明的公式是用于凸多边形,但您给出的示例似乎不是

附注为了更好的可读性,考虑使用下面的数组而不是二维数组。

struct Point{ 
double x,y;
};

Point point[210];

...
a += point[i].x * point[i+1].y;

关于c++ - 如何找到复杂多边形的面积 - C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14181756/

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