Atan: примеры (PHP)

Использование atan в PHP на практике
Раздел: Математические функции
atan(float $num): float

Функция atan() является частью математического расширения PHP и вычисляет арктангенс (обратную тангенсу функцию) переданного аргумента. Результат возвращается в радианах в диапазоне от -π/2 до π/2.

Назначение

Функция используется в научных вычислениях, компьютерной графике, геометрии и физике для нахождения угла по известному значению его тангенса. Часто применяется совместно с другими тригонометрическими функциями для преобразований систем координат.

Аргументы

Функция принимает один обязательный параметр:
$num (float) — число (тангенс угла), для которого вычисляется арктангенс. Тип параметра — число с плавающей запятой (float). В PHP 8 неявное преобразование нечисловых строк может вызвать TypeError.

Базовые примеры

Пример вычисления арктангенса для положительного числа:

$result = atan(1);
echo $result; // Вывод результата
// Также можно вывести в градусах
echo $result * 180 / pi();
0.78539816339745
45

Пример с отрицательным значением:

echo atan(-1);
echo "\n";
echo atan(-1) * 180 / pi();
-0.78539816339745
-45

Пример с нулем и большим числом:

echo atan(0) . "\n";
echo atan(10) . "\n";
echo atan(10) * 180 / pi();
0
1.4711276743037
84.2894068625
Похожие функции в PHP

atan2($y, $x) — вычисляет арктангенс от двух переменных. Учитывает знаки обоих аргументов, что позволяет определить угол в правильном квадранте круга. Эта функция более предпочтительна при работе с декартовыми координатами.

asin() и acos() — обратные синус и косинус соответственно. Используются, когда известны значения синуса или косинуса, а не тангенса.

tan() — прямая тригонометрическая функция тангенс.

Аналоги в других языках

Atan в Python

В модуле math доступна функция atan(x), а также atan2(y, x) и math.degrees() для преобразования в градусы.

import math
print(math.atan(1))
print(math.atan(1) * 180 / math.pi)
0.7853981633974483
45.0

Atan в Javascript

Используется метод Math.atan(x). Для преобразования координат применяют Math.atan2(y, x).

console.log(Math.atan(1));
console.log(Math.atan(1) * 180 / Math.PI);
0.7853981633974483
45

Atan в MySQL

Функция ATAN(X) возвращает арктангенс, а ATAN2(Y, X) или ATAN(Y, X) — арктангенс от отношения двух переменных.

SELECT ATAN(1), ATAN(1) * 180 / PI();
0.78539816339745, 45
Типичные ошибки

Передача аргумента нечислового типа в PHP 8 вызывает TypeError.

// PHP 8
$result = atan("текст"); // TypeError: atan(): Argument #1 ($num) must be of type float, string given

В более ранних версиях PHP происходило неявное преобразование строк, что могло привести к неожиданным результатам:

// PHP 7
$result = atan("1abc"); // Преобразуется к 1, вызовется atan(1)
0.78539816339745

Путаница между радианами и градусами — распространенная ошибка, когда разработчик забывает преобразовать результат.

// Неправильно, если нужны градусы
$angle = atan(1);
echo "Угол: $angle градусов"; // На самом деле угол в радианах
Угол: 0.78539816339745 градусов
Изменения в PHP 8

В PHP 8 изменилась обработка нечисловых аргументов. Раньше происходило неявное преобразование строк к числам. Теперь при передаче аргумента типа, отличного от int или float, генерируется исключение TypeError.

До PHP 8:

echo atan("1.5"); // Работало, преобразовывало строку "1.5" в float 1.5
0.98279372324733

PHP 8 и новее:

echo atan("1.5"); // TypeError
TypeError: atan(): Argument #1 ($num) must be of type float, string given
Расширенные примеры
Определение угла наклона линии

Вычисление угла наклона прямой, проходящей через две точки (x1,y1) и (x2,y2):

Пример php
function lineAngle($x1, $y1, $x2, $y2) {
    $deltaY = $y2 - $y1;
    $deltaX = $x2 - $x1;
    // Избегаем деления на ноль
    if ($deltaX == 0) {
        // Вертикальная линия
        return ($deltaY > 0) ? pi()/2 : -pi()/2;
    }
    return atan($deltaY / $deltaX);
}

$angle = lineAngle(0, 0, 1, 1);
echo "Угол в радианах: $angle\n";
echo "Угол в градусах: " . ($angle * 180 / pi());
Угол в радианах: 0.78539816339745
Угол в градусах: 45
Использование в графике

Расчет направления вектора для анимации или поворота объекта:

Пример php
function vectorDirection($vx, $vy) {
    // Для полного диапазона углов лучше использовать atan2
    // Но если известно, что вектор находится в правой полусфере:
    if ($vx != 0) {
        return atan($vy / $vx);
    }
    return null;
}

$direction = vectorDirection(5, 5);
echo "Направление вектора: " . ($direction * 180 / pi()) . " градусов";
Направление вектора: 45 градусов
Проверка допустимых значений

Арктангенс определен для всех действительных чисел, что делает его удобным для обработки пользовательского ввода:

Пример php
function safeArcTan($value) {
    if (!is_numeric($value)) {
        throw new InvalidArgumentException("Значение должно быть числом");
    }
    return atan((float)$value);
}

try {
    echo safeArcTan(2.5) . "\n";
    echo safeArcTan("-3.14") . "\n";
    echo safeArcTan("abc"); // Вызовет исключение
} catch (Exception $e) {
    echo "Ошибка: " . $e->getMessage();
}
1.1902899496825
-1.2623736463431
Ошибка: Значение должно быть числом
Серия вычислений

Создание таблицы значений арктангенса:

Пример php
echo "x\tatan(x)\tградусы\n";
echo str_repeat("-", 35) . "\n";

for ($x = -2; $x <= 2; $x += 0.5) {
    $rad = atan($x);
    $deg = $rad * 180 / pi();
    printf("%.1f\t%.4f\t%.2f\n", $x, $rad, $deg);
}
x       atan(x) градусы
-----------------------------------
-2.0    -1.1071 -63.43
-1.5    -0.9828 -56.31
-1.0    -0.7854 -45.00
-0.5    -0.4636 -26.57
0.0     0.0000  0.00
0.5     0.4636  26.57
1.0     0.7854  45.00
1.5     0.9828  56.31
2.0     1.1071  63.43

PHP atan function comments

En
Atan Arc tangent