在 C++ 中計算兩點之間的距離

Jinku Hu 2023年10月12日
  1. 在 C++ 中使用 std::sqrtstd::pow 函式計算兩點之間的距離
  2. 在 C++ 中使用 std::hypot 函式計算兩點之間的距離
在 C++ 中計算兩點之間的距離

本文將介紹如何在 C++ 中計算兩點之間的距離。

在 C++ 中使用 std::sqrtstd::pow 函式計算兩點之間的距離

通常,我們可以應用勾股定理來計算兩點之間的距離。因此,如果我們知道兩個點的 xy 引數,它們之間的距離等於水平和垂直距離總和的平方根,每個距離都增加到 2 的冪。水平和垂直距離本身可以通過圍繞連線兩點的線構建一個直角三角形來輕鬆計算,其中後者是斜邊。

在這種情況下,我們利用 C++ 中 std 名稱空間下的 C 標準數學庫函式,即計算給定引數的平方根的 sqrt 函式和計算給定引數的平方根的 pow 函式。力量。請注意,這兩個函式都以 floatdouble 型別返回浮點數。

#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 函式計算兩點之間的距離

或者,我們可以使用數學庫函式 - 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
作者: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

DelftStack.com 創辦人。Jinku 在機器人和汽車行業工作了8多年。他在自動測試、遠端測試及從耐久性測試中創建報告時磨練了自己的程式設計技能。他擁有電氣/ 電子工程背景,但他也擴展了自己的興趣到嵌入式電子、嵌入式程式設計以及前端和後端程式設計。

LinkedIn Facebook

相關文章 - C++ Math