Calcola la distanza tra due punti in C++
-
Usa le funzioni
std::sqrt
estd::pow
per calcolare la distanza tra due punti in C++ -
Usa la funzione
std::hypot
per calcolare la distanza tra due punti in C++
Questo articolo introdurrà come calcolare la distanza tra due punti in C++.
Usa le funzioni std::sqrt
e std::pow
per calcolare la distanza tra due punti in C++
In generale, possiamo calcolare la distanza tra due punti applicando il teorema di Pitagora. Quindi, se conosciamo i parametri x
e y
di due punti, la loro distanza è uguale alla radice quadrata della somma delle distanze orizzontale e verticale, ciascuna elevata alla potenza di 2
. Le stesse distanze orizzontali e verticali possono essere facilmente calcolate costruendo un triangolo rettangolo attorno alla retta che collega i due punti, dove quest’ultimo è l’ipotenusa.
In questo caso, utilizziamo le funzioni della libreria matematica standard C disponibili in C++ sotto lo spazio dei nomi std
, vale a dire la funzione sqrt
che calcola la radice quadrata dell’argomento dato e pow
, che calcola il numero elevato al dato energia. Nota che entrambe queste funzioni restituiscono numeri in virgola mobile come tipi 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;
}
Produzione:
Distance between points (3, 4) and (4, 3) is 1.41421
Si noti che è possibile implementare una variante di overload della funzione per i punti con coordinate rappresentate con numeri a virgola mobile, come illustrato nel codice di esempio seguente.
#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;
}
Produzione:
Distance between points (4, 4.5) and (9, 4.5) is 5
Usa la funzione std::hypot
per calcolare la distanza tra due punti in C++
In alternativa, possiamo usare una funzione di libreria matematica - std::hypot
che calcola la radice quadrata della somma dei quadrati di due o tre numeri. Questo metodo è consigliato per calcolare la distanza in quanto garantisce l’implementazione robusta e la segnalazione degli errori che sarebbe più difficile per l’utente finale implementare da solo. Si noti che è necessario passare la differenza delle coordinate corrispondenti come argomenti e utilizzare il valore restituito come risultato del calcolo.
#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;
}
Produzione:
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 Facebook