publicbool FindPoint(double X, double Y)

 

        {

 

            int nCount = myPts.Count;

 

            int nCross = 0;

 

            for (int i = 0; i < nCount; i++)

 

            {

 

                Point p1 = myPts[i];

 

                Point p2 = myPts[(i + 1) %nCount];

 

 

                // 求解 y=p.y 与 p1p2 的交点

 

                if (p1.Y == p2.Y)

 

                    continue;

 

                // 交点在p1p2延长线上

 

                if (Y < Math.Min(p1.Y,p2.Y))

 

                    continue;

 

                // 交点在p1p2延长线上

 

                if (Y >= Math.Max(p1.Y,p2.Y))

 

                    continue;

 

                // 求交点的 X 坐标--------------------------------------------------------------

 

                double x = (double)(Y - p1.Y) *(double)(p2.X - p1.X) / (double)(p2.Y - p1.Y) + p1.X;

 

                if (x > X)

 

                    nCross++; // 只统计单边交点

 

            }

 

            // 单边交点为偶数,点在多边形之外 ---

 

            return (nCross % 2 == 1);

 

        }

 

相关文章:

  • 2021-11-07
  • 2021-11-28
  • 2021-05-22
  • 2022-12-23
  • 2022-01-04
  • 2022-12-23
  • 2022-02-20
猜你喜欢
  • 2022-02-16
  • 2022-12-23
  • 2021-09-22
  • 2021-11-16
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案