Métodos públicos | Métodos públicos estáticos | Atributos públicos estáticos | Amigas

Referencia de la Clase Matrix4

Clase de matriz homogenea dominante por filas de 4x4. Más...

#include <Maths.h>

Lista de todos los miembros.

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
Matrix4operator+= (const Matrix4 &rhs)
Matrix4operator-= (const Matrix4 &rhs)
Matrix4operator*= (const Matrix4 &rhs)
Matrix4operator*= (float scalar)
Matrix4operator/= (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)

Descripción detallada

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.


Documentación de las funciones miembro

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.

void Matrix4::orient ( const Vector3 from,
const Vector3 to 
)

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 |


La documentación para esta clase fue generada a partir de los siguientes ficheros: