Опишите относительные углы между точками (например, направления движения) - PullRequest
4 голосов
/ 16 июня 2010

У меня есть список точек с координатами x, y.Я знаю, как получить расстояние между точками с sqrt(pow($x2 - $x1, 2) + pow($y2 - $y1, 2)) и угол между точками с atan2(y1 - y2, x1 - x2).

Как рассчитать относительный угол между точками (влево, вправо, прямо)?Итак, если я нахожусь в точке 1, каково относительное направление к точке 2, то от 2 до 3, от 3 до 4 и т. Д. *

Спасибо за любую помощь!

Ответы [ 3 ]

2 голосов
/ 16 июня 2010

Звоните atan2($y1 - $y2, $x1 - $x2)

Если оно между π / 2 и 3π / 2, то оно прямое.
Если оно больше 3π / 2 или меньше -3π / 2, это левый поворот.
Если оно между -π / 2 и π / 2, это поворот направо.

Вот схема:

 {3π/2}-------{π/2}-------{π/4}
      | +-----[ +y]-----+ | 
      | |               | | 
      | |               | | 
    {π} [-x]  [0,0]  [+x] {0} 
      | |               | | 
      | |               | | 
      | +-----[ -y]-----+ |
{-3π/2}-------{-π/2}------{-π/4}
0 голосов
/ 16 июня 2010

Учитывая ваш пример направления движения, концепция левый / правый / прямой имеет смысл только в отношении текущего направления движения. Вот почему отряды SatNav начинают с первого поворота или «Пожалуйста, переходите к запланированному маршруту», когда вы выключаете его карту, а не немедленный поворот влево / вправо / и т.д ...

Если вы знаете угол от x1, y1 до x2, y2, то вы можете указать относительное направление для следующей точки, используя угол x2, y2 до x3, y3. Если следующий угол больше, то это, вероятно, будет левый поворот, меньше - правый поворот, и в пределах некоторого поля вокруг первого угла он будет прямым.

0 голосов
/ 16 июня 2010

Если вы знаете угол от точки 2 до 1 и от точки 2 до 3, это просто вопрос angle_to_3 - angle_to_1 (или угол до следующего минус угол к предыдущему), который вы знаете, как рассчитать с atan2, или am Я ошибаюсь? Левый / правый / прямой просто округляет результат. Если вы хотите сделать это трудным способом, вы можете повернуть свои точки так, чтобы угол от 2 до 1 был 0, но это кажется излишне запутанным.

...