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

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

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

 

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

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

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/112354.html原文链接:https://javaforall.net

(0)
上一篇 2021年11月9日 下午12:00
下一篇 2021年11月9日 下午12:00


相关推荐

  • 时间复杂度是什么_时间复杂度的表示方法

    时间复杂度是什么_时间复杂度的表示方法-宝宝为啥听不懂他们在讨论的时间复杂度0.0-我怎么知道这个算法运行得比那个算法快0.0-我究竟会不会超时0.0-我为什么还会超时0.0-时间复杂度怎么算0.0在别人还不会求时间复杂度的时候而你会了是不是很酷在别人都会求时间复杂度的时候而你不会是不是很尴尬千里之行始于足下希望这篇文章能祝你一臂之力=w= 此篇详解,希望能帮助各位稍微解决一下不解=w=…

    2025年6月6日
    5
  • 计算机文件拒绝被访问,文件访问被拒绝_电脑文件访问被拒绝,需要权限

    计算机文件拒绝被访问,文件访问被拒绝_电脑文件访问被拒绝,需要权限电脑文件访问被拒绝 需要权限来执行操作电脑在清理系统垃圾时 有些文件无法删除 提示访问被拒绝 这是怎么回事 该怎么办 下面分享的是 Win7 文件夹访问被拒绝的解决方法 1 右键点击提示我们需要权限的文件夹 然后点击 属性 选项 2 进入文件夹属性界面在上方菜单栏处 找到 安全 选项 然后点击下方的高级选项 3 进入高级选项 点击上方 所有者 然后点击下方的编辑选项 4 进入所有者编辑界面 点击下方

    2025年8月1日
    7
  • OpenCV里IplImage的widthStep参数

    OpenCV里IplImage的widthStep参数昨儿在Moto写程序时遇到的问题.当时是要切人脸图片,比较谨慎,做完了想看一下切的效果就写了个程序显示出来,结果很令人诧异,就试了六幅图结果有五幅完全不对头,都产生了错位,每行错开一点,最后看不出来是人脸了…这下烦了,要是自己写的那个切割工具出问题的话,那眼花缭乱的切了两个多小时的工作都白费了,没办法,找原因吧.又仔细的切了几幅,还是不行,奇怪的是有个别图像显示是正确的.其实工作很简单,就是从一幅

    2022年5月28日
    33
  • 关于安装busybox问题

    关于安装busybox问题我的手机是小米5安装busybox1.首先要手机要root2.然后下载busybox安装器(这个容易找)3.解锁system分区(可以下载syslock,这软件可以解锁system文件)点击下载syslock如果不下载system,会安装失败;4.解锁重启后就可以安装了…

    2022年7月25日
    15
  • uboot之—make smdk2410_config命令详细解析

    uboot之—make smdk2410_config命令详细解析

    2022年2月22日
    44
  • TensorFlow绘制loss/accuracy曲线[通俗易懂]

    TensorFlow绘制loss/accuracy曲线[通俗易懂]1.多曲线1.1使用pyplot方式importnumpyasnpimportmatplotlib.pyplotaspltx=np.arange(1,11,1)plt.plot(x,x*2,label=”First”)plt.plot(x,x*3,label=”Second”)plt.plot(x,x*4,label=”Thi…

    2025年7月26日
    5

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号