atan2()
Функция atan2() в PHP вычисляет арктангенс двух чисел и возвращает угол в радианах между положительной осью X и точкой ($x, $y).
Функция atan2() в PHP вычисляет арктангенс двух чисел, $y и $x. Она возвращает угол (в радианах) между положительной осью X и точкой ($x, $y) — это именно то, что нужно, когда требуется преобразовать пару координат обратно в направление.
На этой странице описаны синтаксис функции, возвращаемое значение, ключевое отличие atan2() от atan(), а также приведены запускаемые примеры.
Что такое функция atan2()?
atan2() — это встроенная математическая функция, которая возвращает арктангенс частного $y / $x, но — что принципиально важно — она использует знаки обоих аргументов, чтобы поместить результат в правильный квадрант. Результат выражается в радианах и находится в диапазоне от -π до π (примерно от -3.14159 до 3.14159).
Синтаксис
atan2(float $y, float $x): floatПараметры
| Параметр | Описание |
|---|---|
$y | Делимое (координата y, или значение, тангенс которого задаётся как числитель). |
$x | Делитель (координата x, или знаменатель). |
Возвращаемое значение
Значение типа float в диапазоне от -π до π, представляющее угол в радианах. Для преобразования в градусы используйте rad2deg().
atan2() vs atan()
Одноаргументная функция atan() видит $y / $x как одно число, поэтому она не может отличить, например, точку (1, 1) от (-1, -1) — обе дают отношение 1. Она всегда возвращает угол в диапазоне от -π/2 до π/2 и теряет информацию о квадранте. Также она может некорректно работать при $x = 0, поскольку это означает деление на ноль.
atan2($y, $x) сохраняет оба знака, поэтому охватывает полный круг (от -π до π) и корректно обрабатывает случай $x = 0. Используйте atan2() всегда, когда входные данные представляют реальные координаты, а не заранее вычисленное отношение.
Как использовать функцию atan2()
Передайте сначала значение y, затем значение x и при необходимости переведите результат из радиан в градусы:
Результат вывода:
Radians: 1.1071487177941
Degrees: 63.434948822922Мы задаём $y и $x, передаём их в atan2(), чтобы получить угол в радианах, а затем используем rad2deg() для преобразования результата в градусы.
Обработка квадрантов
Этот пример показывает, как atan2() возвращает различные углы для точек в разных квадрантах — даже когда отношение $y / $x одинаково:
<?php
// Same ratio (1), but different quadrants
echo rad2deg(atan2(1, 1)), "\n"; // upper-right quadrant
echo rad2deg(atan2(-1, -1)), "\n"; // lower-left quadrant
// $x is zero — no division-by-zero error
echo rad2deg(atan2(1, 0)), "\n"; // straight up
?>Вывод:
45
-135
90Поскольку atan2() проверяет оба знака, точки (1, 1) и (-1, -1) соответствуют углам 45° и -135° соответственно, а нулевое значение $x обрабатывается корректно.
Заключение
atan2() — основная функция для преобразования пары координат в угол в PHP. Она возвращает радианы в диапазоне от -π до π, корректно определяет все четыре квадранта и избегает проблемы деления на ноль, характерной для однопараметрической atan(). По смежным темам тригонометрии смотрите atan(), tan(), а также вспомогательные функции преобразования deg2rad() / rad2deg().