现在的位置: 首页 > 综合 > 正文

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

2013年02月17日 ⁄ 综合 ⁄ 共 842字 ⁄ 字号 评论关闭

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

 

        }

 

抱歉!评论已关闭.