PHP判断点是否在不规则多边形中

来源:互联网 发布:网络上的死鱼是啥意思 编辑:程序博客网 时间:2024/06/06 11:17
<?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);  ?>