C++ で 2 点間の距離を計算する

胡金庫 2023年10月12日
  1. C++ で std::sqrt および std::pow 関数を使用して 2 点間の距離を計算する
  2. C++ で std::hypot 関数を使用して 2 点間の距離を計算する
C++ で 2 点間の距離を計算する

この記事では、C++ で 2 点間の距離を計算する方法を紹介します。

C++ で std::sqrt および std::pow 関数を使用して 2 点間の距離を計算する

一般に、ピタゴラスの定理を適用することにより、2 点間の距離を計算できます。したがって、2つのポイントの x および y パラメータがわかっている場合、それらの間の距離は、水平距離と垂直距離の合計からの平方根に等しく、それぞれが 2 の累乗になります。水平距離と垂直距離自体は、2つの点を結ぶ線の周りに直角三角形を作成することで簡単に計算できます。後者は斜辺です。

この場合、std 名前空間の下で C++ で使用可能な C 標準数学ライブラリ関数を利用します。つまり、指定された引数の平方根を計算する sqrt 関数と、指定された数に引き上げられる数を計算する pow です。パワー。これらの関数は両方とも、浮動小数点数を float または double タイプとして返​​すことに注意してください。

#include <cmath>
#include <iomanip>
#include <iostream>
#include <vector>

using std::copy;
using std::cout;
using std::endl;
using std::vector;

double calculateDistance(std::pair<int, int> &x, std::pair<int, int> &y) {
  return sqrt(pow(x.first - y.first, 2) + pow(x.second - y.second, 2));
}

double calculateDistance(std::pair<double, double> &x,
                         std::pair<double, double> &y) {
  return sqrt(pow(x.first - y.first, 2) + pow(x.second - y.second, 2));
}

int main() {
  vector<std::pair<int, int>> vec = {
      {3, 4},
      {4, 3},
  };

  cout << "Distance between points (" << vec[0].first << ", " << vec[0].second
       << ") and (" << vec[1].first << ", " << vec[1].second << ") is "
       << calculateDistance(vec[0], vec[1]) << endl;

  return EXIT_SUCCESS;
}

出力:

Distance between points (3, 4) and (4, 3) is 1.41421

次のサンプルコードに示すように、浮動小数点数で表される座標を持つポイントに対して、関数のオーバーロードされたバリアントを実装できることに注意してください。

#include <cmath>
#include <iomanip>
#include <iostream>
#include <vector>

using std::copy;
using std::cout;
using std::endl;
using std::vector;

double calculateDistance(std::pair<int, int> &x, std::pair<int, int> &y) {
  return sqrt(pow(x.first - y.first, 2) + pow(x.second - y.second, 2));
}

double calculateDistance(std::pair<double, double> &x,
                         std::pair<double, double> &y) {
  return sqrt(pow(x.first - y.first, 2) + pow(x.second - y.second, 2));
}

int main() {
  vector<std::pair<double, double>> vec2 = {
      {4.0, 4.5},
      {9.0, 4.5},
  };

  cout << "Distance between points (" << vec2[0].first << ", " << vec2[0].second
       << ") and (" << vec2[1].first << ", " << vec2[1].second << ") is "
       << calculateDistance(vec2[0], vec2[1]) << endl;

  return EXIT_SUCCESS;
}

出力:

Distance between points (4, 4.5) and (9, 4.5) is 5

C++ で std::hypot 関数を使用して 2 点間の距離を計算する

または、2つまたは 3つの数値の 2 乗の合計の平方根を計算する数学ライブラリ関数 std::hypot を使用することもできます。この方法は、エンドユーザーが自分で実装するのが難しい堅牢な実装とエラー報告を保証するため、距離を計算するための推奨される方法です。対応する座標の差を引数として渡し、戻り値を計算結果として使用する必要があることに注意してください。

#include <cmath>
#include <iomanip>
#include <iostream>
#include <vector>

using std::copy;
using std::cout;
using std::endl;
using std::vector;

int main() {
  vector<std::pair<double, double>> vec2 = {
      {4.0, 4.5},
      {9.0, 4.5},
  };

  cout << "Distance between points (" << vec2[0].first << ", " << vec2[0].second
       << ") and (" << vec2[1].first << ", " << vec2[1].second << ") is "
       << std::hypot(vec2[0].first - vec2[1].first,
                     vec2[0].second - vec2[1].second)
       << endl;

  return EXIT_SUCCESS;
}

出力:

Distance between points (4, 4.5) and (9, 4.5) is 5
著者: 胡金庫
胡金庫 avatar 胡金庫 avatar

DelftStack.comの創設者です。Jinku はロボティクスと自動車産業で8年以上働いています。自動テスト、リモートサーバーからのデータ収集、耐久テストからのレポート作成が必要となったとき、彼はコーディングスキルを磨きました。彼は電気/電子工学のバックグラウンドを持っていますが、組み込みエレクトロニクス、組み込みプログラミング、フロントエンド/バックエンドプログラミングへの関心を広げています。

LinkedIn Facebook

関連記事 - C++ Math