Формула, чтобы найти знак +/- угла между двумя точками? - PullRequest
0 голосов
/ 29 февраля 2012

Я пытался найти формулу, чтобы выяснить, поворачивает ли машина влево или вправо с учетом двух наборов координат. x1, y1 в момент времени t, а x2, y2 в момент времени t + 1 секунда. До сих пор я использовал это:

double direction = atan2(y2 - y1, x2 - x1)

Затем я проверяю, является ли направление положительным или отрицательным, чтобы выяснить, поворачивает ли машина влево или вправо. Это работает, но мне вообще не нужно знать значение направления. Мне просто нужен знак. Кроме того, я хотел бы отказаться от использования Atan2, который может быть дорогим. Есть ли другая формула, которую я могу использовать для этого? Спасибо!


Edit1:

У меня есть скорость. Время между двумя точками всегда на расстоянии одной секунды, поэтому его можно рассчитать при необходимости.


Edit2: Вот что я имею в виду под поворотом: я имею дело с данными моделирования движения, которые не на 100% реалистичны. Обычно у меня есть курс (в градусах) автомобиля. Однако, когда автомобиль меняет полосу движения, курс является неточным (кажется, что он движется по диагонали). Итак, в этом случае я уже определил, что машина меняет полосу движения. Мне нужно наклонить курс машины примерно на 20 градусов. Мне просто нужно выяснить, в каком направлении менять курс, поэтому мне нужно выяснить, в каком направлении автомобиль «поворачивает» при смене полосы движения.

Ответы [ 2 ]

2 голосов
/ 29 февраля 2012

atan2 положительно тогда и только тогда, когда компонент y положителен.

1 голос
/ 29 февраля 2012

Предполагая, что у вас есть автомобиль, движущийся со скоростью u, v в точке x1, y1 в момент времени t и в момент времени t + 1 x2, y2, тогда направление определяется как

int turnleft = sgn(-v * (x2-x1) + u * (y2-y1));

С sgn в соответствии с Существует ли стандартная функция знака (signum, sgn) в C / C ++? , например.

Еще несколько объяснений:

Вы поворачиваете налево, если скалярное произведение между изменением положения и нормальной скоростью больше нуля. Вращение скорости влево (против часовой стрелки). Таким образом, левый поворот равен 1, если вы поворачиваете налево, 0, если вы идете прямо, и -1, если вы поворачиваете направо.

Ах, я забыл: есть также случай, когда ты вообще не поворачиваешься. Обновлено соответственно

...