MathUtils - Руководство по Вердж3Д - Софт Эйт Софт
Description: Узнайте как использовать MathUtils в интерактивных 3Д-веб-приложениях сделанных на Вердж3Д

# MathUtils

Объект с вспомогательными математическими функциями.

## Функции

### # .angleToRange_0_2Pi(angle : Float) → Float

Конвертирует угол в интервал `[0, 2π)`.

`v3d.MathUtils.angleToRange_0_2Pi(0.5 * Math.PI) // → 1.570796 = 1/2 π v3d.MathUtils.angleToRange_0_2Pi(-0.5 * Math.PI) // → 4.712388 = 3/2 π v3d.MathUtils.angleToRange_0_2Pi(2 * Math.PI) // → 0 v3d.MathUtils.angleToRange_0_2Pi(3 * Math.PI) // → 3.141592 = π v3d.MathUtils.angleToRange_0_2Pi(10 * Math.PI) // → 0`

### # .angleToRange_mPi_Pi(angle : Float) → Float

Конвертирует угол в интервал `[-π, π)`.

### # .clamp(value : Float, min : Float, max : Float) → Float

- value — значение, которое необходимо ограничить.
- min — минимальное значение.
- max — максимальное значение.

Ограничивает значение value в диапазоне от min до max.

### # .clampAngle(angle : Float, minAngle : Float, maxAngle : Float) → Float

- angle — ограничиваемый угол.
- minAngle — минимальный угол.
- maxAngle — максимальный угол.

Ограничивает значение угла между minAngle и maxAngle.

### # .degToRad(degrees : Float) → Float

Преобразует градусы в радианы.

### # .euclideanModulo(n : Integer, m : Integer) → Integer

n, m — целые числа.

Вычисляет модуль Евклида m % n, то есть:

`((n % m) + m) % m`

### # .expAverage(valueFrom : Float, valueTo : Float, sampleTime : Float, time : Float) → Float

- valueFrom — предыдущее значение.
- valueTo — новое значение.
- sampleTime — время семпла (константа времени).
- time — прошедшее время.

Производит экспоненциальное сглаживание указанного значения.

### # .expAverageClamp(valueFrom : Float, valueTo : Float, sampleTime : Float, time : Float, clampDelta : Float) → Float

- valueFrom — предыдущее значение.
- valueTo — новое значение.
- sampleTime — время семпла (константа времени).
- time — прошедшее время.
- clampDelta — порог ограничения.

Производит экспоненциальное сглаживание указанного значения, ограничивая значения, меньшие чем `clampDelta`.

### # .generateUUID() → UUID

Генерирует UUID (универсальный уникальный идентификатор).

### # .isPowerOfTwo(n : Integer) → Boolean

Возвращает `true`, если n является степенью 2.

### # .inverseLerp(x : Float, y : Float, value : Float) → Float

- x — начальная точка.
- y — конечная точка.
- value — значение между начальной и конечной точкой.

Возвращает процентное значение в интервале `[0, 1]` для указанного числа между начальной и конечной точками.

### # .hashString(str : String) → Integer

Вычисляет 32-битную контрольную сумму строки.

### # .lerp(x : Float, y : Float, t : Float) → Float

- x — начальная точка.
- y — конечная точка.
- t — коэффициент интерполяции в замкнутом интервале [0, 1].

Возвращает линейную интерполяцию двух известных точек на основе заданного интервала - t = 0 вернет x и t = 1 вернет y.

### # .damp(x : Float, y : Float, lambda : Float, dt : Float) → Float

- x — текущая точка.
- y — целевая точка.
- lambda — высокая лямбда делает перемещение резким, низкая — более плавным.
- dt — delta time in seconds.

Плавно интерполирует число от x к y подобно пружине, с использованием значения dt, служащего для реализации движения, не зависящего от частоты кадров. Смотрите подробности тут.

### # .mapLinear(x : Float, a1 : Float, a2 : Float, b1 : Float, b2 : Float) → Float

- x — значение для отображения.
- a1 — минимальное значение для диапазона A.
- a2 — максимальное значение для диапазона A.
- b1 — минимальное значение для диапазона B.
- b2 — максимальное значение для диапазона B.

Линейное отображение x из диапазона [a1, a2] в диапазон [b1, b2].

### # .pingpong(x : Float, length : Float) → Float

- x — значение для пинг-понга.
- length — положительное число, указывающее куда будет производиться пинг-понг. По умолчанию `1`.

Возвращает значение, колеблющееся от 0 до length : Float.

### # .ceilPowerOfTwo(n : Float) → Integer

Возвращает наименьшую степень 2, которая больше или равна n.

### # .floorPowerOfTwo(n : Float) → Integer

Возвращает наибольшую степень 2, которая меньше или равна n.

### # .radToDeg(radians : Float) → Float

Конвертирует радианы в градусы.

### # .randFloat(low : Float, high : Float) → Float

Возвращает случайное число в интервале [low, high].

### # .randFloatSpread(range : Float) → Float

Возвращает случайное число в интервале [- range / 2, range / 2].

### # .randInt(low : Integer, high : Integer) → Integer

Возвращает случайное целое число в интервале [low, high].

### # .seededRandom(seed : Integer) → Float

Детерминированное псевдослучайное число с плавающей точкой в интервале `[0, 1]`. Параметр seed не обязателен.

### # .smoothstep(x : Float, min : Float, max : Float) → Float

- x — значение для оценки на основе его положения между min и max.
- min — любое значение x ниже min будет равно `0`.
- max — любое значение x, превышающее max, будет равно `1`.

Возвращает значение от 0 до 1, которое представляет процент того, что x переместился между min и max, но сглаживается или замедляется, чем ближе X к min и max.

Для дополнительной информации ознакомьтесь с со следующей статьёй.

### # .smootherstep(x : Float, min : Float, max : Float) → Float

- x — значение для оценки на основе его положения между min и max.
- min — любое значение x ниже min будет равно `0`.
- max — любое значение x, превышающее max, будет равно `1`.

Возвращает значение в диапазоне 0-1. Вариация smoothstep, которая имеет нулевые производные первого и второго порядка при x=0 и x=1.

### # .setQuaternionFromProperEuler(q : Quaternion, a : Float, b : Float, c : Float, order : String)

- q — кватернион, который необходимо установить.
- a — поворот, применимый к первой оси, в радианах.
- b — поворот, применимый ко второй оси, в радианах.
- c — поворот, применимый к третьей оси, в радианах.
- order — строка, определяющая порядок осей: 'XYX', 'XZX', 'YXY', 'YZY', 'ZXZ', или 'ZYZ'.

Задает кватернион из внутренних углов Эйлера, определяемых углами a, b, и c, и порядком order.

Вращения применяются к осям в порядке, указанном order: сначала применяется вращение на угол a, затем на угол b, затем на угол c. Углы указаны в радианах.

## Исходный файл

О том как получить исходный код этого модуля читайте тут.