W3docs

hypot()

Разбираем функцию hypot() в PHP: синтаксис, вычисление гипотенузы прямоугольного треугольника и расстояния между точками.

Функция hypot() в PHP возвращает длину гипотенузы прямоугольного треугольника — или, что эквивалентно, прямолинейное (евклидово) расстояние от начала координат (0, 0) до точки (x, y). На этой странице рассматривается синтаксис функции, причины использовать её вместо ручной формулы, а также возможные подводные камни.

Синтаксис

hypot(float $x, float $y): float
  • $x — длина одного из катетов (или x-координата точки).
  • $y — длина другого катета (или y-координата точки).
  • Возвращаемое значениеfloat: sqrt($x * $x + $y * $y).

Оба аргумента обязательны, и функция всегда возвращает float, даже если результат является целым числом (hypot(3, 4) возвращает 5.0, которое echo печатает как 5).

Что вычисляет hypot()

По теореме Пифагора гипотенуза прямоугольного треугольника равна квадратному корню из суммы квадратов двух других сторон:

гипотенуза = √(катет1² + катет2²)

hypot() вычисляет именно это выражение. Классический треугольник 3-4-5 возвращает 5:

php— editable, runs on the server

Здесь мы сохраняем длины двух катетов в переменных, передаём их в hypot() и выводим результат. Функция возвращает значение с плавающей точкой 5.

Почему не использовать просто sqrt()?

Можно написать sqrt($x * $x + $y * $y) вручную — зачем тогда использовать hypot()? Есть две причины:

  1. Читаемость — намерение («вычислить гипотенузу / расстояние») очевидно с первого взгляда.
  2. Числовая безопасностьhypot() реализована так, чтобы избежать переполнения и потери значимости, которые могут возникнуть при наивном использовании sqrt() от возведённых в квадрат значений, когда $x или $y очень велико или очень мало. Возведение большого числа в квадрат может выйти за пределы диапазона float и вернуть INF, тогда как hypot() построена так, чтобы оставаться в допустимом диапазоне.

В обычных вычислениях оба подхода дают одинаковый результат; при экстремальных значениях hypot() — более безопасный выбор. Смотрите sqrt() и pow() для ознакомления с низкоуровневыми строительными блоками.

Расстояние между двумя точками

Поскольку hypot() возвращает расстояние от (0, 0) до (x, y), можно найти расстояние между любыми двумя точками, предварительно вычтя их координаты:

php— editable, runs on the server

Разности равны 3 и 4, поэтому расстояние составляет 5. Это наиболее распространённый практический случай: измерение расстояний в двумерном пространстве (UI-макеты, физика в играх, геоматематика на плоскости).

Примечания и подводные камни

  • Отрицательные аргументы допустимы. Важны только величины, поэтому hypot(-3, -4) тоже равно 5 — при возведении в квадрат знаки исчезают.
  • Результат является float. hypot(1, 1) возвращает 1.4142135623731 (PHP выводит с точностью по умолчанию в 14 значащих цифр). Не сравнивайте результат hypot() с целым числом через ===.
  • Оба аргумента обязательны. hypot() принимает ровно два числа; для трёхмерных расстояний вложите вызовы: hypot(hypot($x, $y), $z).

Заключение

hypot() предоставляет лаконичный и защищённый от переполнения способ вычислить гипотенузу или евклидово расстояние в 2D без ручного написания формулы Пифагора. Используйте её всякий раз, когда нужно найти расстояние от начала координат до точки или — вычтя координаты — между любыми двумя точками. Для знакомства со смежными математическими функциями изучите полный справочник по математическим функциям PHP, abs() и atan2().

Практика

Практика
Какова функциональность функции hypot() в PHP?
Какова функциональность функции hypot() в PHP?
Was this page helpful?