Maison  >  Article  >  développement back-end  >  PHP détermine si un point se trouve à l'intérieur ou à l'extérieur de la zone du polygone

PHP détermine si un point se trouve à l'intérieur ou à l'extérieur de la zone du polygone

藏色散人
藏色散人avant
2019-12-17 17:32:164831parcourir

PHP détermine si le point est à l'intérieur ou à l'extérieur de la zone du polygone

Selon la méthode des rayons de la connaissance mathématique, si le nombre de points que le rayon coupe avec le polygone géométrique est un nombre impair, il est à l'intérieur de la géométrie ;

Un nombre pair En externe

/**
 * 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;
}

Test Array

$arr = [
    [&#39;9.4&#39;,&#39;12.04&#39;],
    [&#39;6.68&#39;,&#39;8.61&#39;],
    [&#39;9.05&#39;,&#39;6.06&#39;],
    [&#39;6.24&#39;,&#39;3.87&#39;],
    [&#39;10.02&#39;,&#39;2.55&#39;],
 
    [&#39;14.06&#39;,&#39;4.13&#39;],
 
    [&#39;16.35&#39;,&#39;7.56&#39;],
 
    [&#39;11.69&#39;,&#39;8.35&#39;],
];
 
$x =15.73;
$y = 5.62;
//在外
$x = 9.97;
$y = 4.96; //在内

 PHP détermine si un point se trouve à lintérieur ou à lextérieur de la zone du polygone

Pour plus de connaissances sur PHP, veuillez visiter Tutoriel PHP !

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer