zoukankan      html  css  js  c++  java
  • 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; //在内
    

      

  • 相关阅读:
    Bert及变种简述
    损失函数
    头条(三面)、新浪(一面)、快手(两面)、bigo(两面)面试
    使用curl出现,curl: /usr/local/lib/libssl.so.1.1: version `OPENSSL_1_1_1' not found (required by /usr/lib/x86_64-linux-gnu/libcurl.so.4)
    cmake 出现undefined reference to xxx 解决办法
    tensorflow2.0编程规范
    asp.net过滤HTML标签,只保留换行与空格
    除了IE浏览器能识别之外,其他浏览器都不能识别的html写法
    bootstrap按钮加载状态改变
    ASP.NET静态页生成
  • 原文地址:https://www.cnblogs.com/lxwphp/p/15453398.html
Copyright © 2011-2022 走看看