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

举报
lxw1844912514 发表于 2022/03/27 01:39:12 2022/03/27
【摘要】 小谢博客原文地址https://xgs888.top/post/view?id=79   PHP判断点是否在多边形区域内外;根据数学知识的射线法, 射线与几何多边形相交的点的个数为奇数则是在几何内部; 偶数在外部; /** * Created by Ph...

小谢博客原文地址https://xgs888.top/post/view?id=79

 

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//在内

  

 

文章来源: blog.csdn.net,作者:lxw1844912514,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/lxw1844912514/article/details/100027922

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。