Я создаю простую 2D игру в JavaScript/холсте. Я должен выяснить угол определенного объекта относительно моего положения.
Так: скажите, что я в (10,10), и объект в (10,5) - который привел бы к 90 градусам (поскольку положительный Y снижается, отрицательный Y произошел) (10,10) по сравнению с (10,15), были бы 270 градусов.
Как я пошел бы об этом?
Предположим, вы находитесь в (a, b), а объект находится в (c, d). Тогда относительное положение объекта по отношению к вам будет (x, y) = (c - a, d - b).
Затем вы можете использовать функцию Math.atan2 ()
, чтобы получить угол в радианах.
var theta = Math.atan2(-y, x);
обратите внимание, что результат находится в диапазоне [-π, π]. Если вам нужны неотрицательные числа, вам нужно сложить
if (theta < 0)
theta += 2 * Math.PI;
и преобразовать радианы в градусы, умножить на 180 / Math.PI
.
Если ваши координаты (xMe, yMe) и их координаты (xThem, yThem), то вы можете использовать формулу:
arctan ((yMe-yThem) / (xThem- xMe))
Обычно это arctan ((yThem-yMe) / (xThem-xMe))
, но в этом случае знак оси y меняется на противоположный.
Чтобы преобразовать результат из радиан в градусы, умножьте на 180 / пи.
Таким образом, в JavaScript это будет выглядеть так: Math.atan ((yThem-yMe) / (xThem-xMe)) * 180 / Math.PI
atan дает значение от -pi / 2 до пи / 2 (то есть от -90 до 90 градусов). Но вы можете посмотреть, в каком квадранте находится ваш вектор (xThem - xMe, yMe - yThem), и отрегулировать его соответствующим образом.