Почему Math.atan() и Math.atan2() возвращают разные результаты?
У меня есть функция ниже, возвращающая мне углы в радианах из трех точек, закодированных, как показано ниже:
function pointsToAngles(x1, y1, x2, y2, cpx, cpy) {
const r1 = Math.atan((y1 - cpy)/(x1 - cpx));
const r2 = Math.atan((y2 - cpy)/(x2 - cpx));
return [r1, r2];
}
Я понимаю, что, поскольку он должен возвращать результаты в-pi/2
кpi/2
диапазон, поэтому JavaScript обеспечивает возврат-pi
кpi
диапазон. Я хотел бы переписать функцию для использования atan2, вероятно, так:
function pointsToAngles(x1, y1, x2, y2, cpx, cpy) {
const r1 = Math.atan2((x1 - cpx), (y1 - cpy));
const r2 = Math.atan2((x2 - cpx), (y2 - cpy));
return [r1, r2];
}
Однакоatan2
версия не работает должным образом. Я получаю результаты, отличные от результатов, и это не соответствует той логике, которой я ожидал бы следовать [с разницей в пи/2 или что-то в этом роде...].
Кажется, чтоatan()
версия работает правильно, иatan2()
версия нет. Что мне не хватает? Как мне рассчитать углы аналогично atan(), только возвращающему углы, превышающие пи/2?
1 ответ
Кажется, вы поменяли местами аргументы функции Math.atan2(). Правильный порядок аргументов должен быть (y, x), а не (x, y) Math.atan2() .