明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1301|回复: 1

[几何] 分享一个源码-判断点是否在多线段内

[复制链接]
发表于 2021-11-5 10:22:57 | 显示全部楼层 |阅读模式
  1. /// <summary>
  2.         /// 判断点是否在多边形内
  3.         /// </summary>
  4.         /// <param name="checkPoint">需要判断的点</param>
  5.         /// <param name="polygonPoints">组成多边形点的集合</param>
  6.         /// <returns></returns>
  7.         public static bool IsInPolygon2(Point3d checkPoint, Point3dCollection polygonPoints)
  8.         {
  9.             int counter = 0;
  10.             int i;
  11.             double xinters;
  12.            Point3d p1, p2;
  13.             int pointCount = polygonPoints.Count;
  14.             p1 = polygonPoints[0];
  15.             for (i = 1; i <= pointCount; i++)
  16.             {
  17.                 p2 = polygonPoints[i % pointCount];
  18.                 if (checkPoint.Y > Math.Min(p1.Y, p2.Y)//校验点的Y大于线段端点的最小Y
  19.                     && checkPoint.Y <= Math.Max(p1.Y, p2.Y))//校验点的Y小于线段端点的最大Y
  20.                 {
  21.                     if (checkPoint.X <= Math.Max(p1.X, p2.X))//校验点的X小于等线段端点的最大X(使用校验点的左射线判断).
  22.                     {
  23.                         if (p1.Y != p2.Y)//线段不平行于X轴
  24.                         {
  25.                             xinters = (checkPoint.Y - p1.Y) * (p2.X - p1.X) / (p2.Y - p1.Y) + p1.X;
  26.                             if (p1.X == p2.X || checkPoint.X <= xinters)
  27.                             {
  28.                                 counter++;
  29.                             }
  30.                         }
  31.                     }

  32.                 }
  33.                 p1 = p2;
  34.             }

  35.             if (counter % 2 == 0)
  36.             {
  37.                 return false;
  38.             }
  39.             else
  40.             {
  41.                 return true;
  42.             }
  43.         }
复制代码


您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-25 04:50 , Processed in 0.155306 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表