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
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 изменилась обработка нечисловых аргументов. Раньше происходило неявное преобразование строк к числам. Теперь при передаче аргумента типа, отличного от int или float, генерируется исключение TypeError.
До PHP 8:
echo atan("1.5"); // Работало, преобразовывало строку "1.5" в float 1.50.98279372324733
PHP 8 и новее:
echo atan("1.5"); // TypeErrorTypeError: atan(): Argument #1 ($num) must be of type float, string given
Вычисление угла наклона прямой, проходящей через две точки (x1,y1) и (x2,y2):
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
Расчет направления вектора для анимации или поворота объекта:
function vectorDirection($vx, $vy) {
// Для полного диапазона углов лучше использовать atan2
// Но если известно, что вектор находится в правой полусфере:
if ($vx != 0) {
return atan($vy / $vx);
}
return null;
}
$direction = vectorDirection(5, 5);
echo "Направление вектора: " . ($direction * 180 / pi()) . " градусов";Направление вектора: 45 градусов
Арктангенс определен для всех действительных чисел, что делает его удобным для обработки пользовательского ввода:
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 Ошибка: Значение должно быть числом
Создание таблицы значений арктангенса:
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