Calcular la distancia entre dos puntos en C++

Jinku Hu 12 octubre 2023
  1. Utilice las funciones std::sqrt y std::pow para calcular la distancia entre dos puntos en C++
  2. Utilice la función std::hypot para calcular la distancia entre dos puntos en C++
Calcular la distancia entre dos puntos en C++

Este artículo presentará cómo calcular la distancia entre dos puntos en C++.

Utilice las funciones std::sqrt y std::pow para calcular la distancia entre dos puntos en C++

Generalmente, podemos calcular la distancia entre dos puntos aplicando el teorema de Pitágoras. Entonces, si conocemos los parámetros x e y de dos puntos, la distancia entre ellos es igual a la raíz cuadrada de la suma de las distancias horizontal y vertical, cada una elevada a la potencia de 2. Las distancias horizontales y verticales en sí mismas se pueden calcular fácilmente construyendo un triángulo rectángulo alrededor de la línea que conecta los dos puntos, donde este último es la hipotenusa.

En este caso, utilizamos las funciones de la biblioteca matemática estándar de C disponibles en C++ en el espacio de nombres std, es decir, la función sqrt que calcula la raíz cuadrada del argumento dado y pow, que calcula el número elevado al valor dado. energía. Tenga en cuenta que ambas funciones devuelven números de punto flotante como tipos float o 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;
}

Producción :

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

Observe que podemos implementar una variante sobrecargada de la función para puntos con coordenadas representadas con números de punto flotante, como se demuestra en el siguiente código de ejemplo.

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

Producción :

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

Utilice la función std::hypot para calcular la distancia entre dos puntos en C++

Alternativamente, podemos usar una función de biblioteca matemática - std::hypot que calcula la raíz cuadrada de la suma de los cuadrados de dos o tres números. Este método es una forma recomendada de calcular la distancia, ya que garantiza una implementación sólida y un informe de errores que sería más difícil para el usuario final implementar por su cuenta. Observe que debemos pasar la diferencia de las coordenadas correspondientes como argumentos y usar el valor de retorno como resultado del cálculo.

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

Producción :

Distance between points (4, 4.5) and (9, 4.5) is 5
Autor: 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

Artículo relacionado - C++ Math