• PHP判断点是否在多边形区域内外


    小谢博客原文地址https://xgs888.top/post/view?id=79

    PHP判断点是否在多边形区域内外;根据数学知识的射线法,

    射线与几何多边形相交的点的个数为奇数则是在几何内部;

    偶数在外部;

    /**
     * Created by PhpStorm.
     * function: inArea
     * Description: 判断点是否在多边形区域内
     * User: Xiaoxie
     * @param $x 
     * @param $y
     * @param $arr 几何订单坐标
     * @return int
     *
     */
    public function inArea($x,$y,$arr)
    {
        //点的数量
        $count = count($arr);
        $n = 0; //点与线相交的个数
        $bool = 0;//外
        for ($i = 0, $j = $count - 1; $i < $count; $j = $i, $i++) {
            //两个点一条线 取出两个连接点的定点
            $px1 = $arr[$i][0];
            $py1 = $arr[$i][1];
            $px2 = $arr[$j][0];
            $py2 = $arr[$j][1];
            //$x的水平位置画射线
            if($x>=$px1 || $x>= $px2)
            {
                //判断$y 是否在线的区域
                if(($y>=$py1 && $y<=$py2) || ($y>=$py2 && $y<= $py1)){
     
     
                        if (($y == $py1 && $x == $px1) || ($y == $py2 && $x == $px2)) {
     
                           #如果$x的值和点的坐标相同
                            $bool = 2;//在点上
                            return $bool;
     
                        }else{
                            $px = $px1+($y-$py1)/($py2-$py1)*($px2-$px1) ;
                            if($px ==$x)
                            {
                                $bool = 3;//在线上
                            }elseif($px< $x){
                                $n++;
                            }
     
                        }
                }
            }
     
        }
        if ($n%2 != 0) {
            $bool = 1;
        }
        return $bool;
    }
    

      测试数组

    $arr = [
        ['9.4','12.04'],
        ['6.68','8.61'],
        ['9.05','6.06'],
        ['6.24','3.87'],
        ['10.02','2.55'],
     
        ['14.06','4.13'],
     
        ['16.35','7.56'],
     
        ['11.69','8.35'],
    ];
     
    $x =15.73;
    $y = 5.62;
    //在外
    $x = 9.97;
    $y = 4.96; //在内
    

      

  • 相关阅读:
    查看java程序中对象占用空间大小
    elasticsearch的基本了解
    kafka命令及启动
    屠龙之路_大杀技之倚天屠龙_TenthDay
    屠龙之路_坚持就是胜利_NinthDay
    屠龙之路_狭路相逢勇者胜_EighthDay
    屠龙之路_任生活如何虐你,屠龙之路还得继续_SeventhDay
    屠龙之路_假期罢工和公主私奔_SixthDay
    屠龙之路_击败DB小boss_FifthDay
    屠龙之路_转角遇到服务器大魔王_FourthDay
  • 原文地址:https://www.cnblogs.com/lxwphp/p/10784592.html
Copyright © 2020-2023  润新知