用于实现避免三角剖分以找到多边形区域的 Slicker 算法的 C++ 程序

这是一个 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