判断一个点是否在多边形内C#

6 篇文章 0 订阅
  1. //判断点在线的一边  
  2. public int isLeft(Vector2 P0, Vector2 P1, Vector2 P2)  
  3. {  
  4.    int abc = (int)((P1.X - P0.X) * (P2.Y - P0.Y) - (P2.X - P0.X) * (P1.Y - P0.Y));  
  5.    return abc;  
  6.   
  7. }   

 

[csharp]  view plain  copy
  1. //判断点pnt是否在region内主程序  
  2. private bool isInRegion(Vector2 pnt , List<Vector2> region)  
  3. {  
  4.   
  5.             int wn = 0, j = 0; //wn 计数器 j第二个点指针  
  6.             for (int i = 0; i < region.Count; i++)  
  7.             {  
  8.                 //开始循环  
  9.                 if (i == region.Count - 1)  
  10.                 {  
  11.                     j = 0;//如果 循环到最后一点 第二个指针指向第一点  
  12.                 }  
  13.                 else  
  14.                 {  
  15.                     j = j + 1; //如果不是 ,则找下一点  
  16.                 }  
  17.   
  18.                 if (region[i].Y <= pnt.Y) // 如果多边形的点 小于等于 选定点的 Y 坐标  
  19.                 {  
  20.                     if (region[j].Y > pnt.Y) // 如果多边形的下一点 大于于 选定点的 Y 坐标  
  21.                     {  
  22.                         if (isLeft(region[i], region[j], pnt) > 0)  
  23.                         {  
  24.                             wn++;  
  25.                         }  
  26.                     }  
  27.                 }  
  28.                 else  
  29.                 {  
  30.                     if (region[j].Y <= pnt.Y)  
  31.                     {  
  32.                         if (isLeft(region[i], region[j], pnt) < 0)  
  33.                         {  
  34.                             wn--;  
  35.                         }  
  36.                     }  
  37.                 }  
  38.             }  
  39.             if (wn == 0)  
  40.             {  
  41.                 return false;  
  42.             }  
  43.             else  
  44.             {  
  45.                 return true;  
  46.             }  
  47. }  
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值