30-50% off hundreds of digital assets! WordPress themes, video, music and more 30-50% Off Go to Sale
Advertisement
  1. Code
  2. PHP
Code

Тригонометрия, случайные числа и многое другое со встроенными математическими функциями PHP

by
Difficulty:BeginnerLength:MediumLanguages:

Russian (Pусский) translation by Anna Goorikova (you can also view the original English article)

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

Иногда математика, требуемая в программе, может быть более сложной. Возможно, вам придется работать с логарифмическими, тригонометрическими или экспоненциальными функциями. В этом уроке я расскажу, как использовать каждую из этих функций в PHP с примерами.

В этом учебном пособии вы познакомитесь со встроенными математическими функциями в PHP для выполнения расчетов тригонометрии, экспоненциальности и логарифма. Мы также рассмотрим округление и генерирование случайных чисел.

Тригонометрические функции в PHP

Вы можете рассчитать значение синуса, cos и касательных разных углов, заданных в радианах, используя sin($angle), cos($angle) и tan($angle). Все они возвращают значения float, и переданная им мера угла находится в радианах.

Это означает, что когда вы просто вычисляете tan(45), вы не получите 1 в качестве вывода, потому что вы фактически будете вычислять значение касательной на 45 радиан, что составляет около 2,578 градусов. К счастью, PHP имеет две очень полезные функции для преобразования радианов в градусы и наоборот. Этими функциями являются rad2deg() и deg2rad(). Итак, если вы действительно хотите вычислить значение касательной 45 градусов, вам нужно будет написать tan(deg2rad(45)).

Стоит отметить, что нет прямой функции PHP для вычисления значений cosec(), sec() или cot(). Однако, эти значения являются просто взаимными значениями sin(), cos() и tan(), поэтому вы можете подсчитать их значения косвенно.

Вы также можете сделать наоборот и вычислить угол, при котором тригонометрический угол имеет определенное значение. Эти функции называются asin(), acos() и atan(). Одна вещь, которую вы должны помнить, состоит в том, что значения sin и cos никогда не могут выходить за пределы от -1 до 1 для любого угла. Это означает, что asin() и acos() могут принимать значения только в диапазоне от -1 до 1 в качестве действительных аргументов. Значение вне этого диапазона даст вам NaN.

В тригонометрии есть много приложений, таких как определение траектории объекта или высоты и расстояния от разных объектов, поэтому доступ к этим функциям определенно полезен, если вы пишете код, который имитирует эти ситуации.

Эти функции также очень полезны, когда вы хотите нарисовать разные элементы, используя радиальные и угловые значения. Предположим, вы хотите нарисовать кружок вокруг большего круга на равномерном расстоянии. Если вы прочитали учебник PHP GD Shapes на Envato Tuts+, вы, вероятно, помните, что для рисования любых фигур вам потребуется передать координаты в виде координат x, y, но рисовать круговые рисунки проще с полярными координатами.

Использование этих тригонометрических функций в этом случае поможет вам нарисовать нужные цифры, используя sin() и cos(), чтобы преобразовать полярные координаты в декартовую форму. Вот пример:

На следующем рисунке показан окончательный результат вышеуказанного PHP-кода.

Using PHP GD with Trigonometric functions

Экспоненциальные и логарифмические функции

PHP также имеет некоторые экспоненциальные и логарифмические функции. Функция exp($value) вернет константу e, в виде значения десятичной дроби $value. Аналогично, вы можете вычислить логарифм заданного числа с любым основанием, используя функцию log($arg, $base). Если $base опущено, логарифм будет вычисляться с использованием натурального основания e. Если вы хотите вычислить логарифм числа с основанием 10, вы можете просто использовать функцию log10($arg).

Еще одна функция, которую вы можете найти полезной, - pow($base, $exp), которая возвращает $base, увеличенную до $exp. Некоторые из вас могут предпочесть использовать оператор **. Выражение $a**$b даст тот же результат, что и pow($a, $b). Однако, вы можете получить неверные результаты в определенных ситуациях с помощью $a**$b. Например, -1**0.5 даст вам -1, что неверно. Вычисление того же выражения с использованием pow(-1, 0.5) даст правильное значение NaN.

Другие полезные математические функции

Округление чисел

Есть много других важных математических функций. Вы можете округлить числа или десятичные числа до ближайшего целого числа, используя функцию ceil(float $value). Это преобразует как 2.1, так и 2.9 в 3. Аналогичным образом вы можете округлить дроби или десятичные числа до ближайшего целого числа, используя функцию floor(float $value). Она изменит оба числа как 2.1, так и 2.9 в 2.

Эти функции хороши для удобного округления результатов различных вычислений. Предположим, вам нужно знать, сколько людей зал может разместить в зависимости от его района. Ваш окончательный ответ после деления, скорее всего, будет десятичным числом, но вы не можете разделить людей на части, поэтому правильным ответом будет значение расчетного значения, округленное в меньшую сторону.

Вы часто хотите округлить число вверх или вниз до ближайшего целого числа. Например, вам может потребоваться изменить 2.1 на 2, а с 2.9 до 3. Это можно сделать легко, используя функцию round($value, $precision, $mode). Параметр $precision определяет количество знаков после запятой для округления. Значение по умолчанию 0 будет просто возвращать целые числа. Третий параметр $mode используется для определения того, что произойдет, если число, которое вы хотите округлить, находится ровно посередине. Вы можете использовать его, чтобы указать, следует ли заменить 3.5 на 3 или на 4.

Минимум и максимум

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

Целочисленное деление

Вы также можете выполнять целочисленное деление в PHP с помощью функции intdiv($divendend, $divisor). В этом случае после деления возвращается только целая часть частного. Точно так же вы можете получить остаток или по модулю после разделения двух аргументов, используя функцию fmod($divendend, $divisor). Возвращаемое значение всегда будет меньше, чем $divisor.

Существуют и другие полезные функции, такие как is_nan($value), is_finite($value) и is_infinite($val), которые могут быть использованы для определения того, является ли это значение числом и, если оно является числом, является ли оно конечным или бесконечным , Помните, что PHP считает, что любое значение, которое слишком велико, чтобы поместить в float, бесконечным. Таким образом is_finite() вернет true для 100 факториалов, но false для 1000 факториалов.

Генерация случайных чисел в PHP

Случайные числа оказываются весьма полезными в ряде ситуаций. Вы можете использовать их для генерации «случайных» данных для вашего приложения или для создания экземпляров противника в играх и т. д. Очень важно помнить, что ни одна из функций, которые мы обсуждаем в этом разделе, не генерирует криптографически безопасные случайные числа. Эти функции предназначены только для использования в ситуациях, когда безопасность не является проблемой, например, показывать произвольные приветственные тексты для посетителей или для генерации случайных статистических данных.

Функции rand($min, $max) и mt_rand($min, $max) могут генерировать положительные случайные целые числа между заданными значениями, включая значения $min и $max. Когда функции вызывают без каких-либо параметров, они генерируют случайные числа между 0 и getrandmax(). Вы можете echo значение getrandmax(), чтобы увидеть максимально возможное случайное число, которое эти функции могут генерировать на вашей платформе.

Функция mt_rand() в 4 раза быстрее, чем rand(), и возвращает false, если $max меньше $min. Начиная с PHP 7.1.0, rand() фактически стал псевдоним mt_rand(). Единственное различие заключается в том, что rand() все еще не дает ошибку, если $max меньше, чем $min, чтобы поддерживать обратную совместимость.

Вот цикл для генерации случайных значений от 0 до 100 миллионов раз. Как вы можете видеть, значения 0, 50 и 100 генерируются приблизительно 10 000 раз с небольшими колебаниями.

Обе эти функции также имеют свои собственные функции, называемые srand() и mt_srand(), чтобы обеспечить работу генераторов случайных чисел. Вы должны помнить, что вы только вызываете srand() и mt_srand() один раз в своей программе. Вызов их перед каждым вызовом rand() и mt_rand() будет давать вам те же «случайные» номера каждый раз.

Заключительные мысли

PHP поставляется с множеством встроенных функций, которые должны отвечать всем вашим повседневным потребностям в расчетах. Вы можете использовать эти функции для выполнения немного более сложных вычислений, таких как GCD, LCM и факториалы.

При использовании этих функций вам нужно запомнить несколько вещей. Например, значение, возвращаемое такими функциями, как floor() и ceil(), является целым числом, но оно по-прежнему является float. Аналогично, все тригонометрические функции ожидают, что их углы будут заданы в радианах. Вы получите неверные результаты, если вы передадите им значение угла, которое вы хотели бы рассматривать как меру степени. Поэтому убедитесь, что вы проверяете возвращаемое значение и ожидаемые аргументы всех этих функций в документации.

Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.