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

Полное руководство по функции hypot в PHP с примерами
Раздел: Математические функции
hypot(float $x, float $y): float

Функция hypot в PHP вычисляет длину гипотенузы прямоугольного треугольника по двум катетам или евклидову норму вектора в двумерном пространстве. Математически это выражается как sqrt(x*x + y*y).

Назначение и применение

Использование функции актуально в геометрических расчетах, компьютерной графике, обработке изображений, машинном обучении и физических симуляциях. Она предотвращает проблемы с переполнением и потерей точности, которые могут возникнуть при прямом вычислении sqrt(x*x + y*y).

Аргументы функции

До версии PHP 8.2 функция принимала строго два аргумента:

  • x (float) - длина первого катета или координата по оси X.
  • y (float) - длина второго катета или координата по оси Y.

Начиная с PHP 8.2, функция поддерживает переменное количество аргументов для вычисления евклидовой нормы в многомерном пространстве: hypot(x, y, z, ...). Все аргументы приводятся к типу float.

Примеры использования
Базовый расчет гипотенузы
<?php
echo hypot(3, 4);
?>
5
Работа с дробными числами
<?php
echo hypot(1.5, 2.5);
?>
2.9154759474227
Использование с PHP 8.2 (несколько аргументов)
<?php
echo hypot(2, 3, 6);
?>
7
Похожие функции в PHP

sqrt() вычисляет квадратный корень одного числа. Не подходит для прямого расчета гипотенузы, требует предварительного сложения квадратов.

pow() осуществляет возведение в степень. Может использоваться для расчета квадратов, но не заменяет комплексный расчет hypot.

Прямой расчет sqrt($x*$x + $y*$y) может вызвать переполнение при очень больших значениях. Функция hypot использует алгоритмы, минимизирующие эту проблему.

Аналоги в других языках
Python: math.hypot()
import math
print(math.hypot(3, 4))
5.0

Поддерживает несколько измерений с версии Python 3.8.

JavaScript: Math.hypot()
console.log(Math.hypot(3, 4));
5

Принимает произвольное количество аргументов.

MySQL: ST_Distance() или ручной расчет
SELECT SQRT(POW(3, 2) + POW(4, 2));
5
Типичные ошибки
Неверное количество аргументов (PHP < 8.2)
<?php
// В PHP 8.1 и ранее вызовет ошибку
hypot(2, 3, 4);
?>
Fatal error: Uncaught ArgumentCountError
Передача нечисловых значений
<?php
echo hypot('abc', 4);
?>
Warning: A non-numeric value encountered
4
Некорректное приведение типов
<?php
echo hypot(null, 5);
?>
5
Изменения в версиях PHP

PHP 8.2 (ноябрь 2022): функция стала принимать переменное количество аргументов для вычисления многомерной евклидовой нормы.

PHP 8.0 (ноябрь 2020): улучшена стабильность и производительность внутренней реализации.

PHP 5.4 (март 2012): до этой версии hypot() могла использовать менее точные алгоритмы на некоторых платформах.

Расширенные примеры
Расчет расстояния между точками
<?php
function distance($x1, $y1, $x2, $y2) {
    return hypot($x2 - $x1, $y2 - $y1);
}
echo distance(1, 1, 4, 5);
?>
5
Проверка попадания точки в окружность
<?php
$centerX = 10;
$centerY = 10;
$radius = 5;
$pointX = 13;
$pointY = 12;
$distance = hypot($pointX - $centerX, $pointY - $centerY);
echo $distance <= $radius ? 'Внутри' : 'Снаружи';
?>
Внутри
Нормализация вектора
<?php
$x = 3;
$y = 4;
$length = hypot($x, $y);
$normalizedX = $x / $length;
$normalizedY = $y / $length;
echo "Нормализованный вектор: ($normalizedX, $normalizedY)";
?>
Нормализованный вектор: (0.6, 0.8)
Многомерное расстояние (PHP 8.2+)
<?php
// Евклидово расстояние в 4D-пространстве
echo hypot(1, 2, 3, 4);
?>
5.4772255750517

PHP hypot function comments

En
Hypot Calculate the length of the hypotenuse of a right-angle triangle