• 判断一个点是否在一个不规则的多边形区域内部


    原文出自:www.hangge.com  转载请保留原文链接:https://www.hangge.com/blog/cache/detail_383.html

    判断一个点是否在一个多边形区域内部,大致原理如下:
     
    从该点向右引一条水平射线,计算与多边形区域边的交点,如果交点个数为偶数个,则该点在区域外部,如果为奇数个,该点在区域内部。
     
    对应的AS代码如下:
    private function ptInPolygon (p:Point, areaPoints:Array):Boolean
    {
        // 交点个数
        var nCross:int = 0;
        for (var i:int = 0; i < areaPoints.length; i++)
        {
            var p1:Point = areaPoints[i];
            var p2:Point = areaPoints[(i + 1) % areaPoints.length];// 最后一个点与第一个点连线
            if ( p1.y == p2.y )
                continue;
            if ( p.y < Math.min(p1.y, p2.y) )
                continue;
            if ( p.y >=Math.max(p1.y, p2.y) )
                continue;
            // 求交点的x坐标
            var x:Number = (Number)(p.y - p1.y) * (Number)(p2.x - p1.x) / (Number)(p2.y - p1.y) + p1.x;
            // 只统计p1p2与p向右射线的交点
            if ( x > p.x )
            {
                nCross++;
            }
        }
        // 交点为偶数,点在多边形之外
        return (nCross % 2 == 1);
    }
     
     
    protected function test(event:FlexEvent):void
    {
        var p:Point = new Point(150,150);
        var areaPoints:Array = [
            new Point(100,100),
            new Point(200,100),
            new Point(200,200),
            new Point(100,200)];
        trace(ptInPolygon(p,areaPoints));
    }
    

      



  • 相关阅读:
    大数据问题集锦
    分析JMeter聚合报告中的各项指标
    Jmeter之正则表达式提取器应用
    mysql忘记密码怎么办?
    ARIMA模型
    ADF检验
    第13章 时间序列分析和预测
    pandas的基本功能
    pandas库
    PS常用快捷键
  • 原文地址:https://www.cnblogs.com/dt1991/p/12743359.html
Copyright © 2020-2023  润新知