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
        チュートリアルを楽しんでいますか? <a href="https://www.youtube.com/@delftstack/?sub_confirmation=1" style="color: #a94442; font-weight: bold; text-decoration: underline;">DelftStackをチャンネル登録</a> して、高品質な動画ガイドをさらに制作するためのサポートをお願いします。 Subscribe
    
著者: 胡金庫
    
