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

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

偶数在外部;

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

 29d36d286d4e908f40eb121030c365b.png

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

更多相关文章

  1. 获取图像特定区域的所有多边形坐标?
  2. 如何只用HTML和CSS构建一个特殊的多边形(风筝形状)?

随机推荐

  1. 您试图显示配置为只允许执行和脚本权限的
  2. 为什么IE7没有正确地将 块复制到剪贴板?
  3. ThinkPHP生成静态页buildHtml方法
  4. HTML哪些是块级元素,哪些是行内元素、
  5. 使用Semantic-UI垂直对齐div
  6. sublime3安装liveload,实现前端自动F5刷新
  7. TP-link 无线路由器WDS设置方法图解_无线
  8. 如何在刀片服务器的foreach循环中插入表
  9. 真人演示乳房按摩法 咪咪大而不垂
  10. 如何在动态创建的HTML标签内容中避免单引