zoukankan      html  css  js  c++  java
  • 判断一个点是否在多边形区域内--C算法

    /*
    函数的输入:
    (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;
    }


     

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

  • 相关阅读:
    混合背包
    庆功会(多重背包)
    商店选址问题(dij)(未完成)
    城市问题(dij)
    最短路径问题(dijkstra)
    城市问题(Floyd)
    商店选址问题(Floyd)
    差值中位数(二分答案+判定中位数)
    CF448C Painting Fence(分治)
    字符串+数论(扩展欧拉定理)
  • 原文地址:https://www.cnblogs.com/MingoJiang/p/8682220.html
Copyright © 2011-2022 走看看