在 C++ 中計算兩點之間的距離
本文將介紹如何在 C++ 中計算兩點之間的距離。
在 C++ 中使用 std::sqrt
和 std::pow
函式計算兩點之間的距離
通常,我們可以應用勾股定理來計算兩點之間的距離。因此,如果我們知道兩個點的 x
和 y
引數,它們之間的距離等於水平和垂直距離總和的平方根,每個距離都增加到 2
的冪。水平和垂直距離本身可以通過圍繞連線兩點的線構建一個直角三角形來輕鬆計算,其中後者是斜邊。
在這種情況下,我們利用 C++ 中 std
名稱空間下的 C 標準數學庫函式,即計算給定引數的平方根的 sqrt
函式和計算給定引數的平方根的 pow
函式。力量。請注意,這兩個函式都以 float
或 double
型別返回浮點數。
#include <iostream>
#include <vector>
#include <iomanip>
#include <cmath>
using std::cout; using std::endl;
using std::vector; using std::copy;
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 <iostream>
#include <vector>
#include <iomanip>
#include <cmath>
using std::cout; using std::endl;
using std::vector; using std::copy;
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
函式計算兩點之間的距離
或者,我們可以使用數學庫函式 - std::hypot
,它計算兩個或三個數字的平方和的平方根。此方法是計算距離的推薦方法,因為它保證了終端使用者難以自行實現的穩健實現和錯誤報告。請注意,我們需要將對應座標的差值作為引數傳遞,並將返回值作為計算結果。
#include <iostream>
#include <vector>
#include <iomanip>
#include <cmath>
using std::cout; using std::endl;
using std::vector; using std::copy;
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
Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.
LinkedIn