flz0728 发表于 2021-11-5 10:22:57

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

/// <summary>
      /// 判断点是否在多边形内
      /// </summary>
      /// <param name="checkPoint">需要判断的点</param>
      /// <param name="polygonPoints">组成多边形点的集合</param>
      /// <returns></returns>
      public static bool IsInPolygon2(Point3d checkPoint, Point3dCollection polygonPoints)
      {
            int counter = 0;
            int i;
            double xinters;
         Point3d p1, p2;
            int pointCount = polygonPoints.Count;
            p1 = polygonPoints;
            for (i = 1; i <= pointCount; i++)
            {
                p2 = polygonPoints;
                if (checkPoint.Y > Math.Min(p1.Y, p2.Y)//校验点的Y大于线段端点的最小Y
                  && checkPoint.Y <= Math.Max(p1.Y, p2.Y))//校验点的Y小于线段端点的最大Y
                {
                  if (checkPoint.X <= Math.Max(p1.X, p2.X))//校验点的X小于等线段端点的最大X(使用校验点的左射线判断).
                  {
                        if (p1.Y != p2.Y)//线段不平行于X轴
                        {
                            xinters = (checkPoint.Y - p1.Y) * (p2.X - p1.X) / (p2.Y - p1.Y) + p1.X;
                            if (p1.X == p2.X || checkPoint.X <= xinters)
                            {
                              counter++;
                            }
                        }
                  }

                }
                p1 = p2;
            }

            if (counter % 2 == 0)
            {
                return false;
            }
            else
            {
                return true;
            }
      }

xiabin68 发表于 2023-3-20 11:45:12

历害。。高手。
页: [1]
查看完整版本: 分享一个源码-判断点是否在多线段内