Яка різниця між atan і atan2 у C++?
висновок: atan(y/x) приховує деяку інформацію, і можна лише припустити, що вхідні дані надійшли з квадрантів I або IV. Навпаки, atan2(y,x) отримує всі дані і, отже, може визначити правильний кут. Одна маленька деталь: діапазон -π/2 <= atan() <= π/2 фактично включає одну точку ( pi/2 ) із квадранта II. 12 листопада 2008 р.
atan повертає арктангенс x у діапазоні від -π/2 до π/2 радіан. atan2 повертає арктангенс y/x у діапазоні від -π до π радіан. Якщо x дорівнює 0, atan повертає 0. Якщо обидва параметри atan2 дорівнюють 0, функція повертає 0.
Обернений тангенс чотирьох квадрантів atan2(Y,X) повертає значення в замкнутому інтервалі [–π, π] на основі значень Y і X, як показано на малюнку. Навпаки, atan(Y/X) повертає результати, обмежені інтервалом [–π/2, π/2], показаним у правій частині діаграми.
Функція atan2 повертає арктангенс y/x, використовуючи знак обох чисел, щоб визначити квадрант для значення, що повертається. Він правильно обробляє випадок, коли x дорівнює 0. (Тобто повертає π/2 знака y для відмінного від нуля y; якщо y дорівнює 0, результат визначається реалізацією та може бути помилкою діапазону).
Arctan2 — це 4-квадрантний аверстангенс. Він може обійти попередню проблему, взявши x і y як окремі аргументи. Тоді як синтаксис для arctan — arctan(y/x), синтаксис для arctan2 — arctan2(y,x). Знаючи знаки x і y окремо, можна визначити, чи лежить кут у будь-якому з чотирьох квадрантів.
Але, якщо у вас є два значення y і x, і ви хочете обчислити atan(y / x), є кращий вибір: використовувати atan2(y, x). Як обговорювалося тут, atan2(y, x) може обробляти значення з усіх 4 різних квадрантів. Таким чином, вам не потрібно перевіряти знак x і y, оскільки atan2() робить це самостійно.