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); | ||
| </ | </ | ||