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";
            }
  • 相关阅读:
    二分图的最大匹配
    染色法判定二分图
    kruskal求最小生成树
    prim算法求最小生成树
    floyd
    spfa算法
    bellman_ford
    Dijkstra
    文件操作_1-18 选择题
    会话控制_2-5 编程练习
  • 原文地址:https://www.cnblogs.com/hhh/p/5154392.html
Copyright © 2011-2022 走看看