Podstawowa matematyka
[Moduł Base]


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.

Opis szczegółowy


Dokumentacja definicji

#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!


Dokumentacja funkcji

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.

template<typename T>
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)

uint4 common::greater_power_of_2 ( uint4  x  )  [inline]

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.

template<typename T>
T common::max3 ( const T &  a,
const T &  b,
const T &  c 
) [inline]

Zwraca największą z podanych 3 liczb.

template<typename T>
T common::min3 ( const T &  a,
const T &  b,
const T &  c 
) [inline]

Zwraca najmniejszą z podanych 3 liczb.

template<typename T>
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.

template<typename T>
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.

  • Brak pierwiastków - zwraca 0, x1 i x2 niezdefiniowane.
  • Jeden pierwiastek - zwraca 1, x1 = x2 = jedyne rozwiązanie.
  • Dwa pierwistki - zwraca 2, x1 to pierwszy pierwiastek, x2 to drugi

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.

template<typename T>
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)

template<typename T>
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)

template<typename T>
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.

Parametry:
[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)


Wygenerowano Sat Mar 29 18:17:00 2008 dla CommonLib programem  doxygen 1.5.5