Clase de matriz homogenea dominante por filas de 4x4. Más...
#include <Maths.h>
Métodos públicos | |
Matrix4 (float m11, float m12, float m13, float m14, float m21, float m22, float m23, float m24, float m31, float m32, float m33, float m34, float m41, float m42, float m43, float m44) | |
float * | operator[] (int row) |
const float * | operator[] (int row) const |
bool | operator== (const Matrix4 &rhs) const |
bool | operator!= (const Matrix4 &rhs) const |
Matrix4 & | operator+= (const Matrix4 &rhs) |
Matrix4 & | operator-= (const Matrix4 &rhs) |
Matrix4 & | operator*= (const Matrix4 &rhs) |
Matrix4 & | operator*= (float scalar) |
Matrix4 & | operator/= (float scalar) |
Matrix4 | operator+ (const Matrix4 &rhs) const |
Matrix4 | operator- (const Matrix4 &rhs) const |
Matrix4 | operator* (const Matrix4 &rhs) const |
Matrix4 | operator* (float scalar) const |
Matrix4 | operator/ (float scalar) const |
float | determinant () const |
void | fromAxes (const Vector3 &x, const Vector3 &y, const Vector3 &z) |
void | fromAxesTransposed (const Vector3 &x, const Vector3 &y, const Vector3 &z) |
void | fromHeadPitchRoll (float headDegrees, float pitchDegrees, float rollDegrees) |
void | identity () |
Matrix4 | inverse () const |
void | orient (const Vector3 &from, const Vector3 &to) |
void | rotate (const Vector3 &axis, float degrees) |
void | scale (float sx, float sy, float sz) |
void | toAxes (Vector3 &x, Vector3 &y, Vector3 &z) const |
void | toAxesTransposed (Vector3 &x, Vector3 &y, Vector3 &z) const |
void | toHeadPitchRoll (float &headDegrees, float &pitchDegrees, float &rollDegrees) const |
void | translate (float tx, float ty, float tz) |
Matrix4 | transpose () const |
const float * | getRaw () const |
float * | getRawWritable () |
Métodos públicos estáticos | |
static Matrix4 | createFromAxes (const Vector3 &x, const Vector3 &y, const Vector3 &z) |
static Matrix4 | createFromAxesTransposed (const Vector3 &x, const Vector3 &y, const Vector3 &z) |
static Matrix4 | createFromHeadPitchRoll (float headDegrees, float pitchDegrees, float rollDegrees) |
static Matrix4 | createMirror (const Vector3 &planeNormal, const Vector3 &pointOnPlane) |
static Matrix4 | createOrient (const Vector3 &from, const Vector3 &to) |
static Matrix4 | createRotate (const Vector3 &axis, float degrees) |
static Matrix4 | createScale (float sx, float sy, float sz) |
static Matrix4 | createTranslate (float tx, float ty, float tz) |
Atributos públicos estáticos | |
static const Matrix4 | IDENTITY |
Amigas | |
Vector4 | operator* (const Vector4 &lhs, const Matrix4 &rhs) |
Vector3 | operator* (const Vector3 &lhs, const Matrix4 &rhs) |
Matrix4 | operator* (float scalar, const Matrix4 &rhs) |
Clase de matriz homogenea dominante por filas de 4x4.
Las matrices son concatenadas de izquierda a derecha. Los vectores se multiplican a la izquierda de la matriz.
Matrix4 Matrix4::createMirror | ( | const Vector3 & | planeNormal, | |
const Vector3 & | pointOnPlane | |||
) | [static] |
Crea una matriz de reflexion dado un plano arbitrario que pasa por la posicion especificada.
Ronald Goldman, "Matrices and Transformation," Graphics Gems, 1990.
void Matrix4::fromHeadPitchRoll | ( | float | headDegrees, | |
float | pitchDegrees, | |||
float | rollDegrees | |||
) |
Construye una matriz de rotacion basada en una transformacion de Euler. Se usa el standard de la NASA heading-pitch-roll (i.e., RzRxRy).
Matrix4 Matrix4::inverse | ( | ) | const |
Este metodo de calcular el inverso de una matriz 4x4 esta basado en una funcion similar encontrada en Paul Nettle's matrix template class (http://www.fluidstudios.com).
Si el inverso no existe para esta matriz se devuelve la identidad.
Crea una matriz de orientacion que transforma el vector 'from' al vector 'to'. Para que este metodo funcione correctamente, los vectores 'from' y 'to' deben estar normalizados.
El algoritmo usado es de: Tomas Moller and John F. Hughes, "Efficiently building a matrix to rotate one vector to another," Journal of Graphics Tools, 4(4):1-4, 1999.
void Matrix4::rotate | ( | const Vector3 & | axis, | |
float | degrees | |||
) |
Crea una matriz de rotacion sobre el eje especificado. axis debe estar normalizado. El angulo debe estar en grados.
u = angulo de rotacion = (x, y, z)
| x^2(1 - c) + c xy(1 - c) + zs xz(1 - c) - ys 0 | Ru(angulo) = | yx(1 - c) - zs y^2(1 - c) + c yz(1 - c) + xs 0 | | zx(1 - c) - ys zy(1 - c) - xs z^2(1 - c) + c 0 | | 0 0 0 1 |
donde, c = cos(angulo) s = sin(angulo)
void Matrix4::scale | ( | float | sx, | |
float | sy, | |||
float | sz | |||
) |
Crea una matriz de escalamiento
| sx 0 0 0 | S(sx, sy, sz) = | 0 sy 0 0 | | 0 0 sz 0 | | 0 0 0 1 |
void Matrix4::toHeadPitchRoll | ( | float & | headDegrees, | |
float & | pitchDegrees, | |||
float & | rollDegrees | |||
) | const |
Extrae los angulos de Euler de una matriz de rotacion. Los angulo devueltos estan en grados. Este metodo puede sufrir de impresicion numerica para matrices de rotacion mal formadas.
Esta funcion solo funciona para matrices de rotacion construidas siguiendo el standard de la NASA heading-pitch-roll (i.e., RzRxRy).
El algoritmo usado es de: David Eberly, "Euler Angle Formulas", Geometric Tools web site, http://www.geometrictools.com/Documentation/EulerAngles.pdf.
void Matrix4::translate | ( | float | tx, | |
float | ty, | |||
float | tz | |||
) |
Crea una matriz de traslacion
| 1 0 0 0 | T(tx, ty, tz) = | 0 1 0 0 | | 0 0 1 0 | | tx ty tz 1 |