<?php
/*判断函数,$new放入多边形各个顶点的坐标,$t为判断点的位置,$n为顶点坐标的个数-1;若点在多边形内则返回1,否则返回0;*/
function inpolygon($new,$t,$n){
for($i = 0;$i<=$n;$i++){
$new[$i][0]-=$t[0];
$new[$i][1]-=$t[1];
}
$t1 = $new[0][0]>=0?($new[0][1]>=0?0:3):($new[0][1]>=0?1:2);
for($sum =0,$i=1;$i<=$n;$i++){
if(!$new[$i][0] && !$new[$i][1]){
break;
}
$f = $new[$i][1]*$new[$i-1][0] - $new[$i][0]*$new[$i-1][1];
if(!$f && $new[$i-1][0]*$new[$i][0]<=0 && $new[$i-1][1]*$new[$i][1]<=0){
break;
}
$t2 = $new[$i][0]>=0?($new[$i][1]>=0?0:3):($new[$i][1]>=0?1:2);
if($t2 == ($t1+1)%4){
$sum +=1;
}
else if($t2 == ($t1+3)%4){
$sum -=1;
}
else if($t2 == ($t1+2)%4){
if($f>0)$sum+=2;
else $sum-=2;
}
$t1 = $t2;
}
if($i<=$n || $sum){
return 1;
}
return 0;
}
$new = array(
array(2,1),
array(5,1),
array(6,3),
array(7,1),
array(8,3),
array(8,6),
array(4,4),
array(2,6),
array(2,1),
);
$new2 = array(6,3);
/*调用函数*/
echo inpolygon($new,$new2,count($new)-1);
?>
PHP判断点是否在不规则多边形中
最新推荐文章于 2021-03-26 17:12:57 发布