GPS - как узнать, все-ли точки на прямой?

Общие вопросы программирования, алгоритмы и т.п.

Модератор: Модераторы

GPS - как узнать, все-ли точки на прямой?

Сообщение VirtUX » 13.03.2014 12:55:08

Есть БД со списком GPS-координат движения объекта. В Яндекс.Карты API строить кривую по координатам можно на основе не более 100 точек. Чтоб хоть немного обойти ограничение - хочу исключить точки, находящиеся на одной прямой. Собственно вопрос как вычислить, что между точками А и В, Б-точка также на прямой, либо нет? Я вижу решение в:
- рассчитать расстояния между А и Б, и между Б и В;
- рассчитать расстояние между А и В;
- если АБ + БВ = АВ (+/- погрешность), то это прямая, и точку Б можно исключить из кривой.
Как рассчитать расстояние между двух точек по GPS-координатам (например: А = 40.023568,53.782569; Б = 40.023789,53782956)? Координаты взяты для примера.
Или каким еще способом (с объяснением способа расчета) определить принадлежность трех точек - одной прямой, с некоторой погрешностью?
Спасибо!

Добавлено спустя 1 минуту 28 секунд:
Чуть не забыл. Высоту точки над уровнем моря можно игнорировать, т.к. расстояния между точек очень малы.
Аватара пользователя
VirtUX
энтузиаст
 
Сообщения: 880
Зарегистрирован: 05.02.2008 10:52:19
Откуда: Крым, Алушта

Re: GPS - как узнать, все-ли точки на прямой?

Сообщение sign » 13.03.2014 13:26:46

Классика.

1. Получив уравнение прямой, проходящей через две точки, подставьте значения координат третьей точки в него вместо переменных х и у. Если равенство получилось верное, значит все три точки лежат на одной прямой. Точно так же можете проверять принадлежность этой прямой других точек.

2. Проверьте принадлежность всех точек прямой, проверив равенство тангенсов углов наклона соединяющих их отрезков. Для этого проверьте, будет ли верным равенство (х2-х1)/(х3-х1)=(у2-у1)/(у3-у1)=(z2-z1)/(z3-z1). Если один из знаменателей равен нулю, то для принадлежности всех точек одной прямой должно выполняться условие х2-х1=х3-х1, у2-у1=у3-у1, z2-z1=z3-z1.

3. Еще один способ проверить принадлежность трех точек прямой – посчитайте площадь треугольника, который они образуют. Если все точки лежат на прямой, то его площадь будет равна нулю. Подставьте значения координат в формулу: S=1/2((х1-х3)(у2-у3)-(х2-х3)(у1-у3)). Если после всех вычислений вы получили ноль - значит, три точки лежат на одной прямой.
sign
энтузиаст
 
Сообщения: 1131
Зарегистрирован: 30.08.2009 09:20:53

Re: GPS - как узнать, все-ли точки на прямой?

Сообщение Дож » 13.03.2014 15:32:33

sign, тут же не декартовы координаты, а широта и долгота.
Аватара пользователя
Дож
энтузиаст
 
Сообщения: 899
Зарегистрирован: 12.10.2008 16:14:47

Re: GPS - как узнать, все-ли точки на прямой?

Сообщение VirtUX » 13.03.2014 15:52:57

2 sign - спасибо за формулы.
С площадями и углами не совсем удобно получилось :( Если все точки лежат на одной прямой, то нет возможности узнать крайнюю при начале движения в обратную сторону без дополнительных проверок. Все же с расчетом расстояний получается точнее.
Изображение

Добавлено спустя 3 минуты 15 секунд:
Дож писал(а):sign, тут же не декартовы координаты, а широта и долгота.

Это не имеет принципиальной разницы. Главное рассчитать разницу, и сравнить с допустимой погрешностью.
Аватара пользователя
VirtUX
энтузиаст
 
Сообщения: 880
Зарегистрирован: 05.02.2008 10:52:19
Откуда: Крым, Алушта


Вернуться в Общее

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 17

Рейтинг@Mail.ru