ホームページ  >  記事  >  バックエンド開発  >  PHP は、ポイントがポリゴン領域の内側にあるか外側にあるかを判断します。

PHP は、ポイントがポリゴン領域の内側にあるか外側にあるかを判断します。

藏色散人
藏色散人転載
2019-12-17 17:32:164816ブラウズ

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 = [
    [&#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 は、ポイントがポリゴン領域の内側にあるか外側にあるかを判断します。

PHP関連の知識の詳細については、次のサイトを参照してください。 PHP チュートリアル !

以上がPHP は、ポイントがポリゴン領域の内側にあるか外側にあるかを判断します。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はcsdn.netで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。