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; //在内
    

      

  • 相关阅读:
    悲观锁、乐观锁、行级锁、表级锁
    MySQL中锁详解(行锁、表锁、页锁、悲观锁、乐观锁等)
    刷题-力扣-148. 排序链表
    刷题-力扣-206. 反转链表
    刷题-力扣-203. 移除链表元素
    刷题-力扣-474. 一和零
    刷题-力扣-494. 目标和
    刷题-力扣-160. 相交链表
    刷题-力扣-34. 在排序数组中查找元素的第一个和最后一个位置
    刷题-力扣-33. 搜索旋转排序数组
  • 原文地址:https://www.cnblogs.com/lxwphp/p/10784592.html
Copyright © 2011-2022 走看看