根據數學知識的射線法,射線與幾何多邊形相交的點的個數為奇數則是在幾何內部;
偶數在外部;
/** * 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判斷點是否在多邊形區域內外的詳細內容,更多請關注TW511.COM其它相關文章!