Учитывая две координаты, как вы можете найти угол от вертикали (как на циферблате)

Я делаю простую 2D-игру с высоты птичьего полета, в которой персонаж может смотреть в любом направлении, направление, в котором смотрит персонаж, будет указано в радианах.

Учитывая два набора координат (точки a и b), как мне найти угол между линией, непосредственно вертикальной от точки a, и линией, образованной от точки a до b? Этот угол будет от 0 до 360 (хотя 360 будет рассматриваться как 0).

http://i.stack.imgur.com/J9TAU.png

На этой диаграмме точка a является центром, а точка b - точкой на краю. Линия, идущая от a, - это позиция 0 и линия, от которой вы будете определять угол. Точка b может быть где угодно на окружности, и мне нужно найти радианы угла справа от линии 0.


person Jamal Moir    schedule 31.01.2015    source источник


Ответы (2)


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

A - Если это в радианах, это не будет 0–360!

B - Если Y> = 0, angle = arccos (x); иначе угол = TWOPI - arccos (x)

Обычная формулировка такова, что угол = 0 идет вдоль + X, а не + Y. Вам придется немного повозиться, чтобы получить желаемое. Но этого должно быть достаточно, чтобы подтолкнуть вас в правильном направлении.

person wrosecrans    schedule 31.01.2015
comment
Ха-ха, это было глупо! Я только что проснулся! Ах да, выглядит хорошо, спасибо. Я пытался сделать это с помощью диаграммы CAST, но это означало, что мне приходилось выполнять разные вычисления в зависимости от того, в каком квадранте он находился, я чувствовал, что должен быть лучший способ. Ваше здоровье! - person Jamal Moir; 31.01.2015

Вы можете использовать функцию atan, которая есть во многих языках программирования. От вертикали угол до точки B будет:

pi/2 - atan(x, y)

Где x и y - координаты точки B по отношению к A. Обратите внимание, что это может быть отрицательным, поэтому вам нужно будет выполнить некоторые модульные арифметические операции, чтобы получить положительный результат (если вам это небезразлично).

Кроме того, это не совсем подходящий вопрос для StackOverflow, поскольку это вопрос математики, а не программирования.

person Benjamin Murphy    schedule 31.01.2015
comment
Спасибо, а не так ли? Я приношу извинения. - person Jamal Moir; 31.01.2015
comment
Кстати, что вы подразумеваете под атаном (x, y)? - person Jamal Moir; 31.01.2015
comment
Арктангенс, который есть в каждой стандартной математической библиотеке. - person Benjamin Murphy; 01.02.2015
comment
Да, я знал, что это арктангенс, но (x, y)? Что это за запятая? - person Jamal Moir; 02.02.2015
comment
Это была бы функция. x - это координата x точки B относительно точки A, которая была бы B.x-A.x, а y - координата y точки B относительно точки A, которая равна B.y-A.y. - person Benjamin Murphy; 07.02.2015