判断一个点是否在多边形区域内--C算法

版权声明:本文为博主原创文章,如欲转载请与博主联系,QQ:1148824289. https://blog.csdn.net/MingoJiang/article/details/8159618

/*
函数的输入:
(1)当前点的坐标p
(2)区域顶点数组pt[];
(3)顶点数nCount
 输出: 在区域内返回TRUE,否则返回FALSE。
 
 Point类型是一个结构:
 struct Point
 {
    类型 x;//此处类型根据采用的经纬度类型决定。
    类型 y;
 };
*/
BOOL PtInPolygon(Point p, Point pt[], int nCount)
{
   int nCross = 0;
   for (int i = 0; i < nCount; i++)
   {
      Point p1 = pt[i];
      Point p2 = pt[(i + 1) % nCount];
      if (p1.y == p2.y)
      {
         if (p.y == p1.y && p.x >= min(p1.x, p2.x) && p.x <= max(p1.x, p2.x))
            return true;
         continue;
      }
      if (p.y < min(p1.y, p2.y) || p.y > max(p1.y, p2.y))
         continue;
     double x = (double)(p.y - p1.y) * (double)(p2.x - p1.x) / (double)(p2.y - p1.y) + p1.x;

     if (x > p.x)
           nCross++;
     else if (x == p.x)
        return true;
   }
    if (nCross % 2 == 1)
       return true;
     return false;
}


 

建议转换成整形,因为浮点形的比较可能会出现边界问题
展开阅读全文

没有更多推荐了,返回首页