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
echo hypot(2, 3, 6);
?>7
sqrt() вычисляет квадратный корень одного числа. Не подходит для прямого расчета гипотенузы, требует предварительного сложения квадратов.
pow() осуществляет возведение в степень. Может использоваться для расчета квадратов, но не заменяет комплексный расчет hypot.
Прямой расчет sqrt($x*$x + $y*$y) может вызвать переполнение при очень больших значениях. Функция hypot использует алгоритмы, минимизирующие эту проблему.
import math
print(math.hypot(3, 4))5.0
Поддерживает несколько измерений с версии Python 3.8.
console.log(Math.hypot(3, 4));5
Принимает произвольное количество аргументов.
SELECT SQRT(POW(3, 2) + POW(4, 2));5
<?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 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
// Евклидово расстояние в 4D-пространстве
echo hypot(1, 2, 3, 4);
?>5.4772255750517