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
ru:functions:math [2016/04/26 20:54] djskaarjru:functions:math [2016/05/05 00:53] (current) djskaarj
Line 39: Line 39:
  
 Сравнивает два числа и возвращает результат: Сравнивает два числа и возвращает результат:
-  * ''1'' -- a > b +  * ''1'', если a > b 
-  * ''-1'' -- a < b +  * ''-1'', если a < b 
-  * ''0'' -- a = b+  * ''0'', если a = b
  
 ==== dist ==== ==== dist ====
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 84: Line 98:
  
 Возвращает знак числа x. Возвращает знак числа x.
-  * ''1'' -- x > 0 (положительное) +  * ''1'', если x > 0 (положительное) 
-  * ''-1'' -- x < 0 (отрицательное) +  * ''-1'', если x < 0 (отрицательное) 
-  * ''0'' -- x = 0+  * ''0'', если x = 0
  
 **Пример** **Пример**
Line 96: Line 110:
 </code> </code>
  
 +===== Округление =====
  
 +Есть четыре вида округления:
 +
 +  * trunc -- вообще отбрасывается дробная часть
 +  * floor -- округление вниз (до наименьшего ближайшего целого числа)
 +  * ceil -- округление вверх (до наибольшего ближайшего целого числа)
 +  * round -- округляет до ближайшего целого числа
 +
 +Таблица округления:
 +
 +<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 ====
 +''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|линейную интерполяцию]] (или экстраполяцию) между двумя числами и возвращает результат.
 +
 +**Примеры**
 +
 +<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.1461693262.txt.gz · Last modified: 2016/04/26 20:54 by djskaarj