软件设计之多边形区域内找点

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);

 

        }

 

posted on 2012-07-07 14:32  h2内存数据库  阅读(324)  评论(0编辑  收藏  举报

导航