判斷一個點是否在多邊形區域內--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;
}


 

建議轉換成整形,因為浮點形的比較可能會出現邊界問題


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM