Math Module

Classes

struct  common::POINT_
 Punkt 2D z liczb całkowitych. More...
struct  common::VEC2
 Wektor floatów 2D. More...
struct  common::RECTI
 Prostokąt z liczb całkowitych. More...
struct  common::BOX
 AABB z 2 punktów 3D. More...
struct  common::OBB
 OBB - Oriented Bounding Box - prostopadłościan o dowolnej orientacji. More...
struct  common::RECT3D
 Płaski prostokąt, dowolnie zorientowany w przestrzeni 3D. More...
struct  common::COLOR
 Kolor w formacie A8R8G8B8. More...
struct  common::PLANE
 Płaszczyzna. More...
struct  common::LINE2D
 Prosta 2D. More...
struct  common::MATRIX
 Macierz 4 x 4. More...
struct  common::QUATERNION
 Kwaternion. More...
struct  common::AFFINE2D
 Affine transform of 2D point/vector. More...
class  common::RayToTriangleCalc
 Klasa, która dzięki pamiętaniu wyników pośrednich przyspiesza testowanie kolizji jednego trójkąta z wieloma promieniami. More...

Modules

 Punkt 2D z liczb całkowitych
 Wektor floatów 2D, 3D, 4D
 Trójkąt
 Promień
 Prostokąt
 AABB
 Rect 3D
 Kolory
 Płaszczyzna
 Prosta 2D
 Macierz
 Kwaternion
 Affine 2D transform
 Frustum
 Kapsuła
 Wygładzanie zmiennej
 Współrzędne sferyczne
 Curves
 Kolizje
 Poisson Disc
 Vector swizzling

Functions

template<typename DestT , typename SrcT >
DestT & common::math_cast (const SrcT &x)
 Szablon bazowy do konwersji między typami matematycznymi.
void common::ConvexHull2D (std::vector< VEC2 > *OutPoints, const VEC2 InPoints[], size_t InPointCount)
 Zwraca wypukłą otoczkę zbioru punktów 2D.
size_t common::ClosestPoint (const VEC2 &p, const VEC2 Points[], size_t PointCount, float *OutDistance=NULL)
 Z podanej tablicy punktów typu VEC2 znajduje punkt najbliższy względem p, zwraca jego indeks.
size_t common::ClosestPoint (const VEC2 &p, const void *Data, size_t PointCount, int Stride, float *OutDistance=NULL)
size_t common::ClosestPoint (const VEC3 &p, const VEC3 Points[], size_t PointCount, float *OutDistance=NULL)
 Z podanej tablicy punktów typu VEC3 znajduje punkt najbliższy względem p, zwraca jego indeks.
size_t common::ClosestPoint (const VEC3 &p, const void *Data, size_t PointCount, int Stride, float *OutDistance=NULL)
size_t common::FurthestPoint (const VEC2 &p, const VEC2 Points[], size_t PointCount, float *OutDistance=NULL)
 Z podanej tablicy punktów typu VEC2 znajduje punkt najdalszy względem p, zwraca jego indeks.
size_t common::FurthestPoint (const VEC2 &p, const void *Data, size_t PointCount, int Stride, float *OutDistance=NULL)
size_t common::FurthestPoint (const VEC3 &p, const VEC3 Points[], size_t PointCount, float *OutDistance=NULL)
 Z podanej tablicy punktów typu VEC3 znajduje punkt najdalszy względem p, zwraca jego indeks.
size_t common::FurthestPoint (const VEC3 &p, const void *Data, size_t PointCount, int Stride, float *OutDistance=NULL)
size_t common::FurthestPointForDir (const VEC2 &Dir, const VEC2 Points[], size_t PointCount)
 Z podanej tablicy punktów typu VEC2 znajduje najbardziej wysunięty w kierunku określonym przez Dir. Zwraca jego indeks.
size_t common::FurthestPointForDir (const VEC2 &Dir, const void *Data, size_t PointCount, int Stride)
size_t common::FurthestPointForDir (const VEC3 &Dir, const VEC3 Points[], size_t PointCount)
 Z podanej tablicy punktów typu VEC3 znajduje najbardziej wysunięty w kierunku określonym przez Dir. Zwraca jego indeks.
size_t common::FurthestPointForDir (const VEC3 &Dir, const void *Data, size_t PointCount, int Stride)
void common::RectBoundingPoints (RECTF *OutRect, const VEC2 Points[], size_t PointCount)
 Tworzy najmniejszy prostokąt otaczający podany zbiór punktów typu VEC2.
void common::RectBoundingPoints (RECTF *OutRect, const void *Data, size_t PointCount, int Stride)
void common::BoxBoundingPoints (BOX *box, const VEC3 points[], size_t PointCount)
 Tworzy najmniejszy boks otaczający podany zbiór punktów typu VEC3.
void common::BoxBoundingPoints (BOX *box, const void *Data, size_t PointCount, int Stride)
void common::SphereBoundingSpheres (VEC3 *OutCenter, float *OutRadius, const VEC3 &Center1, float Radius1, const VEC3 &Center2, float Radius2)
 Liczy sferę otaczającą dwie sfery.
void common::CircleBoundingPoints (VEC2 *OutSphereCenter, float *OutSphereRadius, const VEC2 Points[], size_t PointCount)
 Znajduje okrąg otaczający podany zbiór punktów typu VEC2.
void common::CircleBoundingPoints (VEC2 *OutSphereCenter, float *OutSphereRadius, const void *PointData, size_t PointCount, int PointStride)
void common::SphereBoundingPoints (VEC3 *OutSphereCenter, float *OutSphereRadius, const VEC3 Points[], size_t PointCount)
 Znajduje sferę otaczającą podany zbiór punktów typu VEC3.
void common::SphereBoundingPoints (VEC3 *OutSphereCenter, float *OutSphereRadius, const void *PointData, size_t PointCount, int PointStride)
void common::OriginCircleBoundingPoints (float *OutRadius, const VEC2 Points[], size_t PointCount)
 Znajduje promień najmniejszego okręgu o środku (0,0) otaczającego podany zbiór punktów 2D.
void common::OriginCircleBoundingPoints (float *OutRadius, const void *PointData, size_t PointCount, int PointStride)
void common::OriginSphereBoundingPoints (float *OutRadius, const VEC3 Points[], size_t PointCount)
 Znajduje promień najmniejszej sfery o środku (0,0) otaczającej podany zbiór punktów 3D.
void common::OriginSphereBoundingPoints (float *OutRadius, const void *PointData, size_t PointCount, int PointStride)
void common::CalcCentroid (VEC2 *OutCentroid, const VEC2 Points[], size_t PointCount)
 Dla podanego zbioru punktów typu VEC2 oblicza ich centroid, czyli po prostu średnią.
void common::CalcCentroid (VEC2 *OutCentroid, const void *PointData, size_t PointCount, int PointStride)
void common::CalcCentroid (VEC3 *OutCentroid, const VEC3 Points[], size_t PointCount)
 Dla podanego zbioru punktów typu VEC3 oblicza ich centroid, czyli po prostu średnią.
void common::CalcCentroid (VEC3 *OutCentroid, const void *PointData, size_t PointCount, int PointStride)
void common::CalcCovarianceMatrix (MATRIX33 *OutCov, const VEC3 Points[], size_t PointCount)
 Oblicza macierz kowariancji dla podanego zbioru punktów typu VEC3.
void common::CalcCovarianceMatrix (MATRIX33 *OutCov, const void *PointData, size_t PointCount, int PointStride)
void common::CalcEigenvaluesAndEigenvectors (MATRIX33 *InCovOutEigenvalues, MATRIX33 *OutEigenvectors)
 Oblicza wartości własne i wektory własne dla podanej macierzy symetrycznej (np. macierz kowariancji).
void common::BoxBoundingSphere (VEC3 *SphereCenter, float *SphereRadius, const BOX &Box)
 Oblicza sferę otaczającą box.
void common::SphereBoundingBox (BOX *Out, const VEC3 &SphereCenter, float SphereRadius)
 Oblicza box otaczający sferę.
void common::BoxBoundingSpheres (BOX *OutBox, const VEC3 SpheresCenter[], const float SpheresRadius[], size_t SphereCount)
 Wylicza AABB otaczający podany zbiór sfer.
void common::RandomPointInUnitSphere (VEC3 *Out, RandomGenerator &Rand)
 Losuje punkt wewnątrz kuli o środku w (0,0,0) i promieniu 1. Rozkład równomierny.
void common::RandomPointInUnitSphere (VEC3 *Out)
void common::RandomPointInUnitCircle (VEC2 *Out, RandomGenerator &Rand)
 Losuje punkt wewnątrz koła o środku w (0,0) i promieniu 1. Rozkład równomierny.
void common::RandomPointInUnitCircle (VEC2 *Out)
void common::CalcBillboardOrientation (VEC3 *OutRight, VEC3 *OutUp, unsigned DegreesOfFreedom, bool UseRealDir, const VEC3 &DefinedRight, const VEC3 &DefinedUp, const VEC3 &CamRightDir, const VEC3 &CamRealUpDir, const VEC3 &CameraToObjectDir)
 Calculates orientation of a 3D billboard in according to its parameters and camera parameters.

Variables

const float common::FLOAT_EPSILON = 1e-6f
 Mała stała.
const MATRIX common::HL2_TO_TANGENT_MATRIX
const MATRIX common::TANGENT_TO_HL2_MATRIX
const VEC3 common::HL2_BASIS_VECTORS [3]
 Wektory bazowe HL2 Space wyrażone w Tangent Space.

Detailed Description

Dokumentacja: Module_Math
Nagłówek: Math.hpp


Function Documentation

void common::BoxBoundingPoints ( BOX *  box,
const void *  Data,
size_t  PointCount,
int  Stride 
)
void common::BoxBoundingPoints ( BOX *  box,
const VEC3  points[],
size_t  PointCount 
)

Tworzy najmniejszy boks otaczający podany zbiór punktów typu VEC3.

void common::BoxBoundingSphere ( VEC3 *  SphereCenter,
float *  SphereRadius,
const BOX &  Box 
)

Oblicza sferę otaczającą box.

void common::BoxBoundingSpheres ( BOX *  OutBox,
const VEC3  SpheresCenter[],
const float  SpheresRadius[],
size_t  SphereCount 
)

Wylicza AABB otaczający podany zbiór sfer.

Parameters:
SphereCount Musi być większe od 0.
void common::CalcBillboardOrientation ( VEC3 *  OutRight,
VEC3 *  OutUp,
unsigned  DegreesOfFreedom,
bool  UseRealDir,
const VEC3 &  DefinedRight,
const VEC3 &  DefinedUp,
const VEC3 &  CamRightDir,
const VEC3 &  CamRealUpDir,
const VEC3 &  CameraToObjectDir 
)

Calculates orientation of a 3D billboard in according to its parameters and camera parameters.

OutRight, OutUp will be normalized vectors with X, Y directions for the billboard.
DegreesOfFreedom and UseRealDir control billboard orientation mode. DegreesOfFreedom may be 0, 1, 2.
0 = billboard not rotating at all (DefinedRight and DefinedUp required).
1 = billboard rotating only around its Y axis (DefinedUp required).
2 = billboard rotating around its Y and X axes (neither DefinedRight nor DefinedUp required).
DefinedRight and DefinedUp are original direction vectors of a billboard.
CamRightDir must be orthogonal to CamReadUpDir, so CamRealUpDir cannot be constant like VEC3_POSITIVE_Y.
CameraToObjectDir must be normalize(BillboardCenterPos - EyePos).

void common::CalcCentroid ( VEC3 *  OutCentroid,
const void *  PointData,
size_t  PointCount,
int  PointStride 
)
void common::CalcCentroid ( VEC3 *  OutCentroid,
const VEC3  Points[],
size_t  PointCount 
)

Dla podanego zbioru punktów typu VEC3 oblicza ich centroid, czyli po prostu średnią.

void common::CalcCentroid ( VEC2 *  OutCentroid,
const void *  PointData,
size_t  PointCount,
int  PointStride 
)
void common::CalcCentroid ( VEC2 *  OutCentroid,
const VEC2  Points[],
size_t  PointCount 
)

Dla podanego zbioru punktów typu VEC2 oblicza ich centroid, czyli po prostu średnią.

void common::CalcCovarianceMatrix ( MATRIX33 *  OutCov,
const void *  PointData,
size_t  PointCount,
int  PointStride 
)
void common::CalcCovarianceMatrix ( MATRIX33 *  OutCov,
const VEC3  Points[],
size_t  PointCount 
)

Oblicza macierz kowariancji dla podanego zbioru punktów typu VEC3.

void common::CalcEigenvaluesAndEigenvectors ( MATRIX33 *  InCovOutEigenvalues,
MATRIX33 *  OutEigenvectors 
)

Oblicza wartości własne i wektory własne dla podanej macierzy symetrycznej (np. macierz kowariancji).

Uwaga! Dużo obliczeń, procedura iteracyjna. Może działać wolno.

Parameters:
InCovOutEigenvalues [in,out] Jako wejście - dana macierz. Jako wyjście - na przekątnej ma wartości własne.
OutEigenvectors [out] Wektory własne zapisane w kolumnach.
void common::CircleBoundingPoints ( VEC2 *  OutSphereCenter,
float *  OutSphereRadius,
const void *  PointData,
size_t  PointCount,
int  PointStride 
)
void common::CircleBoundingPoints ( VEC2 *  OutSphereCenter,
float *  OutSphereRadius,
const VEC2  Points[],
size_t  PointCount 
)

Znajduje okrąg otaczający podany zbiór punktów typu VEC2.

Nie jest to może najmniejszy okrąg, ale przynajmniej ten algorytm jest prosty i szybki.

size_t common::ClosestPoint ( const VEC3 &  p,
const void *  Data,
size_t  PointCount,
int  Stride,
float *  OutDistance = NULL 
)
size_t common::ClosestPoint ( const VEC3 &  p,
const VEC3  Points[],
size_t  PointCount,
float *  OutDistance = NULL 
)

Z podanej tablicy punktów typu VEC3 znajduje punkt najbliższy względem p, zwraca jego indeks.

Parameters:
OutDistance jest opcjonalny, można podać NULL Jeśli odległość od niego nas nie interesuje.
size_t common::ClosestPoint ( const VEC2 &  p,
const void *  Data,
size_t  PointCount,
int  Stride,
float *  OutDistance = NULL 
)
size_t common::ClosestPoint ( const VEC2 &  p,
const VEC2  Points[],
size_t  PointCount,
float *  OutDistance = NULL 
)

Z podanej tablicy punktów typu VEC2 znajduje punkt najbliższy względem p, zwraca jego indeks.

Parameters:
OutDistance jest opcjonalny, można podać NULL Jeśli odległość od niego nas nie interesuje.
void common::ConvexHull2D ( std::vector< VEC2 > *  OutPoints,
const VEC2  InPoints[],
size_t  InPointCount 
)

Zwraca wypukłą otoczkę zbioru punktów 2D.

  • Na wejściu musi być co najmniej jeden punkt.
  • Punkty będą ułożone zgodnie z ruchem wskazówek zegara, jeśli układ jest X w prawo a Y w dół.
  • Punkty powtarzające się są chyba usuwane, tzn. wynik jest bez powtórzeń.
  • Punkty leżące na prostej krawędzi raz pojawiają się w wyniku a raz nie - niezdefiniowane.
size_t common::FurthestPoint ( const VEC3 &  p,
const void *  Data,
size_t  PointCount,
int  Stride,
float *  OutDistance = NULL 
)
size_t common::FurthestPoint ( const VEC3 &  p,
const VEC3  Points[],
size_t  PointCount,
float *  OutDistance = NULL 
)

Z podanej tablicy punktów typu VEC3 znajduje punkt najdalszy względem p, zwraca jego indeks.

Parameters:
OutDistance jest opcjonalny, można podać NULL Jeśli odległość od niego nas nie interesuje.
size_t common::FurthestPoint ( const VEC2 &  p,
const void *  Data,
size_t  PointCount,
int  Stride,
float *  OutDistance = NULL 
)
size_t common::FurthestPoint ( const VEC2 &  p,
const VEC2  Points[],
size_t  PointCount,
float *  OutDistance = NULL 
)

Z podanej tablicy punktów typu VEC2 znajduje punkt najdalszy względem p, zwraca jego indeks.

Parameters:
OutDistance jest opcjonalny, można podać NULL Jeśli odległość od niego nas nie interesuje.
size_t common::FurthestPointForDir ( const VEC3 &  Dir,
const void *  Data,
size_t  PointCount,
int  Stride 
)
size_t common::FurthestPointForDir ( const VEC3 &  Dir,
const VEC3  Points[],
size_t  PointCount 
)

Z podanej tablicy punktów typu VEC3 znajduje najbardziej wysunięty w kierunku określonym przez Dir. Zwraca jego indeks.

size_t common::FurthestPointForDir ( const VEC2 &  Dir,
const void *  Data,
size_t  PointCount,
int  Stride 
)
size_t common::FurthestPointForDir ( const VEC2 &  Dir,
const VEC2  Points[],
size_t  PointCount 
)

Z podanej tablicy punktów typu VEC2 znajduje najbardziej wysunięty w kierunku określonym przez Dir. Zwraca jego indeks.

template<typename DestT , typename SrcT >
DestT& common::math_cast ( const SrcT &  x  )  [inline]

Szablon bazowy do konwersji między typami matematycznymi.

Ta wersja nie działa, specjalizacje będą działać.

void common::OriginCircleBoundingPoints ( float *  OutRadius,
const void *  PointData,
size_t  PointCount,
int  PointStride 
)
void common::OriginCircleBoundingPoints ( float *  OutRadius,
const VEC2  Points[],
size_t  PointCount 
)

Znajduje promień najmniejszego okręgu o środku (0,0) otaczającego podany zbiór punktów 2D.

void common::OriginSphereBoundingPoints ( float *  OutRadius,
const void *  PointData,
size_t  PointCount,
int  PointStride 
)
void common::OriginSphereBoundingPoints ( float *  OutRadius,
const VEC3  Points[],
size_t  PointCount 
)

Znajduje promień najmniejszej sfery o środku (0,0) otaczającej podany zbiór punktów 3D.

void common::RandomPointInUnitCircle ( VEC2 *  Out  ) 
void common::RandomPointInUnitCircle ( VEC2 *  Out,
RandomGenerator &  Rand 
)

Losuje punkt wewnątrz koła o środku w (0,0) i promieniu 1. Rozkład równomierny.

void common::RandomPointInUnitSphere ( VEC3 *  Out  ) 
void common::RandomPointInUnitSphere ( VEC3 *  Out,
RandomGenerator &  Rand 
)

Losuje punkt wewnątrz kuli o środku w (0,0,0) i promieniu 1. Rozkład równomierny.

void common::RectBoundingPoints ( RECTF *  OutRect,
const void *  Data,
size_t  PointCount,
int  Stride 
)
void common::RectBoundingPoints ( RECTF *  OutRect,
const VEC2  Points[],
size_t  PointCount 
)

Tworzy najmniejszy prostokąt otaczający podany zbiór punktów typu VEC2.

void common::SphereBoundingBox ( BOX *  Out,
const VEC3 &  SphereCenter,
float  SphereRadius 
)

Oblicza box otaczający sferę.

void common::SphereBoundingPoints ( VEC3 *  OutSphereCenter,
float *  OutSphereRadius,
const void *  PointData,
size_t  PointCount,
int  PointStride 
)
void common::SphereBoundingPoints ( VEC3 *  OutSphereCenter,
float *  OutSphereRadius,
const VEC3  Points[],
size_t  PointCount 
)

Znajduje sferę otaczającą podany zbiór punktów typu VEC3.

Nie jest to może najmniejsza sfera, ale przynajmniej ten algorytm jest prosty i szybki.

void common::SphereBoundingSpheres ( VEC3 *  OutCenter,
float *  OutRadius,
const VEC3 &  Center1,
float  Radius1,
const VEC3 &  Center2,
float  Radius2 
)

Liczy sferę otaczającą dwie sfery.


Variable Documentation

const float common::FLOAT_EPSILON = 1e-6f

Mała stała.

Wektory bazowe HL2 Space wyrażone w Tangent Space.

Macierz rotacji przekształcająca wektory z przestrzeni Half-Life 2 do przestrzeni stycznej Tangent Space i jej transpozycja przekształcająca z powrotem. To są macierz ortogonalne.

b0 = ( -1/sqrt(6), -1/sqrt(2), 1/sqrt(3) )
b1 = ( -1/sqrt(6),  1/sqrt(2), 1/sqrt(3) )
b2 = ( sqrt(2/3),   0,         1/sqrt(3) )

Generated on Wed Dec 16 20:44:53 2009 for CommonLib by  doxygen 1.6.1