Расчёт расстояния между точками А, Б, В

282
13 декабря 2017, 23:51

У меня есть такой алгоритм, который показывает мне сумму расстояния всех Waypoints вместе взятых с помощью Geographic Libs.

double sum = 0.0;
    const Geodesic& geod = Geodesic::WGS84();
    for (int i = 1; i < MapView->waypointData.size(); i++){
        double s12;
        geod.Inverse(MapView->waypointData[i-1].lat, MapView->waypointData[i-1].lng, MapView->waypointData[i].lat, MapView->waypointData[i].lng, s12);
        sum += s12;
    }

Также я могу узнать позицию, где находится мой дрон с помощью double latitude_wgs84_radians, double longitude_wgs84_radians.

Хотелось бы посчитать расстояние, которое пролетел дрон, от точки к точки складывая это также в сумму. Не могу сообразить как это сделать.

Answer 1

По теореме великих кругов:

  • https://en.wikipedia.org/wiki/Great-circle_distance

  • https://ru.wikipedia.org/wiki/%D0%9E%D1%80%D1%82%D0%BE%D0%B4%D1%80%D0%BE%D0%BC%D0%B8%D1%8F

Кусочек кода:

total+=(double)6371.01*2.0*M_PI/360.0*acos(
 sin((double)prev_lat/180.0*M_PI)*sin((double)lat/180.0*M_PI)
+cos((double)prev_lat/180.0*M_PI)*cos((double)lat/180.0*M_PI)
 *cos((double)prev_lon/180.0*M_PI-(double)lon/180.0*M_PI)
)*180.0/M_PI;

Где координаты - это lat/lon и prev_lat/prev_lon, т.е. текущая и предыдущая точка. Просто в цикле проходимся по всем вейпоинтам и суммируем. Результат примерный, погрешность в 0.5%

READ ALSO
Что делает функция select? [требует правки]

Что делает функция select? [требует правки]

Не нашла нормальной информации по этой функцииВезде не объясняется ее смысл

284
puts выводит кракозябры

puts выводит кракозябры

Только начал изучать операции над строками в с++ и столкнулся с проблемой вывода непонятных символовВозможно это из-за указателей ( не совсем...

247
Почему выдает ошибку? - C++

Почему выдает ошибку? - C++

Вот исходный код:

290
Как правильно считывать в структуру?

Как правильно считывать в структуру?

Есть текстовый файл 1txt

275