Acos: примеры (PHP)
acos(float $num): floatОсновные сведения о функции acos
Функция acos() в PHP вычисляет арккосинус (обратный косинус) числа. Она возвращает угол в радианах, косинус которого равен переданному аргументу. Эта функция используется в математических расчетах, компьютерной графике, обработке сигналов и решении геометрических задач.
Аргументы функции
Функция принимает один обязательный параметр:
- $num (float) - число, для которого вычисляется арккосинус. Допустимый диапазон значений: от -1 до 1 включительно.
Возвращаемое значение
Функция возвращает:
- Угол в радианах (тип float) в диапазоне от 0 до π (пи).
NAN(не число), если аргумент выходит за пределы диапазона [-1, 1].
Простые примеры использования
Базовый расчет арккосинуса
<?php
$result = acos(0.5);
echo $result;
?>1.0471975511966
Граничные значения
<?php
echo acos(1) . "\n";
echo acos(0) . "\n";
echo acos(-1) . "\n";
?>0 1.5707963267949 3.1415926535898
Недопустимый аргумент
<?php
$result = acos(2);
var_dump($result);
?>float(NAN)
Похожие функции в PHP
- asin() - вычисляет арксинус. Возвращает угол в радианах, синус которого равен аргументу.
- atan() - вычисляет арктангенс. Возвращает угол в радианах, тангенс которого равен аргументу.
- atan2() - вычисляет арктангенс от двух переменных. Учитывает знаки обоих аргументов для определения квадранта.
- cos() - вычисляет косинус угла. Является прямой тригонометрической функцией.
- rad2deg() - преобразует радианы в градусы. Часто используется вместе с
acos()для получения результата в градусах.
Выбор функции
Функцию acos() применяют, когда известен косинус угла и нужно найти сам угол. asin() используют при известном синусе, atan() - при известном тангенсе. Для преобразования результата в градусы используют комбинацию rad2deg(acos($num)).
Аналоги в других языках
Python
import math
result = math.acos(0.5)
print(result) # 1.0471975511965979JavaScript
let result = Math.acos(0.5);
console.log(result); // 1.0471975511965979MySQL
SELECT ACOS(0.5); -- возвращает 1.0471975511965979C++
#include <cmath>
double result = acos(0.5); // 1.0472Основное отличие PHP-версии - автоматическое возвращение NAN при недопустимом аргументе. В некоторых языках может возникать ошибка времени выполнения.
Типичные ошибки
Передача значения вне диапазона
<?php
// Некорректный аргумент
$angle = acos(1.5);
if (is_nan($angle)) {
echo "Ошибка: аргумент вне диапазона [-1, 1]";
}
?>Ошибка: аргумент вне диапазона [-1, 1]
Использование результата без проверки
<?php
$value = acos('invalid');
// Приведение строки к float даст 0, но лучше явно проверять
var_dump($value);
?>float(1.5707963267949)
Неявное приведение типов
<?php
// PHP преобразует строку в число
$result = acos("0.5");
echo $result;
?>1.0471975511966
История изменений
В PHP 8.0 функция acos() не претерпела значительных изменений. Основные аспекты:
- Строгая типизация: при включенном режиме strict_types передача нечисловых значений вызывает TypeError.
- Улучшена обработка специальных значений NAN и INF.
- Совместимость с предыдущими версиями сохранена полностью.
В ранних версиях PHP (до 5.3) поведение при недопустимых аргументах могло отличаться на разных платформах.
Расширенные примеры применения
Преобразование результата в градусы
<?php
$radians = acos(0.8660254);
$degrees = rad2deg($radians);
echo "Угол: {$degrees}°";
?>Угол: 30.000000000000004°
Решение геометрической задачи
Вычисление угла треугольника по трем сторонам (теорема косинусов):
<?php
$a = 5; $b = 6; $c = 7;
// Угол против стороны c
$cosC = ($a*$a + $b*$b - $c*$c) / (2*$a*$b);
$angleC = rad2deg(acos($cosC));
echo "Угол C: {$angleC}°";
?>Угол C: 78.463040967185°
Обработка пользовательского ввода с проверкой
<?php
function safeAcos($value) {
$num = floatval($value);
if ($num < -1 || $num > 1) {
throw new InvalidArgumentException("Значение должно быть между -1 и 1");
}
return acos($num);
}
try {
echo safeAcos(0.3);
} catch (Exception $e) {
echo "Ошибка: " . $e->getMessage();
}
?>1.2661036727795
Создание анимации движения по окружности
<?php
// Параметрическое уравнение окружности через acos
$radius = 100;
$centerX = 200;
$centerY = 200;
for ($t = 0; $t <= 1; $t += 0.1) {
$angle = acos(1 - 2*$t); // Преобразование параметра
$x = $centerX + $radius * cos($angle);
$y = $centerY + $radius * sin($angle);
echo "Точка: ($x, $y)\n";
}
?>Точка: (300, 200) Точка: (292.70509831248, 155.57275643858) ... и т.д.