C++ で 2 点間の距離を計算する
胡金庫
2023年10月12日
この記事では、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
著者: 胡金庫