implement distanceTo and courseTo

This commit is contained in:
2022-12-14 13:21:16 +01:00
parent 787cd5e72b
commit 49145d2b0f
3 changed files with 35 additions and 5 deletions
+28
View File
@@ -11,6 +11,34 @@
#include "route.h"
double Point::distanceTo(const Point &point) const {
// distance = sqrt(dx * dx + dy * dy)
// mit distance: Entfernung in km
// dx = 111.3 * cos(lat) * (lon1 - lon2)
// lat = (lat1 + lat2) / 2 * 0.01745
// dy = 111.3 * (lat1 - lat2)
// lat1, lat2, lon1, lon2: Breite, Länge in Grad
double lat = (this->lat + point.lat) / 2 * ROUTE_DEGREE_TO_RADIANT;
double dy = ROUTE_DISTANCE_BETWEEN_LATITUDE * (this->lat - point.lat);
double dx = ROUTE_DISTANCE_BETWEEN_LATITUDE * cos(lat) * (this->lon - point.lon);
return sqrt(dx * dx + dy * dy);
}
double Point::courseTo(const Point &point) const {
double phi = log( tan(point.lat * ROUTE_DEGREE_TO_RADIANT / 2 + ROUTE_PI / 4) / tan(this->lat * ROUTE_DEGREE_TO_RADIANT / 2 + ROUTE_PI / 4) );
double lon = (this->lon * ROUTE_DEGREE_TO_RADIANT - point.lon * ROUTE_DEGREE_TO_RADIANT);
double res = atan2(lon, phi) / ROUTE_DEGREE_TO_RADIANT;
// if (res < 0)
// res += 360.0;
return res;
}
Route::Route() {
}