This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
ru:functions:math [2016/04/26 17:52] – djskaarj | ru:functions:math [2016/05/04 21:53] (current) – djskaarj | ||
---|---|---|---|
Line 39: | Line 39: | ||
Сравнивает два числа и возвращает результат: | Сравнивает два числа и возвращает результат: | ||
- | * '' | + | * '' |
- | * '' | + | * '' |
- | * '' | + | * '' |
==== dist ==== | ==== dist ==== | ||
Line 54: | Line 54: | ||
dist(8.0, 5.0) == 3.0; | dist(8.0, 5.0) == 3.0; | ||
dist(3.0, -2.0) == 5.0; | dist(3.0, -2.0) == 5.0; | ||
+ | </ | ||
+ | |||
+ | ==== gcf ==== | ||
+ | '' | ||
+ | |||
+ | Возвращает наибольший общий делитель двух чисел. Возвращённый делитель будет отрицательным, | ||
+ | |||
+ | **Example** | ||
+ | |||
+ | < | ||
+ | gcf(18, | ||
+ | gcf(18.0, 24.0) == 6.0; | ||
+ | gcf(-18, | ||
+ | </ | ||
+ | |||
+ | |||
+ | ==== max ==== | ||
+ | '' | ||
+ | |||
+ | Возвращает большее из двух чисел. | ||
+ | |||
+ | **Пример** | ||
+ | |||
+ | < | ||
+ | max(3, 5) == 5; | ||
+ | max(8.0, 7.5) == 8.0; | ||
+ | </ | ||
+ | |||
+ | ==== min ==== | ||
+ | '' | ||
+ | |||
+ | Возвращает меньшее из двух чисел. | ||
+ | |||
+ | **Пример** | ||
+ | |||
+ | < | ||
+ | min(3, 5) == 3; | ||
+ | min(8.0, 7.5) == 7.5; | ||
+ | </ | ||
+ | |||
+ | ==== sign ==== | ||
+ | '' | ||
+ | |||
+ | Возвращает знак числа x. | ||
+ | * '' | ||
+ | * '' | ||
+ | * '' | ||
+ | |||
+ | **Пример** | ||
+ | |||
+ | < | ||
+ | sign(12.3) == 1; | ||
+ | sign(0) == 0; | ||
+ | sign(-7) == -1; | ||
+ | </ | ||
+ | |||
+ | ===== Округление ===== | ||
+ | |||
+ | Есть четыре вида округления: | ||
+ | |||
+ | * trunc -- вообще отбрасывается дробная часть | ||
+ | * floor -- округление вниз (до наименьшего ближайшего целого числа) | ||
+ | * ceil -- округление вверх (до наибольшего ближайшего целого числа) | ||
+ | * round -- округляет до ближайшего целого числа | ||
+ | |||
+ | Таблица округления: | ||
+ | |||
+ | < | ||
+ | | ||
+ | ----- -------- -------- -------- -------- | ||
+ | | ||
+ | | ||
+ | | ||
+ | -2.3 -2 | ||
+ | -3.8 -4 | ||
+ | -5.5 -5 | ||
+ | </ | ||
+ | |||
+ | Для каждого вида округления существует две функции. Те, что начинаются с " | ||
+ | ==== ceil ==== | ||
+ | '' | ||
+ | |||
+ | '' | ||
+ | |||
+ | Возвращает число x, округленное вверх (до наибольшего ближайшего целого числа). | ||
+ | |||
+ | ==== floor ==== | ||
+ | '' | ||
+ | |||
+ | '' | ||
+ | |||
+ | Возвращает число x, округленное вниз (до наименьшего ближайшего целого числа). | ||
+ | |||
+ | ==== round ==== | ||
+ | '' | ||
+ | |||
+ | '' | ||
+ | |||
+ | Округляет число x до ближайшего целого числа. | ||
+ | |||
+ | ==== trunc ==== | ||
+ | '' | ||
+ | |||
+ | '' | ||
+ | |||
+ | Возвращает число x без дробной части. | ||
+ | |||
+ | ===== Численные алгоритмы ===== | ||
+ | |||
+ | ==== lerp ==== | ||
+ | '' | ||
+ | |||
+ | Выполняет [[wp> | ||
+ | |||
+ | **Примеры** | ||
+ | |||
+ | < | ||
+ | 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, | ||
+ | Delay(1); | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | ==== sqrt ==== | ||
+ | '' | ||
+ | |||
+ | '' | ||
+ | |||
+ | Реализация квадратного корня для Zandronum, соответствует [[zdoom> | ||
+ | |||
+ | ===== Тригонометрия ===== | ||
+ | |||
+ | Sin и cos уже присутствуют в Zdoom. | ||
+ | |||
+ | ==== tan ==== | ||
+ | '' | ||
+ | |||
+ | Возвращает tg x (тангенс). | ||
+ | |||
+ | ==== cot ==== | ||
+ | '' | ||
+ | |||
+ | Возвращает ctg x (котангенс). | ||
+ | |||
+ | ==== sec ==== | ||
+ | '' | ||
+ | |||
+ | Возвращает sec x (секанс). | ||
+ | |||
+ | ==== cosec ==== | ||
+ | '' | ||
+ | |||
+ | Возвращает cosec x (косеканс). | ||
+ | |||
+ | ==== asin ==== | ||
+ | '' | ||
+ | |||
+ | Возвращает arcsin x (арксинус). | ||
+ | |||
+ | ==== acos ==== | ||
+ | '' | ||
+ | |||
+ | Возвращает arccos x (арккосинус). | ||
+ | |||
+ | ==== atan ==== | ||
+ | '' | ||
+ | |||
+ | Возвращает arctg x (арктангенс). | ||
+ | |||
+ | ==== acot ==== | ||
+ | '' | ||
+ | |||
+ | Возвращает arcctg x (арккотангнес). | ||
+ | |||
+ | ==== asec ==== | ||
+ | '' | ||
+ | |||
+ | Возвращает arcsec x (арксеканс). | ||
+ | |||
+ | ==== acosec ==== | ||
+ | '' | ||
+ | |||
+ | Возвращает arccosec x (арккосеканс). | ||
+ | |||
+ | ===== Векторы ===== | ||
+ | |||
+ | ==== dot2 ==== | ||
+ | '' | ||
+ | |||
+ | Возвращает скалярное произведение двух векторов. | ||
+ | |||
+ | ==== dot3 ==== | ||
+ | '' | ||
+ | |||
+ | Возвращает скалярное произведение двух трехмерных векторов. | ||
+ | |||
+ | ==== length2d ==== | ||
+ | '' | ||
+ | |||
+ | Возвращает длину заданного двухмерного вектора. Является Zandronum-реализацией функции | ||
+ | [[zdoom> | ||
+ | ==== length2d2 ==== | ||
+ | '' | ||
+ | |||
+ | Возвращает **квадрат** длины данного двухмерного вектора. | ||
+ | |||
+ | ==== length3d ==== | ||
+ | '' | ||
+ | |||
+ | Возвращает длину заданного трехмерного вектора. | ||
+ | |||
+ | ==== length3d2 ==== | ||
+ | '' | ||
+ | |||
+ | Возвращает **квадрат** длины заданного трехмерного вектора. | ||
+ | |||
+ | ==== normalize2d ==== | ||
+ | '' | ||
+ | |||
+ | Нормализует заданный двухмерный вектор. | ||
+ | |||
+ | [[..mulretval|Эта функция возвращает несколько значений.]] | ||
+ | |||
+ | ==== normalize3d ==== | ||
+ | '' | ||
+ | |||
+ | Нормализует заданный трехмерный вектор. | ||
+ | |||
+ | [[..mulretval|Эта функция возвращает несколько значений.]] | ||
+ | |||
+ | ==== RotatePoint ==== | ||
+ | '' | ||
+ | |||
+ | Вращает заданную точку (x; y) вокруг заданной точки вращения на указанный угол и возвращает результирующие координаты точки. | ||
+ | |||
+ | [[..mulretval|Эта функция возвращает несколько значений.]] | ||
+ | |||
+ | ==== RotateVector ==== | ||
+ | '' | ||
+ | |||
+ | Поворачивает вектор на указанный угол и возвращает его новые координаты. | ||
+ | |||
+ | [[..mulretval|Эта функция возвращает несколько значений.]] | ||
+ | |||
+ | **Пример** | ||
+ | |||
+ | < | ||
+ | RotateVector(x, | ||
+ | int newX = r1; | ||
+ | int newY = r2; | ||
+ | </ | ||
+ | |||
+ | ==== VectorToAngles ==== | ||
+ | '' | ||
+ | |||
+ | Конвертирует вектор в пару углов (рысканье и тангаж (поворот и наклон)), | ||
+ | |||
+ | [[..mulretval|Эта функция возвращает несколько значений.]] | ||
+ | |||
+ | **Пример** | ||
+ | |||
+ | < | ||
+ | // Заставляет игрока смотреть по вектору | ||
+ | VectorToAngles(1.0, | ||
+ | int angle = r1; | ||
+ | int pitch = r2; | ||
+ | SetActorAngle(angle); | ||
+ | SetActorPitch(pitch); | ||
</ | </ |