当前位置:Gxlcms > PHP教程 > PHP判断点是否在多边形区域内外

PHP判断点是否在多边形区域内外

时间:2021-07-01 10:21:17 帮助过:53人阅读

PHP判断点是否在多边形区域内外;

根据数学知识的射线法,射线与几何多边形相交的点的个数为奇数则是在几何内部;

偶数在外部;

  1. /**
  2. * Created by PhpStorm.
  3. * function: inArea
  4. * Description: 判断点是否在多边形区域内
  5. * User: Xiaoxie
  6. * @param $x
  7. * @param $y
  8. * @param $arr 几何订单坐标
  9. * @return int
  10. *
  11. */
  12. public function inArea($x,$y,$arr)
  13. {
  14. //点的数量
  15. $count = count($arr);
  16. $n = 0; //点与线相交的个数
  17. $bool = 0;//外
  18. for ($i = 0, $j = $count - 1; $i < $count; $j = $i, $i++) {
  19. //两个点一条线 取出两个连接点的定点
  20. $px1 = $arr[$i][0];
  21. $py1 = $arr[$i][1];
  22. $px2 = $arr[$j][0];
  23. $py2 = $arr[$j][1];
  24. //$x的水平位置画射线
  25. if($x>=$px1 || $x>= $px2)
  26. {
  27. //判断$y 是否在线的区域
  28. if(($y>=$py1 && $y<=$py2) || ($y>=$py2 && $y<= $py1)){
  29. if (($y == $py1 && $x == $px1) || ($y == $py2 && $x == $px2)) {
  30. #如果$x的值和点的坐标相同
  31. $bool = 2;//在点上
  32. return $bool;
  33. }else{
  34. $px = $px1+($y-$py1)/($py2-$py1)*($px2-$px1) ;
  35. if($px ==$x)
  36. {
  37. $bool = 3;//在线上
  38. }elseif($px< $x){
  39. $n++;
  40. }
  41. }
  42. }
  43. }
  44. }
  45. if ($n%2 != 0) {
  46. $bool = 1;
  47. }
  48. return $bool;
  49. }

测试数组

  1. $arr = [
  2. ['9.4','12.04'],
  3. ['6.68','8.61'],
  4. ['9.05','6.06'],
  5. ['6.24','3.87'],
  6. ['10.02','2.55'],
  7. ['14.06','4.13'],
  8. ['16.35','7.56'],
  9. ['11.69','8.35'],
  10. ];
  11. $x =15.73;
  12. $y = 5.62;
  13. //在外
  14. $x = 9.97;
  15. $y = 4.96; //在内

 29d36d286d4e908f40eb121030c365b.png

更多PHP相关知识,请访问PHP教程!

以上就是PHP判断点是否在多边形区域内外的详细内容,更多请关注Gxlcms其它相关文章!

人气教程排行