Calculer la distance entre deux points en C++

Jinku Hu 12 octobre 2023
  1. Utilisez les fonctions std::sqrt et std::pow pour calculer la distance entre deux points en C++
  2. Utilisez la fonction std::hypot pour calculer la distance entre deux points en C++
Calculer la distance entre deux points en C++

Cet article présentera comment calculer la distance entre deux points en C++.

Utilisez les fonctions std::sqrt et std::pow pour calculer la distance entre deux points en C++

Généralement, on peut calculer la distance entre deux points en appliquant le théorème de Pythagore. Ainsi, si nous connaissons les paramètres x et y de deux points, la distance entre eux est égale à la racine carrée de la somme des distances horizontales et verticales, chacune élevée à la puissance 2. Les distances horizontales et verticales elles-mêmes peuvent être facilement calculées en construisant un triangle rectangle autour de la ligne reliant les deux points, où ce dernier est l’hypoténuse.

Dans ce cas, nous utilisons les fonctions de bibliothèque mathématique standard C disponibles en C++ sous l’espace de noms std, à savoir la fonction sqrt qui calcule la racine carrée de l’argument donné et pow, qui calcule le nombre élevé au donné Puissance. Notez que ces deux fonctions renvoient des nombres à virgule flottante sous forme de types float ou 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;
}

Production:

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

Notez que nous pouvons implémenter une variante surchargée de la fonction pour les points dont les coordonnées sont représentées par des nombres à virgule flottante, comme illustré dans l’exemple de code suivant.

#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;
}

Production:

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

Utilisez la fonction std::hypot pour calculer la distance entre deux points en C++

Alternativement, nous pouvons utiliser une fonction de bibliothèque mathématique - std::hypot qui calcule la racine carrée de la somme des carrés de deux ou trois nombres. Cette méthode est recommandée pour calculer la distance car elle garantit une mise en œuvre robuste et un rapport d’erreurs qui serait plus difficile pour l’utilisateur final à mettre en œuvre lui-même. Notez que nous devons passer la différence des coordonnées correspondantes en tant qu’arguments et utiliser la valeur de retour comme résultat du calcul.

#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;
}

Production:

Distance between points (4, 4.5) and (9, 4.5) is 5
Auteur: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

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 Facebook

Article connexe - C++ Math