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

来源:互联网 发布:qt助手是什么软件 编辑:程序博客网 时间:2024/05/21 06:52

小谢博客原文地址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


原创粉丝点击