PHP判断点是否在多边形区域内外 - Go语言中文社区

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


image.png


版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/xgs736214763/article/details/78873280
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2020-06-30 10:55:38
  • 阅读 ( 1237 )
  • 分类:

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢