Maison > Article > développement back-end > PHP détermine si un point se trouve à l'intérieur ou à l'extérieur de la zone du polygone
PHP détermine si le point est à l'intérieur ou à l'extérieur de la zone du polygone
Selon la méthode des rayons de la connaissance mathématique, si le nombre de points que le rayon coupe avec le polygone géométrique est un nombre impair, il est à l'intérieur de la géométrie ;
Un nombre pair En externe
/** * 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; }
Test Array
$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; //在内
Pour plus de connaissances sur PHP, veuillez visiter Tutoriel PHP !
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!