Calcule a distância entre dois pontos em C++

Jinku Hu 12 outubro 2023
  1. Use as funções std::sqrt e std::pow para calcular a distância entre dois pontos em C++
  2. Use a função std::hypot para calcular a distância entre dois pontos em C++
Calcule a distância entre dois pontos em C++

Este artigo irá apresentar como calcular a distância entre dois pontos em C++.

Use as funções std::sqrt e std::pow para calcular a distância entre dois pontos em C++

Geralmente, podemos calcular a distância entre dois pontos aplicando o teorema de Pitágoras. Portanto, se conhecermos os parâmetros x e y de dois pontos, a distância entre eles é igual à raiz quadrada da soma das distâncias horizontal e vertical, cada uma elevada à potência de 2. As próprias distâncias horizontais e verticais podem ser facilmente calculadas construindo um triângulo retângulo ao redor da linha que conecta os dois pontos, onde o último é a hipotenusa.

Neste caso, utilizamos funções de biblioteca matemática padrão C disponíveis em C++ sob o namespace std, ou seja, a função sqrt que calcula a raiz quadrada do argumento dado e pow, que calcula o número elevado para o dado potência. Observe que ambas as funções retornam números de ponto flutuante como tipos 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;
}

Resultado:

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

Observe que podemos implementar uma variante sobrecarregada da função para pontos com coordenadas representadas com números de ponto flutuante, conforme demonstrado no código de exemplo a seguir.

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

Resultado:

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

Use a função std::hypot para calcular a distância entre dois pontos em C++

Alternativamente, podemos usar uma função de biblioteca matemática - std::hypot que calcula a raiz quadrada da soma dos quadrados de dois ou três números. Este método é a maneira recomendada de calcular a distância, pois garante a implementação robusta e o relatório de erros que seria mais difícil para o usuário final implementar sozinho. Observe que precisamos passar a diferença das coordenadas correspondentes como argumentos e usar o valor de retorno como o resultado do 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;
}

Resultado:

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

Artigo relacionado - C++ Math