Почему 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() .

Другие вопросы по тегам