====== Математические функции ======
Список всех математических функций ACSUtils.
===== Константы =====
* ''fixed MATH_E'' -- число е
* ''fixed PI'' -- число π (пи)
* ''fixed SQRT_2'' -- квадратный корень из 2
===== Общие математические функции =====
==== abs ====
''num abs(num x)''
Возвращает модуль (|x|) числа x.
**Пример**
abs(2.0) == 2.0;
abs(-123) == 123;
==== clamp ====
''num clamp(num x, num a, num b)''
Заключает число x в промежуток [a; b]. Если число входит в промежуток, то возвращается x. Если x меньше a, возвращается a. Если число x больше b, возвращается b.
**Пример**
clamp(7, 6, 8) == 7;
clamp(0.1, 0.2, 0.3) == 0.2;
==== cmp ====
''int cmp(num a, num b)''
Сравнивает два числа и возвращает результат:
* ''1'', если a > b
* ''-1'', если a < b
* ''0'', если a = b
==== dist ====
''num dist(num a, num b)''
Возвращает абсолютное расстояние между числами.
**Пример**
dist(5.0, 8.0) == 3.0;
dist(8.0, 5.0) == 3.0;
dist(3.0, -2.0) == 5.0;
==== gcf ====
''num gcf(num a, num b)''
Возвращает наибольший общий делитель двух чисел. Возвращённый делитель будет отрицательным, если одно или оба данных числа отрицательны.
**Example**
gcf(18, 24) == 6;
gcf(18.0, 24.0) == 6.0;
gcf(-18, -24) == -6;
==== max ====
''num max(num a, num b)''
Возвращает большее из двух чисел.
**Пример**
max(3, 5) == 5;
max(8.0, 7.5) == 8.0;
==== min ====
''num min(num a, num b)''
Возвращает меньшее из двух чисел.
**Пример**
min(3, 5) == 3;
min(8.0, 7.5) == 7.5;
==== sign ====
''int sign(num x)''
Возвращает знак числа x.
* ''1'', если x > 0 (положительное)
* ''-1'', если x < 0 (отрицательное)
* ''0'', если x = 0
**Пример**
sign(12.3) == 1;
sign(0) == 0;
sign(-7) == -1;
===== Округление =====
Есть четыре вида округления:
* trunc -- вообще отбрасывается дробная часть
* floor -- округление вниз (до наименьшего ближайшего целого числа)
* ceil -- округление вверх (до наибольшего ближайшего целого числа)
* round -- округляет до ближайшего целого числа
Таблица округления:
x round(x) floor(x) ceil(x) trunc(x)
----- -------- -------- -------- --------
2.3 2 2 3 2
3.8 4 3 4 3
5.5 6 5 6 5
-2.3 -2 -3 -2 -2
-3.8 -4 -4 -3 -3
-5.5 -5 -6 -5 -5
Для каждого вида округления существует две функции. Те, что начинаются с "i" возвращают целое число. Другие, без "i" возвращают значение с типом данных fixed.
==== ceil ====
''fixed ceil(fixed x)''
''int iceil(fixed x)''
Возвращает число x, округленное вверх (до наибольшего ближайшего целого числа).
==== floor ====
''fixed floor(fixed x)''
''int ifloor(fixed x)''
Возвращает число x, округленное вниз (до наименьшего ближайшего целого числа).
==== round ====
''fixed round(fixed x)''
''int iround(fixed x)''
Округляет число x до ближайшего целого числа.
==== trunc ====
''fixed trunc(fixed x)''
''int itrunc(fixed x)''
Возвращает число x без дробной части.
===== Численные алгоритмы =====
==== lerp ====
''fixed lerp(fixed a, fixed b, fixed alpha)''
Выполняет [[wp>Linear interpolation|линейную интерполяцию]] (или экстраполяцию) между двумя числами и возвращает результат.
**Примеры**
lerp(a, b, 0.0) == a;
lerp(a, b, 1.0) == b;
lerp(a, b, 0.5) == (a + b) / 2; // Среднее арифметическое от a и b
// Простая анимация.
for (int time = 0; time < 1.0; time += 0.05)
{
int x = lerp(x1, x2, time);
int y = lerp(y1, y2, time);
НарисоватьЧтоНибудь(x, y);
Delay(1);
}
==== sqrt ====
''int zan_Sqrt(int number)''
''fixed zan_FixedSqrt(fixed number)''
Реализация квадратного корня для Zandronum, соответствует [[zdoom>Sqrt|ZDoom 2.7.0 функциям]].
===== Тригонометрия =====
Sin и cos уже присутствуют в Zdoom.
==== tan ====
''fixed tan(angle x)''
Возвращает tg x (тангенс).
==== cot ====
''fixed cot(angle x)''
Возвращает ctg x (котангенс).
==== sec ====
''fixed sec(angle x)''
Возвращает sec x (секанс).
==== cosec ====
''fixed cosec(angle x)''
Возвращает cosec x (косеканс).
==== asin ====
''angle asin(fixed x)''
Возвращает arcsin x (арксинус).
==== acos ====
''angle acos(fixed x)''
Возвращает arccos x (арккосинус).
==== atan ====
''angle atan(fixed x)''
Возвращает arctg x (арктангенс).
==== acot ====
''angle acot(fixed x)''
Возвращает arcctg x (арккотангнес).
==== asec ====
''angle asec(fixed x)''
Возвращает arcsec x (арксеканс).
==== acosec ====
''angle acosec(fixed x)''
Возвращает arccosec x (арккосеканс).
===== Векторы =====
==== dot2 ====
''fixed dot2(fixed x1, fixed y1, fixed x2, fixed y2)''
Возвращает скалярное произведение двух векторов.
==== dot3 ====
''fixed dot3(fixed x1, fixed y1, fixed z1, fixed x2, fixed y2, fixed z2)''
Возвращает скалярное произведение двух трехмерных векторов.
==== length2d ====
''fixed length2d(fixed x, fixed y)''
Возвращает длину заданного двухмерного вектора. Является Zandronum-реализацией функции
[[zdoom>VectorLength]].
==== length2d2 ====
''fixed length2d2(int x, int y)''
Возвращает **квадрат** длины данного двухмерного вектора.
==== length3d ====
''fixed length3d(fixed x, fixed y, fixed z)''
Возвращает длину заданного трехмерного вектора.
==== length3d2 ====
''fixed length3d2(int x, int y, int z)''
Возвращает **квадрат** длины заданного трехмерного вектора.
==== normalize2d ====
''fixed, fixed normalize2d(fixed x, fixed y)''
Нормализует заданный двухмерный вектор.
[[..mulretval|Эта функция возвращает несколько значений.]]
==== normalize3d ====
''fixed, fixed, fixed normalize3d(fixed x, fixed y, fixed z)''
Нормализует заданный трехмерный вектор.
[[..mulretval|Эта функция возвращает несколько значений.]]
==== RotatePoint ====
''fixed, fixed RotatePoint(fixed x, fixed y, fixed originX, fixed originY, angle angle)''
Вращает заданную точку (x; y) вокруг заданной точки вращения на указанный угол и возвращает результирующие координаты точки.
[[..mulretval|Эта функция возвращает несколько значений.]]
==== RotateVector ====
''fixed, fixed RotateVector(fixed x, fixed y, angle angle)''
Поворачивает вектор на указанный угол и возвращает его новые координаты.
[[..mulretval|Эта функция возвращает несколько значений.]]
**Пример**
RotateVector(x, y, angle);
int newX = r1;
int newY = r2;
==== VectorToAngles ====
''angle, angle VectorToAngles(fixed x, fixed y, fixed z)''
Конвертирует вектор в пару углов (рысканье и тангаж (поворот и наклон)), которые направлены туда же.
[[..mulretval|Эта функция возвращает несколько значений.]]
**Пример**
// Заставляет игрока смотреть по вектору
VectorToAngles(1.0, 2.0, 3.0);
int angle = r1;
int pitch = r2;
SetActorAngle(angle);
SetActorPitch(pitch);