这是一个 C++ 程序,它使用 slicker 算法来查找多边形的面积,该算法避免了三角剖分来查找多边形的面积。
它假定通常的数学约定是正 y 指向上方。在正 y 向下的计算机系统中,最简单的方法是使用“正 y 向下”坐标逆时针列出顶点。然后两个效应相互抵消以产生一个积极的区域。
Begin function Area() is used to calculate area of a polygon take the polygon p as argument. for i = 0 to p.n-1 initialize j = (i + 1) % p.n; calculate t =t+((p.p[i].b * p.p[j].b) - (p.p[j].a * p.p[i].b.)) return t/2 End
#include <iostream> using namespace std; const int MAX = 200; class P// 声明变量{ private: public: double a, b; }; class Polygon { private: public: P p[MAX]; int n; Polygon()//取多边形每个点的坐标{ for (int i = 0; i < MAX; i++) P p[i]; } }; double Area(Polygon p)//面积计算{ double t = 0; for (int i = 0; i < p.n; i++) { int j = (i + 1) % p.n; t += (p.p[i].b * p.p[j].b) - (p.p[j].a * p.p[i].b); } return t / 2; } int main(int argc, char **argv) { Polygon p; cout << "在多边形中输入点数: "; cin >>p.n; cout << "输入每个点的坐标: "; for (int i = 0; i < p.n; i++) { cin >>p.p[i].a; cin >>p.p[i].b; } double a = Area(p); if (a >0)//if area>0 cout << "多边形的面积 " << p.n << " 使用 Slicker 算法的点是: " << a; else cout << "多边形的面积 " << p.n << " 使用 Slicker 算法的点是: " << (a * -1); }输出结果
在多边形中输入点数: 6 输入每个点的坐标: 1 1 2 2 3 3 4 4 5 5 6 7 多边形的面积 6 使用 Slicker 算法的点是: 2.5