时间:2021-07-01 10:21:17 帮助过:53人阅读
根据数学知识的射线法,射线与几何多边形相交的点的个数为奇数则是在几何内部;
偶数在外部;
- /**
- * 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; //在内
更多PHP相关知识,请访问PHP教程!
以上就是PHP判断点是否在多边形区域内外的详细内容,更多请关注Gxlcms其它相关文章!