zoukankan      html  css  js  c++  java
  • 判断一个点是否在多边形内部,射线法思路,C#实现

    感谢原作者,原理请看原作者的文章 http://www.html-js.com/article/1517

    C#实现

        public string rayCasting(PointF p, PointF[] poly)
            {
                var px = p.X;
                var py = p.Y;
                var flag = false;
    
                int l = poly.Length;
                int j = l - 1;
    
                for (var i = 0; i < l; i++)
                {
                    var sx = poly[i].X;
                    var sy = poly[i].Y;
                    var tx = poly[j].X;
                    var ty = poly[j].Y;
    
                    // 点与多边形顶点重合
                    if ((sx == px && sy == py) || (tx == px && ty == py))
                    {
                        return = "on";
                    }
    
                    // 判断线段两端点是否在射线两侧
                    if ((sy < py && ty >= py) || (sy >= py && ty < py))
                    {
                        // 线段上与射线 Y 坐标相同的点的 X 坐标
                        var x = sx + (py - sy) * (tx - sx) / (ty - sy);
    
                        // 点在多边形的边上
                        if (x == px)
                        {
                            return "on";
                        }
    
                        // 射线穿过多边形的边界
                        if (x > px)
                        {
                            flag = !flag;
                        }
    
                    }
    
                    j = i;
                }
    
                // 射线穿过多边形边界的次数为奇数时点在多边形内
                return = flag ? "in" : "out";
            }
  • 相关阅读:
    HDOJ 3547 DIY Cube 解题报告
    一些经典的期望问题

    人生
    BZOJ 4341 [CF253 Printer] 解题报告
    BZOJ 4302 Buildings 解题报告
    OI 回忆录
    PyQt实现测试工具
    PyQt:eg4
    pyQt: eg3
  • 原文地址:https://www.cnblogs.com/hhh/p/5154392.html
Copyright © 2011-2022 走看看