Moduły | |
| Maksymalne i minimalne wartości | |
| Stałe matematyczne | |
| Szum Perlina | |
| Funkcje okresowe | |
| Generator liczb pseudolosowych | |
Komponenty | |
| class | common::RandomGenerator |
| Generator liczb pseudolosowych. Więcej... | |
Definicje | |
| #define | FLOAT_ALMOST_ZERO(F) ((absolute_cast<uint4>(F) & 0x7f800000L) == 0) |
| Liczba zmiennoprzecinkowa bliska zeru. | |
Funkcje | |
| bool | common::is_finite (float x) |
| Zwraca true, jeśli liczba jest niezwyczajna (INF lub NaN). | |
| bool | common::is_finite (double x) |
| Zwraca true, jeśli liczba jest niezwyczajna (INF lub NaN). | |
| bool | common::is_nan (float x) |
| Zwraca true, jeśli liczba jest NaN. | |
| bool | common::is_nan (double x) |
| Zwraca true, jeśli liczba jest NaN. | |
| template<typename T> | |
| T | common::safe_add (T a, T b) |
| Dodaje dwie liczby z ograniczeniem zakresu zamiast zawinięcia przy przepełnieniu. | |
| template<typename T> | |
| T | common::safe_sub (T a, T b) |
| Odejmuje dwie liczby z ograniczeniem zakresu zamiast zawinięcia przy przepełnieniu. | |
| template<typename T> | |
| T | common::safe_mul (T a, T b) |
| Mnoży dwie liczby z ograniczeniem zakresu zamiast zawinięcia przy przepełnieniu. | |
| float | common::safe_acos (float x) |
| Bezpieczny arcus cosinus, ogranicza zakres wejściowy do -1...+1 zwracając w razie przekrocznia skrajne wartości wyniku. | |
| int | common::round (float x) |
| Zaokrągla liczbę, zamiast ją obcinać. | |
| int | common::round (double x) |
| template<typename T> | |
| T | common::ceil_div (T x, T y) |
| Dzieli 2 liczby całkowite zaokrąglając wynik w górę. | |
| bool | common::around (float x, float epsilon) |
| Zwraca true, jeśli liczba leży w epsilonowym otoczeniu zera. | |
| bool | common::around (double x, double epsilon) |
| bool | common::around (float x, float y, float epsilon) |
| Zwraca true, jeśli liczba leży w epsilonowym otoczeniu drugiej liczby. | |
| bool | common::around (double x, double y, double epsilon) |
| bool | common::float_equal (float x, float y) |
| Zwraca true, jeśli dwie liczby zmiennoprzecinkowe są praktycznie równe. | |
| bool | common::double_equal (double x, double y) |
| uint4 | common::greater_power_of_2 (uint4 x) |
| Zwraca najmniejszą potęgę dwójki większą lub równą podanej liczbie. | |
| template<typename T> | |
| T | common::powi (T a, uint4 b) |
| Liczy potęge o całkowitym wykładniku (bardzo szybko!). | |
| template<typename T> | |
| T | common::max3 (const T &a, const T &b, const T &c) |
| Zwraca największą z podanych 3 liczb. | |
| template<typename T> | |
| T | common::min3 (const T &a, const T &b, const T &c) |
| Zwraca najmniejszą z podanych 3 liczb. | |
| template<typename T> | |
| T | common::minmax (const T &a, const T &x, const T &b) |
| Zwraca liczbę x ograniczoną do podanego zakresu od a do b. | |
| float | common::trunc (float x) |
| Zwraca część całkowitą liczby wraz ze znakiem. | |
| double | common::trunc (double x) |
| float | common::frac (float x) |
| Zwraca część ułamkową liczby wraz ze znakiem. | |
| double | common::frac (double x) |
| float | common::Lerp (float x, float y, float t) |
| Interpolacja liniowa 1D (t = 0..1). | |
| float | common::SafeLerp (float x, float y, float t) |
| Interpolacja liniowa 1D (t jest ograniczane do 0..1). | |
| float | common::Lerp2D (float x11, float x21, float x12, float x22, float tx, float ty) |
| Interpolacja liniowa 2D. | |
| float | common::NormalizeAngle (float angle) |
| Normalizuje kąt do przedziału < 0..2PI ). | |
| float | common::NormalizeAngle2 (float Angle) |
| Normalizuje kąt do przedziału -PI..+PI. | |
| float | common::DegToRad (float Angle) |
| Przelicza kąt ze stopni na radiany. | |
| float | common::RadToDeg (float Angle) |
| Przelicza kąt z radianów na stopnie. | |
| float | common::AngleDiff (float A, float B) |
| Oblicza różnicę kątów A-B, gdzie A, B należą do: 0..2*PI. | |
| void | common::SmoothCD (float *InOutPos, float Dest, float *InOutVel, float SmoothTime, float TimeDelta) |
| Funkcja wygładzająca - Critically Damped Smoothing. | |
| void | common::SmoothCD (float *InOutPos, float Dest, float *InOutVel, float SmoothTime, float TimeDelta, float MaxSpeed) |
| float | common::Trapezoidal (float x, float a, float b, float c, float d) |
| Zwraca liczbę z przedziału 0..1, zależnie od wartości x względem brzegów trapezu a, b, c, d. | |
| float | common::Trapezoidal (float x, float a, float b, float c, float d, float min, float max) |
| Jak Trapezoidal(), ale zamiast 0..1 zwraca liczbę z przedziału min..max. | |
| int | common::QuadraticEquation (float a, float b, float c, float *Out_x1, float *Out_x2) |
| Równanie kwadratowe a*x^2 + b*x + c = 0. | |
| #define FLOAT_ALMOST_ZERO | ( | F | ) | ((absolute_cast<uint4>(F) & 0x7f800000L) == 0) |
Liczba zmiennoprzecinkowa bliska zeru.
O dziwo to makro zamienione na funkcję inline działa wolniej - nigdy nie ufaj optymalizacji kompilatora!
| float common::AngleDiff | ( | float | A, | |
| float | B | |||
| ) | [inline] |
Oblicza różnicę kątów A-B, gdzie A, B należą do: 0..2*PI.
Uwzględnia przekręcanie się kątów, znajduje więc najkrótszą drogę między nimi.
| bool common::around | ( | double | x, | |
| double | y, | |||
| double | epsilon | |||
| ) | [inline] |
| bool common::around | ( | float | x, | |
| float | y, | |||
| float | epsilon | |||
| ) | [inline] |
Zwraca true, jeśli liczba leży w epsilonowym otoczeniu drugiej liczby.
| bool common::around | ( | double | x, | |
| double | epsilon | |||
| ) | [inline] |
| bool common::around | ( | float | x, | |
| float | epsilon | |||
| ) | [inline] |
Zwraca true, jeśli liczba leży w epsilonowym otoczeniu zera.
| T common::ceil_div | ( | T | x, | |
| T | y | |||
| ) | [inline] |
Dzieli 2 liczby całkowite zaokrąglając wynik w górę.
Jako typ stosować int, uint itp. Działa tylko dla liczb dodatnich. Uważać na przekroczenie zakresu liczby (x+y). (Author: Tarlandil)
| float common::DegToRad | ( | float | Angle | ) | [inline] |
Przelicza kąt ze stopni na radiany.
| bool common::double_equal | ( | double | x, | |
| double | y | |||
| ) | [inline] |
| bool common::float_equal | ( | float | x, | |
| float | y | |||
| ) | [inline] |
Zwraca true, jeśli dwie liczby zmiennoprzecinkowe są praktycznie równe.
Te funkcje są fajne bo nie trzeba znać epsilona, ale za to jest więcej liczenia. (Autor: Tarlandil)
| double common::frac | ( | double | x | ) | [inline] |
| float common::frac | ( | float | x | ) | [inline] |
Zwraca część ułamkową liczby wraz ze znakiem.
(Autor: Tarlandil)
Zwraca najmniejszą potęgę dwójki większą lub równą podanej liczbie.
(Autor: Tarlandil)
| bool common::is_finite | ( | double | x | ) |
Zwraca true, jeśli liczba jest niezwyczajna (INF lub NaN).
| bool common::is_finite | ( | float | x | ) |
Zwraca true, jeśli liczba jest niezwyczajna (INF lub NaN).
| bool common::is_nan | ( | double | x | ) |
Zwraca true, jeśli liczba jest NaN.
| bool common::is_nan | ( | float | x | ) |
Zwraca true, jeśli liczba jest NaN.
| float common::Lerp | ( | float | x, | |
| float | y, | |||
| float | t | |||
| ) | [inline] |
Interpolacja liniowa 1D (t = 0..1).
| float common::Lerp2D | ( | float | x11, | |
| float | x21, | |||
| float | x12, | |||
| float | x22, | |||
| float | tx, | |||
| float | ty | |||
| ) | [inline] |
Interpolacja liniowa 2D.
tx tyczy się pierwszego indeksu, ty drugiego.
| T common::max3 | ( | const T & | a, | |
| const T & | b, | |||
| const T & | c | |||
| ) | [inline] |
Zwraca największą z podanych 3 liczb.
| T common::min3 | ( | const T & | a, | |
| const T & | b, | |||
| const T & | c | |||
| ) | [inline] |
Zwraca najmniejszą z podanych 3 liczb.
| T common::minmax | ( | const T & | a, | |
| const T & | x, | |||
| const T & | b | |||
| ) | [inline] |
Zwraca liczbę x ograniczoną do podanego zakresu od a do b.
| float common::NormalizeAngle | ( | float | angle | ) | [inline] |
Normalizuje kąt do przedziału < 0..2PI ).
| float common::NormalizeAngle2 | ( | float | Angle | ) | [inline] |
Normalizuje kąt do przedziału -PI..+PI.
| T common::powi | ( | T | a, | |
| uint4 | b | |||
| ) | [inline] |
Liczy potęge o całkowitym wykładniku (bardzo szybko!).
T może być dowolną liczbą - int, uint4, float itp. (Autor: Tarlandil)
| int common::QuadraticEquation | ( | float | a, | |
| float | b, | |||
| float | c, | |||
| float * | Out_x1, | |||
| float * | Out_x2 | |||
| ) |
Równanie kwadratowe a*x^2 + b*x + c = 0.
Musi być: a != 0.
| float common::RadToDeg | ( | float | Angle | ) | [inline] |
Przelicza kąt z radianów na stopnie.
| int common::round | ( | double | x | ) | [inline] |
| int common::round | ( | float | x | ) | [inline] |
Zaokrągla liczbę, zamiast ją obcinać.
Tak matematycznie, czyli do góry lub w dół zależnie od części ułamkowej.
| float common::safe_acos | ( | float | x | ) | [inline] |
Bezpieczny arcus cosinus, ogranicza zakres wejściowy do -1...+1 zwracając w razie przekrocznia skrajne wartości wyniku.
| T common::safe_add | ( | T | a, | |
| T | b | |||
| ) | [inline] |
Dodaje dwie liczby z ograniczeniem zakresu zamiast zawinięcia przy przepełnieniu.
Jako T używać uint1, uint2, uint4, uint8 (Autor: Tarlandil)
| T common::safe_mul | ( | T | a, | |
| T | b | |||
| ) | [inline] |
Mnoży dwie liczby z ograniczeniem zakresu zamiast zawinięcia przy przepełnieniu.
Jako T używać uint1, uint2, uint4, uint8 (Autor: Tarlandil)
| T common::safe_sub | ( | T | a, | |
| T | b | |||
| ) | [inline] |
Odejmuje dwie liczby z ograniczeniem zakresu zamiast zawinięcia przy przepełnieniu.
Jako T używać uint1, uint2, uint4, uint8 (Autor: Tarlandil)
| float common::SafeLerp | ( | float | x, | |
| float | y, | |||
| float | t | |||
| ) | [inline] |
Interpolacja liniowa 1D (t jest ograniczane do 0..1).
| void common::SmoothCD | ( | float * | InOutPos, | |
| float | Dest, | |||
| float * | InOutVel, | |||
| float | SmoothTime, | |||
| float | TimeDelta, | |||
| float | MaxSpeed | |||
| ) |
| void common::SmoothCD | ( | float * | InOutPos, | |
| float | Dest, | |||
| float * | InOutVel, | |||
| float | SmoothTime, | |||
| float | TimeDelta | |||
| ) |
Funkcja wygładzająca - Critically Damped Smoothing.
To jest wyliczane wg równania różniczkowego na jakąśtam sprężynę, dokładnie analitycznie, więc TimeDelta może być dowolnie duże.
| [in,out] | InOutPos | Pozycja przed i po przeliczeniu tego kroku |
| [in,out] | InOutVel | Prędkość przed i po przeliczeniu tego kroku |
| Dest | Pozycja docelowa | |
| SmoothTime | Współczynnik "bezwładności" w jednostkach czasu | |
| TimeDelta | Czas kroku (np. czas od poprzedniej klatki) | |
| MaxSpeed | Maksymalna dopuszczalna prędkość (maksymalna odległość na jaką pozycja może nie nadążać?) |
| float common::Trapezoidal | ( | float | x, | |
| float | a, | |||
| float | b, | |||
| float | c, | |||
| float | d, | |||
| float | min, | |||
| float | max | |||
| ) | [inline] |
Jak Trapezoidal(), ale zamiast 0..1 zwraca liczbę z przedziału min..max.
| float common::Trapezoidal | ( | float | x, | |
| float | a, | |||
| float | b, | |||
| float | c, | |||
| float | d | |||
| ) | [inline] |
Zwraca liczbę z przedziału 0..1, zależnie od wartości x względem brzegów trapezu a, b, c, d.
x < a => 0
a < x < b => 0..1
b < x < c => 1
c < x < d => 1..0
d < x => 0
| double common::trunc | ( | double | x | ) | [inline] |
| float common::trunc | ( | float | x | ) | [inline] |
Zwraca część całkowitą liczby wraz ze znakiem.
(Autor: Tarlandil)
1.5.5