Commit 725a5969 authored by Léo-Paul Géneau's avatar Léo-Paul Géneau 👾

Refactor projection

parent 87d8e505
...@@ -38,6 +38,9 @@ static std::future<std::shared_ptr<System>> fut; ...@@ -38,6 +38,9 @@ static std::future<std::shared_ptr<System>> fut;
static const float DEFAULT_RADIUS = 100; static const float DEFAULT_RADIUS = 100;
static const float EARTH_RADIUS = 6371000; static const float EARTH_RADIUS = 6371000;
static const float ADDED_DISTANCE = (2 * DEFAULT_RADIUS) / EARTH_RADIUS;
static const double COS_ADDED_DISTANCE = cos(ADDED_DISTANCE);
static const double SIN_ADDED_DISTANCE = sin(ADDED_DISTANCE);
static int mavsdk_started = 0; static int mavsdk_started = 0;
static Telemetry::Position origin; static Telemetry::Position origin;
...@@ -117,15 +120,16 @@ static double bearing(double lat1, double lon1, double lat2, double lon2) { ...@@ -117,15 +120,16 @@ static double bearing(double lat1, double lon1, double lat2, double lon2) {
static Coordinates project(Coordinates destination, double bearing) { static Coordinates project(Coordinates destination, double bearing) {
double laRad = toRad(destination.latitude); double laRad = toRad(destination.latitude);
double sinLa = sin(laRad);
double cosLa = cos(laRad);
double loRad = toRad(destination.longitude); double loRad = toRad(destination.longitude);
float addedDistance = (2 * DEFAULT_RADIUS) / EARTH_RADIUS; double newLa = asin(sinLa * COS_ADDED_DISTANCE
double newLa = asin(sin(laRad) * cos(addedDistance) + cosLa * SIN_ADDED_DISTANCE * cos(bearing));
+ cos(laRad) * sin(addedDistance) * cos(bearing));
Coordinates projected{ Coordinates projected{
toDeg(newLa), toDeg(newLa),
toDeg(loRad + atan2( toDeg(loRad + atan2(
sin(bearing) * sin(addedDistance) * cos(laRad), sin(bearing) * SIN_ADDED_DISTANCE * cosLa,
cos(addedDistance) - sin(laRad) * sin(newLa) COS_ADDED_DISTANCE - sinLa * sin(newLa)
)), )),
}; };
return projected; return projected;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment