首页 > 其他 > 详细

判断点在多边形范围之内的方法

时间:2014-03-11 15:22:52      阅读:466      评论:0      收藏:0      [点我收藏+]

判断点在多边形范围之内的方法,网上找的,觉得挺有用的,共享一下……

 

bubuko.com,布布扣
/// <summary>
        /// 测试点是都在多边形之内
        /// </summary>
        /// <param name="xt">点的X坐标</param>
        /// <param name="yt">点的Y坐标</param>
        /// <param name="listPolygon">多边形坐标点集合</param>
        /// <returns></returns>
        private bool TestRange(double xt, double yt, List<Tuple<double, double>> listPolygon)
        {
            int nCount = listPolygon.Count;
            int nCross = 0;
            for (int i = 0; i < nCount; i++)
            {
                double tempx1 = listPolygon[i].Item1;
                double tempx2 = listPolygon[(i + 1) % nCount].Item1;
                double tempy1 = listPolygon[i].Item2;
                double tempy2 = listPolygon[(i + 1) % nCount].Item2;
                // 求解 y=p.y 与 p1p2 的交点 
                if (tempy1 == tempy2) // p1p2 与 y=p0.y平行 
                    continue;

                if (yt < Math.Min(tempy1, tempy2)) // 交点在p1p2延长线上 
                    continue;
                if (yt >= Math.Max(tempy1, tempy2)) // 交点在p1p2延长线上 
                    continue;

                // 求交点的 X 坐标 
                double x = (double)(yt - tempy1) * (double)(tempx2 - tempx1) / (double)(tempy2 - tempy1) + tempx1;

                if (x > xt)
                    nCross++; // 只统计单边交点 
            }
            // 单边交点为偶数,点在多边形之外
            return (nCross % 2 == 1);
        }
bubuko.com,布布扣

判断点在多边形范围之内的方法,布布扣,bubuko.com

判断点在多边形范围之内的方法

原文:http://www.cnblogs.com/starpnd/p/3593232.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!