ACSUtils Wiki

An ACS library for ZDoom-based ports

User Tools

Site Tools


ru:functions:math

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
Last revisionBoth sides next revision
ru:functions:math [2016/04/26 21:03] djskaarjru:functions:math [2016/05/02 00:37] korshun
Line 55: Line 55:
 dist(3.0, -2.0) == 5.0; dist(3.0, -2.0) == 5.0;
 </code> </code>
 +
 +==== gcf ====
 +''num gcf(num a, num b)''
 +
 +Возвращает наибольший общий делитель двух чисел. Возвращённый делитель будет отрицательным, если одно или оба данных числа отрицательны.
 +
 +**Example**
 +
 +<code>
 +gcf(18,   24)   == 6;
 +gcf(18.0, 24.0) == 6.0;
 +gcf(-18,  -24)  == -6;
 +</code>
 +
  
 ==== max ==== ==== max ====
Line 105: Line 119:
   * round -- округляет до ближайшего целого числа   * round -- округляет до ближайшего целого числа
  
-Для каждого вида округления существует две функции. Те, что начинаются с "i" возвращают целое число. Другие, без "i" возвращают значение с типом данных fixed.+Таблица округления:
  
 +<code>
 +    round(x) floor(x)  ceil(x) trunc(x)
 +----- -------- -------- -------- --------
 + 2.3                2        3        2
 + 3.8                3        4        3
 + 5.5                5        6        5
 +-2.3        -2       -3       -2       -2
 +-3.8        -4       -4       -3       -3
 +-5.5        -5       -6       -5       -5
 +</code>
 +
 +Для каждого вида округления существует две функции. Те, что начинаются с "i" возвращают целое число. Другие, без "i" возвращают значение с типом данных fixed.
 ==== ceil ==== ==== ceil ====
 ''fixed ceil(fixed x)'' ''fixed ceil(fixed x)''
Line 134: Line 160:
  
 Возвращает число x без дробной части. Возвращает число x без дробной части.
 +
 +===== Численные алгоритмы =====
 +
 +==== lerp ====
 +''fixed lerp(fixed a, fixed b, fixed alpha)''
 +
 +Выполняет [[wp>Linear interpolation|линейную интерполяцию]] (или экстраполяцию) между двумя числами и возвращает результат.
 +
 +**Примеры**
 +
 +<code>
 +lerp(a, b, 0.0) == a;
 +lerp(a, b, 1.0) == b;
 +lerp(a, b, 0.5) == (a + b) / 2; // Среднее арифметическое от a и b
 +</code>
 +
 +<code>
 +// Простая анимация.
 +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);
 +}
 +</code>
 +
 +==== 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|Эта функция возвращает несколько значений.]]
 +
 +**Пример**
 +
 +<code>
 +RotateVector(x, y, angle);
 +int newX = r1;
 +int newY = r2;
 +</code>
 +
 +==== VectorToAngles ====
 +''angle, angle VectorToAngles(fixed x, fixed y, fixed z)''
 +
 +Конвертирует вектор в пару углов (рысканье и тангаж (поворот и наклон)), которые направлены туда же.
 +
 +[[..mulretval|Эта функция возвращает несколько значений.]]
 +
 +**Пример**
 +
 +<code>
 +// Заставляет игрока смотреть по вектору
 +VectorToAngles(1.0, 2.0, 3.0);
 +int angle = r1;
 +int pitch = r2;
 +SetActorAngle(angle);
 +SetActorPitch(pitch);
 +</code>
ru/functions/math.txt · Last modified: 2016/05/05 00:53 by djskaarj