Berechnen des Abstands zwischen zwei Punkten in C++
-
Verwendung der Funktionen
std::sqrt
undstd::pow
zur Berechnung des Abstands zwischen zwei Punkten in C++ -
Verwendung der Funktion
std::hypot
zur Berechnung des Abstands zwischen zwei Punkten in C++
In diesem Artikel erfahren Sie, wie Sie den Abstand zwischen zwei Punkten in C++ berechnen.
Verwendung der Funktionen std::sqrt
und std::pow
zur Berechnung des Abstands zwischen zwei Punkten in C++
Im Allgemeinen können wir den Abstand zwischen zwei Punkten berechnen, indem wir den Satz des Pythagoras anwenden. Wenn wir also die Parameter x
und y
von zwei Punkten kennen, entspricht der Abstand zwischen ihnen der Quadratwurzel aus der Summe der horizontalen und vertikalen Distanzen, jeweils potenziert mit 2
. Horizontale und vertikale Abstände selbst können leicht berechnet werden, indem ein rechtwinkliges Dreieck um die Verbindungslinie der beiden Punkte konstruiert wird, wobei letzterer die Hypotenuse ist.
In diesem Fall verwenden wir C-Standard-Mathematikbibliotheksfunktionen, die in C++ unter dem Namensraum std
verfügbar sind, nämlich die Funktion sqrt
, die die Quadratwurzel des gegebenen Arguments berechnet, und pow
, die die Zahl berechnet, die zum gegebenen Leistung. Beachten Sie, dass diese beiden Funktionen Gleitkommazahlen als Typ float
oder double
zurückgeben.
#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;
}
Ausgabe:
Distance between points (3, 4) and (4, 3) is 1.41421
Beachten Sie, dass wir eine überladene Variante der Funktion für Punkte implementieren können, deren Koordinaten durch Gleitkommazahlen dargestellt werden, wie im folgenden Beispielcode gezeigt.
#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;
}
Ausgabe:
Distance between points (4, 4.5) and (9, 4.5) is 5
Verwendung der Funktion std::hypot
zur Berechnung des Abstands zwischen zwei Punkten in C++
Alternativ können wir eine mathematische Bibliotheksfunktion verwenden - std::hypot
, die die Quadratwurzel der Summe der Quadrate von zwei oder drei Zahlen berechnet. Diese Methode wird empfohlen, um die Entfernung zu berechnen, da sie eine robuste Implementierung und Fehlerberichterstattung garantiert, die für den Endbenutzer schwieriger zu implementieren wäre. Beachten Sie, dass wir die Differenz der entsprechenden Koordinaten als Argumente übergeben und den Rückgabewert als Berechnungsergebnis verwenden müssen.
#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;
}
Ausgabe:
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