код, указанный выше, имеет несколько проблем, которые могли бы сделать его непригодным:
«же склон» толерантность измеряет разницу в градиенте, а не под углом, так что нне к NNW считается гораздо больше разницы, чем NE до SE (при условии, что ось y работает на север-юг).
Одним из способов решения этой проблемы является толерантность к измерению того, как точечный продукт двух сегментов сравнивается с продуктом их длины. (Это может помочь понять, что точечный продукт двух векторов является произведением их длин и косинуса угла между ними.) Однако см. Следующий пункт.
Рассматривается только ошибка склона, а не погрешность положения, поэтому длинный сегмент ENE, за которым следует длинный сегмент ESE, также сжимается до одного сегмента как цепочка коротких сегментов, чередующихся между ENE и ESE.
Подход, о котором я думал, будет состоять в том, чтобы посмотреть, что делают векторные графические приложения, чтобы преобразовать список координат курсора в последовательность кривых. Например. см. статью bezier-utils.cpp от lib2geom. Обратите внимание, что (i) он почти полностью основан на позиции, а не основан на указаниях; и (ii) он дает кривые кубического безрезультата как выходную, а не полилинию, хотя вы можете использовать тот же подход, чтобы дать выход полилинии, если это предпочтительнее (в этом случае шаг Ньютона-Рафсона становится по существу просто простым точечным продуктом).
Запись одного местоположения - 4 поплавки или 16 байт. Каждые две секунды в течение двух часов составляют 115 кб. Для какой платформы это важно? Даже для мобильного телефона это ничего. –
@Pavel: зависит от количества используемых спутников (до 12).Предложение NMEA $ GPGSA позволяет использовать до 12 спутников, а также все другие вспомогательные данные – 2009-12-29 15:47:26
. Моя проблема не с хранением, а с дисплеем. Если я хочу отобразить маршрут на веб-сайте (через карты Google), я не хочу отображать 1000 точек данных. –