【PHP実践|実務向け】PHPで実現する幾何学計算:3次元空間における中点と距離の算出

導入

業務システムにおいて、物流の配送ルート最適化や、3D空間を扱うシミュレーション、あるいは単純な位置情報の計算など、数学的な演算が必要になる場面は少なくありません。PHPはWeb開発が主流ですが、標準関数を組み合わせることで、こうした幾何学計算も効率的に実装可能です。今回は、現場で役立つ「3次元空間での中点計算」と「2点間の距離算出」という基本的なTipsを紹介します。

基礎知識

幾何学計算の基本は、座標を配列やオブジェクトとして扱うことです。3次元空間の点は、一般的に(x, y, z)の3つの値で構成されます。
中点とは、2つの点の中間に位置する点のことで、それぞれの座標成分を足して2で割ることで算出できます。
2点間の距離は「ピタゴラスの定理(三平方の定理)」を応用します。各軸の差の2乗を足し合わせ、その平方根をとることで導き出されます。PHPには、累乗を扱うpow()関数と、平方根を求めるsqrt()関数が標準で備わっているため、これらを使うのが定石です。

実装/解決策

実務では、座標データが配列で渡されることが多いため、汎用的な関数として実装するのがベストです。引数として座標を受け取り、計算結果を返す関数を作成しましょう。また、PHP 7以降であれば型宣言を導入し、入力データが正しい数値型であることを保証すると、より安全なコードになります。

サンプルプログラム

以下のコードは、3次元空間上の2点間の中点計算と距離計算を実装した例です。

  • 2点間の中点座標を算出する関数
  • /
    function get_middle_point(array $p1, array $p2): array {
    // 各軸ごとの平均値を算出
    return [
    ($p1[0] + $p2[0]) / 2,
    ($p1[1] + $p2[1]) / 2,
    ($p1[2] + $p2[2]) / 2
    ];
    }

    /

    • 3次元空間上の2点間の距離を算出する関数

    /
    function get_distance(array $p1, array $p2): float {
    // sqrt( (x2-x1)^2 + (y2-y1)^2 + (z2-z1)^2 )
    $sum = pow($p2[0] – $p1[0], 2) + pow($p2[1] – $p1[1], 2) + pow($p2[2] – $p1[2], 2);
    return sqrt($sum);
    }

    // 座標の定義
    $pointA = [5, 10, 3];
    $pointB = [20, 2, 10];

    // 実行と出力
    $middle = get_middle_point($pointA, $pointB);
    $dist = get_distance($pointA, $pointB);

    echo “中点: ” . implode(‘, ‘, $middle) . PHP_EOL;
    echo “距離: ” . $dist . PHP_EOL;
    ?>

    応用・注意点

    現場で活用する際、以下の点に注意してください。
    1. 浮動小数点数の精度: 非常に精密な計算が必要な場合、PHPの浮動小数点数の精度(IEEE 754)では誤差が生じることがあります。その場合は、bcmath拡張機能を使用し、文字列として計算を行うことを検討してください。
    2. バリデーション: 入力された配列の要素数が3つ未満だった場合、Undefined offsetエラーが発生します。実務コードでは、事前にcount()関数で要素数を確認するチェック処理を必ず含めてください。
    3. パフォーマンス: 大量の座標計算をループ内で行う場合、関数呼び出しのオーバーヘッドを避けるため、計算処理をインライン化するなどの最適化が有効なケースもあります。ただし、可読性を優先し、まずは関数化してテスト可能な状態に保つことを推奨します。

    タイトルとURLをコピーしました