Vegastrike 0.5.1 rc1  1.0
Original sources for Vegastrike Evolved
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Matrix3x3 Class Reference

#include <IceMatrix3x3.h>

Public Member Functions

inline_ Matrix3x3 ()
 Empty constructor. More...
 
inline_ Matrix3x3 (float m00, float m01, float m02, float m10, float m11, float m12, float m20, float m21, float m22)
 Constructor from 9 values. More...
 
inline_ Matrix3x3 (const Matrix3x3 &mat)
 Copy constructor. More...
 
inline_ ~Matrix3x3 ()
 Destructor. More...
 
inline_ void Set (float m00, float m01, float m02, float m10, float m11, float m12, float m20, float m21, float m22)
 Assign values. More...
 
inline_ void SetScale (const Point &p)
 Sets the scale from a Point. The point is put on the diagonal. More...
 
inline_ void SetScale (float sx, float sy, float sz)
 Sets the scale from floats. Values are put on the diagonal. More...
 
inline_ void Scale (const Point &p)
 Scales from a Point. Each row is multiplied by a component. More...
 
inline_ void Scale (float sx, float sy, float sz)
 Scales from floats. Each row is multiplied by a value. More...
 
inline_ void Copy (const Matrix3x3 &source)
 Copy from a Matrix3x3. More...
 
inline_ void GetRow (const udword r, Point &p) const
 Returns a row. More...
 
inline_ const PointGetRow (const udword r) const
 Returns a row. More...
 
inline_ PointGetRow (const udword r)
 Returns a row. More...
 
inline_ void SetRow (const udword r, const Point &p)
 Sets a row. More...
 
inline_ void GetCol (const udword c, Point &p) const
 Returns a column. More...
 
inline_ void SetCol (const udword c, const Point &p)
 Sets a column. More...
 
inline_ float Trace () const
 Computes the trace. The trace is the sum of the 3 diagonal components. More...
 
inline_ void Zero ()
 Clears the matrix. More...
 
inline_ void Identity ()
 Sets the identity matrix. More...
 
inline_ bool IsIdentity () const
 Checks for identity. More...
 
inline_ BOOL IsValid () const
 Checks matrix validity. More...
 
inline_ void SkewSymmetric (const Point &a)
 
inline_ void Neg ()
 Negates the matrix. More...
 
inline_ void Neg (const Matrix3x3 &mat)
 Neg from another matrix. More...
 
inline_ void Add (const Matrix3x3 &mat)
 Add another matrix. More...
 
inline_ void Sub (const Matrix3x3 &mat)
 Sub another matrix. More...
 
inline_ void Mac (const Matrix3x3 &a, const Matrix3x3 &b, float s)
 Mac. More...
 
inline_ void Mac (const Matrix3x3 &a, float s)
 Mac. More...
 
inline_ void Mult (const Matrix3x3 &a, float s)
 this = A * s More...
 
inline_ void Add (const Matrix3x3 &a, const Matrix3x3 &b)
 
inline_ void Sub (const Matrix3x3 &a, const Matrix3x3 &b)
 
inline_ void Mult (const Matrix3x3 &a, const Matrix3x3 &b)
 this = a * b More...
 
inline_ void MultAtB (const Matrix3x3 &a, const Matrix3x3 &b)
 this = transpose(a) * b More...
 
inline_ void MultABt (const Matrix3x3 &a, const Matrix3x3 &b)
 this = a * transpose(b) More...
 
Matrix3x3FromTo (const Point &from, const Point &to)
 Makes a rotation matrix mapping vector "from" to vector "to". More...
 
void RotX (float angle)
 
void RotY (float angle)
 
void RotZ (float angle)
 
void RotYX (float y, float x)
 
Matrix3x3Rot (float angle, const Point &axis)
 Make a rotation matrix about an arbitrary axis. More...
 
void Transpose ()
 Transpose the matrix. More...
 
void Transpose (const Matrix3x3 &a)
 this = Transpose(a) More...
 
float Determinant () const
 Compute the determinant of the matrix. We use the rule of Sarrus. More...
 
Matrix3x3Invert ()
 Invert the matrix. Determinant must be different from zero, else matrix can't be inverted. More...
 
Matrix3x3Normalize ()
 
Matrix3x3Exp (const Matrix3x3 &a)
 this = exp(a) More...
 
void FromQuat (const Quat &q)
 
void FromQuatL2 (const Quat &q, float l2)
 
inline_ Matrix3x3 operator+ (const Matrix3x3 &mat) const
 Operator for Matrix3x3 Plus = Matrix3x3 + Matrix3x3;. More...
 
inline_ Matrix3x3 operator- (const Matrix3x3 &mat) const
 Operator for Matrix3x3 Minus = Matrix3x3 - Matrix3x3;. More...
 
inline_ Matrix3x3 operator* (const Matrix3x3 &mat) const
 Operator for Matrix3x3 Mul = Matrix3x3 * Matrix3x3;. More...
 
inline_ Point operator* (const Point &v) const
 Operator for Point Mul = Matrix3x3 * Point;. More...
 
inline_ Matrix3x3 operator* (float s) const
 Operator for Matrix3x3 Mul = Matrix3x3 * float;. More...
 
inline_ Matrix3x3 operator/ (float s) const
 Operator for Matrix3x3 Div = Matrix3x3 / float;. More...
 
inline_ Matrix3x3operator+= (const Matrix3x3 &mat)
 Operator for Matrix3x3 += Matrix3x3. More...
 
inline_ Matrix3x3operator-= (const Matrix3x3 &mat)
 Operator for Matrix3x3 -= Matrix3x3. More...
 
inline_ Matrix3x3operator*= (const Matrix3x3 &mat)
 Operator for Matrix3x3 *= Matrix3x3. More...
 
inline_ Matrix3x3operator*= (float s)
 Operator for Matrix3x3 *= float. More...
 
inline_ Matrix3x3operator/= (float s)
 Operator for Matrix3x3 /= float. More...
 
 operator Matrix4x4 () const
 Cast a Matrix3x3 to a Matrix4x4. More...
 
 operator Quat () const
 Cast a Matrix3x3 to a Quat. More...
 
inline_ const Pointoperator[] (int row) const
 
inline_ Pointoperator[] (int row)
 

Public Attributes

float m [3][3]
 

Friends

inline_ friend Matrix3x3 operator* (float s, const Matrix3x3 &mat)
 Operator for Matrix3x3 Mul = float * Matrix3x3;. More...
 
inline_ friend Matrix3x3 operator/ (float s, const Matrix3x3 &mat)
 Operator for Matrix3x3 Div = float / Matrix3x3;. More...
 

Detailed Description

3x3 matrix. DirectX-compliant, ie row-column order, ie m[Row][Col]. Same as: m11 m12 m13 first row. m21 m22 m23 second row. m31 m32 m33 third row. Stored in memory as m11 m12 m13 m21...

Multiplication rules:

[x'y'z'] = [xyz][M]

x' = x*m11 + y*m21 + z*m31 y' = x*m12 + y*m22 + z*m32 z' = x*m13 + y*m23 + z*m33

Author
Pierre Terdiman
Version
1.0

Definition at line 20 of file IceMatrix3x3.h.

Constructor & Destructor Documentation

inline_ Matrix3x3::Matrix3x3 ( )
inline

Empty constructor.

Definition at line 24 of file IceMatrix3x3.h.

24 {}
inline_ Matrix3x3::Matrix3x3 ( float  m00,
float  m01,
float  m02,
float  m10,
float  m11,
float  m12,
float  m20,
float  m21,
float  m22 
)
inline

Constructor from 9 values.

Definition at line 26 of file IceMatrix3x3.h.

27  {
28  m[0][0] = m00; m[0][1] = m01; m[0][2] = m02;
29  m[1][0] = m10; m[1][1] = m11; m[1][2] = m12;
30  m[2][0] = m20; m[2][1] = m21; m[2][2] = m22;
31  }
inline_ Matrix3x3::Matrix3x3 ( const Matrix3x3 mat)
inline

Copy constructor.

Definition at line 33 of file IceMatrix3x3.h.

References CopyMemory(), and m.

33 { CopyMemory(m, &mat.m, 9*sizeof(float)); }
inline_ Matrix3x3::~Matrix3x3 ( )
inline

Destructor.

Definition at line 35 of file IceMatrix3x3.h.

35 {}

Member Function Documentation

inline_ void Matrix3x3::Add ( const Matrix3x3 mat)
inline

Add another matrix.

Definition at line 159 of file IceMatrix3x3.h.

References m.

160  {
161  m[0][0] += mat.m[0][0]; m[0][1] += mat.m[0][1]; m[0][2] += mat.m[0][2];
162  m[1][0] += mat.m[1][0]; m[1][1] += mat.m[1][1]; m[1][2] += mat.m[1][2];
163  m[2][0] += mat.m[2][0]; m[2][1] += mat.m[2][1]; m[2][2] += mat.m[2][2];
164  }
inline_ void Matrix3x3::Add ( const Matrix3x3 a,
const Matrix3x3 b 
)
inline

Definition at line 204 of file IceMatrix3x3.h.

References m.

205  {
206  m[0][0] = a.m[0][0] + b.m[0][0]; m[0][1] = a.m[0][1] + b.m[0][1]; m[0][2] = a.m[0][2] + b.m[0][2];
207  m[1][0] = a.m[1][0] + b.m[1][0]; m[1][1] = a.m[1][1] + b.m[1][1]; m[1][2] = a.m[1][2] + b.m[1][2];
208  m[2][0] = a.m[2][0] + b.m[2][0]; m[2][1] = a.m[2][1] + b.m[2][1]; m[2][2] = a.m[2][2] + b.m[2][2];
209  }
inline_ void Matrix3x3::Copy ( const Matrix3x3 source)
inline

Copy from a Matrix3x3.

Definition at line 68 of file IceMatrix3x3.h.

References CopyMemory(), and m.

68 { CopyMemory(m, source.m, 9*sizeof(float)); }
float Matrix3x3::Determinant ( ) const
inline

Compute the determinant of the matrix. We use the rule of Sarrus.

Definition at line 303 of file IceMatrix3x3.h.

304  {
305  return (m[0][0]*m[1][1]*m[2][2] + m[0][1]*m[1][2]*m[2][0] + m[0][2]*m[1][0]*m[2][1])
306  - (m[2][0]*m[1][1]*m[0][2] + m[2][1]*m[1][2]*m[0][0] + m[2][2]*m[1][0]*m[0][1]);
307  }
Matrix3x3& Matrix3x3::Exp ( const Matrix3x3 a)

this = exp(a)

void Matrix3x3::FromQuat ( const Quat &  q)
void Matrix3x3::FromQuatL2 ( const Quat &  q,
float  l2 
)
Matrix3x3& Matrix3x3::FromTo ( const Point from,
const Point to 
)

Makes a rotation matrix mapping vector "from" to vector "to".

inline_ void Matrix3x3::GetCol ( const udword  c,
Point p 
) const
inline

Returns a column.

Definition at line 80 of file IceMatrix3x3.h.

References c, Point::x, Point::y, and Point::z.

80 { p.x = m[0][c]; p.y = m[1][c]; p.z = m[2][c]; }
inline_ void Matrix3x3::GetRow ( const udword  r,
Point p 
) const
inline

Returns a row.

Definition at line 72 of file IceMatrix3x3.h.

References Point::x, Point::y, and Point::z.

72 { p.x = m[r][0]; p.y = m[r][1]; p.z = m[r][2]; }
inline_ const Point& Matrix3x3::GetRow ( const udword  r) const
inline

Returns a row.

Definition at line 74 of file IceMatrix3x3.h.

74 { return *(const Point*)&m[r][0]; }
inline_ Point& Matrix3x3::GetRow ( const udword  r)
inline

Returns a row.

Definition at line 76 of file IceMatrix3x3.h.

76 { return *(Point*)&m[r][0]; }
inline_ void Matrix3x3::Identity ( )
inline

Sets the identity matrix.

Definition at line 89 of file IceMatrix3x3.h.

References Zero().

89 { Zero(); m[0][0] = m[1][1] = m[2][2] = 1.0f; }
Matrix3x3& Matrix3x3::Invert ( )
inline

Invert the matrix. Determinant must be different from zero, else matrix can't be inverted.

Definition at line 317 of file IceMatrix3x3.h.

References m.

318  {
319  float Det = Determinant(); // Must be !=0
320  float OneOverDet = 1.0f / Det;
321 
322  Matrix3x3 Temp;
323  Temp.m[0][0] = +(m[1][1] * m[2][2] - m[2][1] * m[1][2]) * OneOverDet;
324  Temp.m[1][0] = -(m[1][0] * m[2][2] - m[2][0] * m[1][2]) * OneOverDet;
325  Temp.m[2][0] = +(m[1][0] * m[2][1] - m[2][0] * m[1][1]) * OneOverDet;
326  Temp.m[0][1] = -(m[0][1] * m[2][2] - m[2][1] * m[0][2]) * OneOverDet;
327  Temp.m[1][1] = +(m[0][0] * m[2][2] - m[2][0] * m[0][2]) * OneOverDet;
328  Temp.m[2][1] = -(m[0][0] * m[2][1] - m[2][0] * m[0][1]) * OneOverDet;
329  Temp.m[0][2] = +(m[0][1] * m[1][2] - m[1][1] * m[0][2]) * OneOverDet;
330  Temp.m[1][2] = -(m[0][0] * m[1][2] - m[1][0] * m[0][2]) * OneOverDet;
331  Temp.m[2][2] = +(m[0][0] * m[1][1] - m[1][0] * m[0][1]) * OneOverDet;
332 
333  *this = Temp;
334 
335  return *this;
336  }
inline_ bool Matrix3x3::IsIdentity ( ) const
inline

Checks for identity.

Definition at line 91 of file IceMatrix3x3.h.

References IEEE_1_0, and IR.

92  {
93  if(IR(m[0][0])!=IEEE_1_0) return false;
94  if(IR(m[0][1])!=0) return false;
95  if(IR(m[0][2])!=0) return false;
96 
97  if(IR(m[1][0])!=0) return false;
98  if(IR(m[1][1])!=IEEE_1_0) return false;
99  if(IR(m[1][2])!=0) return false;
100 
101  if(IR(m[2][0])!=0) return false;
102  if(IR(m[2][1])!=0) return false;
103  if(IR(m[2][2])!=IEEE_1_0) return false;
104 
105  return true;
106  }
inline_ BOOL Matrix3x3::IsValid ( ) const
inline

Checks matrix validity.

Definition at line 109 of file IceMatrix3x3.h.

References FALSE, i, IsValidFloat(), j, and TRUE.

110  {
111  for(udword j=0;j<3;j++)
112  {
113  for(udword i=0;i<3;i++)
114  {
115  if(!IsValidFloat(m[j][i])) return FALSE;
116  }
117  }
118  return TRUE;
119  }
inline_ void Matrix3x3::Mac ( const Matrix3x3 a,
const Matrix3x3 b,
float  s 
)
inline

Mac.

Definition at line 174 of file IceMatrix3x3.h.

References m.

175  {
176  m[0][0] = a.m[0][0] + b.m[0][0] * s;
177  m[0][1] = a.m[0][1] + b.m[0][1] * s;
178  m[0][2] = a.m[0][2] + b.m[0][2] * s;
179 
180  m[1][0] = a.m[1][0] + b.m[1][0] * s;
181  m[1][1] = a.m[1][1] + b.m[1][1] * s;
182  m[1][2] = a.m[1][2] + b.m[1][2] * s;
183 
184  m[2][0] = a.m[2][0] + b.m[2][0] * s;
185  m[2][1] = a.m[2][1] + b.m[2][1] * s;
186  m[2][2] = a.m[2][2] + b.m[2][2] * s;
187  }
inline_ void Matrix3x3::Mac ( const Matrix3x3 a,
float  s 
)
inline

Mac.

Definition at line 189 of file IceMatrix3x3.h.

References m.

190  {
191  m[0][0] += a.m[0][0] * s; m[0][1] += a.m[0][1] * s; m[0][2] += a.m[0][2] * s;
192  m[1][0] += a.m[1][0] * s; m[1][1] += a.m[1][1] * s; m[1][2] += a.m[1][2] * s;
193  m[2][0] += a.m[2][0] * s; m[2][1] += a.m[2][1] * s; m[2][2] += a.m[2][2] * s;
194  }
inline_ void Matrix3x3::Mult ( const Matrix3x3 a,
float  s 
)
inline

this = A * s

Definition at line 197 of file IceMatrix3x3.h.

References m.

198  {
199  m[0][0] = a.m[0][0] * s; m[0][1] = a.m[0][1] * s; m[0][2] = a.m[0][2] * s;
200  m[1][0] = a.m[1][0] * s; m[1][1] = a.m[1][1] * s; m[1][2] = a.m[1][2] * s;
201  m[2][0] = a.m[2][0] * s; m[2][1] = a.m[2][1] * s; m[2][2] = a.m[2][2] * s;
202  }
inline_ void Matrix3x3::Mult ( const Matrix3x3 a,
const Matrix3x3 b 
)
inline

this = a * b

Definition at line 219 of file IceMatrix3x3.h.

References m.

220  {
221  m[0][0] = a.m[0][0] * b.m[0][0] + a.m[0][1] * b.m[1][0] + a.m[0][2] * b.m[2][0];
222  m[0][1] = a.m[0][0] * b.m[0][1] + a.m[0][1] * b.m[1][1] + a.m[0][2] * b.m[2][1];
223  m[0][2] = a.m[0][0] * b.m[0][2] + a.m[0][1] * b.m[1][2] + a.m[0][2] * b.m[2][2];
224  m[1][0] = a.m[1][0] * b.m[0][0] + a.m[1][1] * b.m[1][0] + a.m[1][2] * b.m[2][0];
225  m[1][1] = a.m[1][0] * b.m[0][1] + a.m[1][1] * b.m[1][1] + a.m[1][2] * b.m[2][1];
226  m[1][2] = a.m[1][0] * b.m[0][2] + a.m[1][1] * b.m[1][2] + a.m[1][2] * b.m[2][2];
227  m[2][0] = a.m[2][0] * b.m[0][0] + a.m[2][1] * b.m[1][0] + a.m[2][2] * b.m[2][0];
228  m[2][1] = a.m[2][0] * b.m[0][1] + a.m[2][1] * b.m[1][1] + a.m[2][2] * b.m[2][1];
229  m[2][2] = a.m[2][0] * b.m[0][2] + a.m[2][1] * b.m[1][2] + a.m[2][2] * b.m[2][2];
230  }
inline_ void Matrix3x3::MultABt ( const Matrix3x3 a,
const Matrix3x3 b 
)
inline

this = a * transpose(b)

Definition at line 247 of file IceMatrix3x3.h.

References m.

248  {
249  m[0][0] = a.m[0][0] * b.m[0][0] + a.m[0][1] * b.m[0][1] + a.m[0][2] * b.m[0][2];
250  m[0][1] = a.m[0][0] * b.m[1][0] + a.m[0][1] * b.m[1][1] + a.m[0][2] * b.m[1][2];
251  m[0][2] = a.m[0][0] * b.m[2][0] + a.m[0][1] * b.m[2][1] + a.m[0][2] * b.m[2][2];
252  m[1][0] = a.m[1][0] * b.m[0][0] + a.m[1][1] * b.m[0][1] + a.m[1][2] * b.m[0][2];
253  m[1][1] = a.m[1][0] * b.m[1][0] + a.m[1][1] * b.m[1][1] + a.m[1][2] * b.m[1][2];
254  m[1][2] = a.m[1][0] * b.m[2][0] + a.m[1][1] * b.m[2][1] + a.m[1][2] * b.m[2][2];
255  m[2][0] = a.m[2][0] * b.m[0][0] + a.m[2][1] * b.m[0][1] + a.m[2][2] * b.m[0][2];
256  m[2][1] = a.m[2][0] * b.m[1][0] + a.m[2][1] * b.m[1][1] + a.m[2][2] * b.m[1][2];
257  m[2][2] = a.m[2][0] * b.m[2][0] + a.m[2][1] * b.m[2][1] + a.m[2][2] * b.m[2][2];
258  }
inline_ void Matrix3x3::MultAtB ( const Matrix3x3 a,
const Matrix3x3 b 
)
inline

this = transpose(a) * b

Definition at line 233 of file IceMatrix3x3.h.

References m.

234  {
235  m[0][0] = a.m[0][0] * b.m[0][0] + a.m[1][0] * b.m[1][0] + a.m[2][0] * b.m[2][0];
236  m[0][1] = a.m[0][0] * b.m[0][1] + a.m[1][0] * b.m[1][1] + a.m[2][0] * b.m[2][1];
237  m[0][2] = a.m[0][0] * b.m[0][2] + a.m[1][0] * b.m[1][2] + a.m[2][0] * b.m[2][2];
238  m[1][0] = a.m[0][1] * b.m[0][0] + a.m[1][1] * b.m[1][0] + a.m[2][1] * b.m[2][0];
239  m[1][1] = a.m[0][1] * b.m[0][1] + a.m[1][1] * b.m[1][1] + a.m[2][1] * b.m[2][1];
240  m[1][2] = a.m[0][1] * b.m[0][2] + a.m[1][1] * b.m[1][2] + a.m[2][1] * b.m[2][2];
241  m[2][0] = a.m[0][2] * b.m[0][0] + a.m[1][2] * b.m[1][0] + a.m[2][2] * b.m[2][0];
242  m[2][1] = a.m[0][2] * b.m[0][1] + a.m[1][2] * b.m[1][1] + a.m[2][2] * b.m[2][1];
243  m[2][2] = a.m[0][2] * b.m[0][2] + a.m[1][2] * b.m[1][2] + a.m[2][2] * b.m[2][2];
244  }
inline_ void Matrix3x3::Neg ( )
inline

Negates the matrix.

Definition at line 143 of file IceMatrix3x3.h.

144  {
145  m[0][0] = -m[0][0]; m[0][1] = -m[0][1]; m[0][2] = -m[0][2];
146  m[1][0] = -m[1][0]; m[1][1] = -m[1][1]; m[1][2] = -m[1][2];
147  m[2][0] = -m[2][0]; m[2][1] = -m[2][1]; m[2][2] = -m[2][2];
148  }
inline_ void Matrix3x3::Neg ( const Matrix3x3 mat)
inline

Neg from another matrix.

Definition at line 151 of file IceMatrix3x3.h.

References m.

152  {
153  m[0][0] = -mat.m[0][0]; m[0][1] = -mat.m[0][1]; m[0][2] = -mat.m[0][2];
154  m[1][0] = -mat.m[1][0]; m[1][1] = -mat.m[1][1]; m[1][2] = -mat.m[1][2];
155  m[2][0] = -mat.m[2][0]; m[2][1] = -mat.m[2][1]; m[2][2] = -mat.m[2][2];
156  }
Matrix3x3& Matrix3x3::Normalize ( )
Matrix3x3::operator Matrix4x4 ( ) const

Cast a Matrix3x3 to a Matrix4x4.

Matrix3x3::operator Quat ( ) const

Cast a Matrix3x3 to a Quat.

inline_ Matrix3x3 Matrix3x3::operator* ( const Matrix3x3 mat) const
inline

Operator for Matrix3x3 Mul = Matrix3x3 * Matrix3x3;.

Definition at line 366 of file IceMatrix3x3.h.

References m.

367  {
368  return Matrix3x3(
369  m[0][0]*mat.m[0][0] + m[0][1]*mat.m[1][0] + m[0][2]*mat.m[2][0],
370  m[0][0]*mat.m[0][1] + m[0][1]*mat.m[1][1] + m[0][2]*mat.m[2][1],
371  m[0][0]*mat.m[0][2] + m[0][1]*mat.m[1][2] + m[0][2]*mat.m[2][2],
372 
373  m[1][0]*mat.m[0][0] + m[1][1]*mat.m[1][0] + m[1][2]*mat.m[2][0],
374  m[1][0]*mat.m[0][1] + m[1][1]*mat.m[1][1] + m[1][2]*mat.m[2][1],
375  m[1][0]*mat.m[0][2] + m[1][1]*mat.m[1][2] + m[1][2]*mat.m[2][2],
376 
377  m[2][0]*mat.m[0][0] + m[2][1]*mat.m[1][0] + m[2][2]*mat.m[2][0],
378  m[2][0]*mat.m[0][1] + m[2][1]*mat.m[1][1] + m[2][2]*mat.m[2][1],
379  m[2][0]*mat.m[0][2] + m[2][1]*mat.m[1][2] + m[2][2]*mat.m[2][2]);
380  }
inline_ Point Matrix3x3::operator* ( const Point v) const
inline

Operator for Point Mul = Matrix3x3 * Point;.

Definition at line 383 of file IceMatrix3x3.h.

383 { return Point(GetRow(0)|v, GetRow(1)|v, GetRow(2)|v); }
inline_ Matrix3x3 Matrix3x3::operator* ( float  s) const
inline

Operator for Matrix3x3 Mul = Matrix3x3 * float;.

Definition at line 386 of file IceMatrix3x3.h.

387  {
388  return Matrix3x3(
389  m[0][0]*s, m[0][1]*s, m[0][2]*s,
390  m[1][0]*s, m[1][1]*s, m[1][2]*s,
391  m[2][0]*s, m[2][1]*s, m[2][2]*s);
392  }
inline_ Matrix3x3& Matrix3x3::operator*= ( const Matrix3x3 mat)
inline

Operator for Matrix3x3 *= Matrix3x3.

Definition at line 441 of file IceMatrix3x3.h.

References m, Point::x, Point::y, and Point::z.

442  {
443  Point TempRow;
444 
445  GetRow(0, TempRow);
446  m[0][0] = TempRow.x*mat.m[0][0] + TempRow.y*mat.m[1][0] + TempRow.z*mat.m[2][0];
447  m[0][1] = TempRow.x*mat.m[0][1] + TempRow.y*mat.m[1][1] + TempRow.z*mat.m[2][1];
448  m[0][2] = TempRow.x*mat.m[0][2] + TempRow.y*mat.m[1][2] + TempRow.z*mat.m[2][2];
449 
450  GetRow(1, TempRow);
451  m[1][0] = TempRow.x*mat.m[0][0] + TempRow.y*mat.m[1][0] + TempRow.z*mat.m[2][0];
452  m[1][1] = TempRow.x*mat.m[0][1] + TempRow.y*mat.m[1][1] + TempRow.z*mat.m[2][1];
453  m[1][2] = TempRow.x*mat.m[0][2] + TempRow.y*mat.m[1][2] + TempRow.z*mat.m[2][2];
454 
455  GetRow(2, TempRow);
456  m[2][0] = TempRow.x*mat.m[0][0] + TempRow.y*mat.m[1][0] + TempRow.z*mat.m[2][0];
457  m[2][1] = TempRow.x*mat.m[0][1] + TempRow.y*mat.m[1][1] + TempRow.z*mat.m[2][1];
458  m[2][2] = TempRow.x*mat.m[0][2] + TempRow.y*mat.m[1][2] + TempRow.z*mat.m[2][2];
459  return *this;
460  }
inline_ Matrix3x3& Matrix3x3::operator*= ( float  s)
inline

Operator for Matrix3x3 *= float.

Definition at line 463 of file IceMatrix3x3.h.

464  {
465  m[0][0] *= s; m[0][1] *= s; m[0][2] *= s;
466  m[1][0] *= s; m[1][1] *= s; m[1][2] *= s;
467  m[2][0] *= s; m[2][1] *= s; m[2][2] *= s;
468  return *this;
469  }
inline_ Matrix3x3 Matrix3x3::operator+ ( const Matrix3x3 mat) const
inline

Operator for Matrix3x3 Plus = Matrix3x3 + Matrix3x3;.

Definition at line 348 of file IceMatrix3x3.h.

References m.

349  {
350  return Matrix3x3(
351  m[0][0] + mat.m[0][0], m[0][1] + mat.m[0][1], m[0][2] + mat.m[0][2],
352  m[1][0] + mat.m[1][0], m[1][1] + mat.m[1][1], m[1][2] + mat.m[1][2],
353  m[2][0] + mat.m[2][0], m[2][1] + mat.m[2][1], m[2][2] + mat.m[2][2]);
354  }
inline_ Matrix3x3& Matrix3x3::operator+= ( const Matrix3x3 mat)
inline

Operator for Matrix3x3 += Matrix3x3.

Definition at line 423 of file IceMatrix3x3.h.

References m.

424  {
425  m[0][0] += mat.m[0][0]; m[0][1] += mat.m[0][1]; m[0][2] += mat.m[0][2];
426  m[1][0] += mat.m[1][0]; m[1][1] += mat.m[1][1]; m[1][2] += mat.m[1][2];
427  m[2][0] += mat.m[2][0]; m[2][1] += mat.m[2][1]; m[2][2] += mat.m[2][2];
428  return *this;
429  }
inline_ Matrix3x3 Matrix3x3::operator- ( const Matrix3x3 mat) const
inline

Operator for Matrix3x3 Minus = Matrix3x3 - Matrix3x3;.

Definition at line 357 of file IceMatrix3x3.h.

References m.

358  {
359  return Matrix3x3(
360  m[0][0] - mat.m[0][0], m[0][1] - mat.m[0][1], m[0][2] - mat.m[0][2],
361  m[1][0] - mat.m[1][0], m[1][1] - mat.m[1][1], m[1][2] - mat.m[1][2],
362  m[2][0] - mat.m[2][0], m[2][1] - mat.m[2][1], m[2][2] - mat.m[2][2]);
363  }
inline_ Matrix3x3& Matrix3x3::operator-= ( const Matrix3x3 mat)
inline

Operator for Matrix3x3 -= Matrix3x3.

Definition at line 432 of file IceMatrix3x3.h.

References m.

433  {
434  m[0][0] -= mat.m[0][0]; m[0][1] -= mat.m[0][1]; m[0][2] -= mat.m[0][2];
435  m[1][0] -= mat.m[1][0]; m[1][1] -= mat.m[1][1]; m[1][2] -= mat.m[1][2];
436  m[2][0] -= mat.m[2][0]; m[2][1] -= mat.m[2][1]; m[2][2] -= mat.m[2][2];
437  return *this;
438  }
inline_ Matrix3x3 Matrix3x3::operator/ ( float  s) const
inline

Operator for Matrix3x3 Div = Matrix3x3 / float;.

Definition at line 404 of file IceMatrix3x3.h.

405  {
406  if (s) s = 1.0f / s;
407  return Matrix3x3(
408  m[0][0]*s, m[0][1]*s, m[0][2]*s,
409  m[1][0]*s, m[1][1]*s, m[1][2]*s,
410  m[2][0]*s, m[2][1]*s, m[2][2]*s);
411  }
inline_ Matrix3x3& Matrix3x3::operator/= ( float  s)
inline

Operator for Matrix3x3 /= float.

Definition at line 472 of file IceMatrix3x3.h.

473  {
474  if (s) s = 1.0f / s;
475  m[0][0] *= s; m[0][1] *= s; m[0][2] *= s;
476  m[1][0] *= s; m[1][1] *= s; m[1][2] *= s;
477  m[2][0] *= s; m[2][1] *= s; m[2][2] *= s;
478  return *this;
479  }
inline_ const Point& Matrix3x3::operator[] ( int  row) const
inline

Definition at line 487 of file IceMatrix3x3.h.

487 { return *(const Point*)&m[row][0]; }
inline_ Point& Matrix3x3::operator[] ( int  row)
inline

Definition at line 488 of file IceMatrix3x3.h.

488 { return *(Point*)&m[row][0]; }
Matrix3x3& Matrix3x3::Rot ( float  angle,
const Point axis 
)

Make a rotation matrix about an arbitrary axis.

void Matrix3x3::RotX ( float  angle)

Set a rotation matrix around the X axis. 1 0 0 RX = 0 cx sx 0 -sx cx

void Matrix3x3::RotY ( float  angle)

Set a rotation matrix around the Y axis. cy 0 -sy RY = 0 1 0 sy 0 cy

void Matrix3x3::RotYX ( float  y,
float  x 
)
    cy      sx.sy       -sy.cx

RY.RX 0 cx sx sy -sx.cy cx.cy

void Matrix3x3::RotZ ( float  angle)

Set a rotation matrix around the Z axis. cz sz 0 RZ = -sz cz 0 0 0 1

inline_ void Matrix3x3::Scale ( const Point p)
inline

Scales from a Point. Each row is multiplied by a component.

Definition at line 52 of file IceMatrix3x3.h.

References Point::x, Point::y, and Point::z.

Referenced by OBB::GetRotatedExtents().

53  {
54  m[0][0] *= p.x; m[0][1] *= p.x; m[0][2] *= p.x;
55  m[1][0] *= p.y; m[1][1] *= p.y; m[1][2] *= p.y;
56  m[2][0] *= p.z; m[2][1] *= p.z; m[2][2] *= p.z;
57  }
inline_ void Matrix3x3::Scale ( float  sx,
float  sy,
float  sz 
)
inline

Scales from floats. Each row is multiplied by a value.

Definition at line 60 of file IceMatrix3x3.h.

61  {
62  m[0][0] *= sx; m[0][1] *= sx; m[0][2] *= sx;
63  m[1][0] *= sy; m[1][1] *= sy; m[1][2] *= sy;
64  m[2][0] *= sz; m[2][1] *= sz; m[2][2] *= sz;
65  }
inline_ void Matrix3x3::Set ( float  m00,
float  m01,
float  m02,
float  m10,
float  m11,
float  m12,
float  m20,
float  m21,
float  m22 
)
inline

Assign values.

Definition at line 38 of file IceMatrix3x3.h.

39  {
40  m[0][0] = m00; m[0][1] = m01; m[0][2] = m02;
41  m[1][0] = m10; m[1][1] = m11; m[1][2] = m12;
42  m[2][0] = m20; m[2][1] = m21; m[2][2] = m22;
43  }
inline_ void Matrix3x3::SetCol ( const udword  c,
const Point p 
)
inline

Sets a column.

Definition at line 82 of file IceMatrix3x3.h.

References c, Point::x, Point::y, and Point::z.

82 { m[0][c] = p.x; m[1][c] = p.y; m[2][c] = p.z; }
inline_ void Matrix3x3::SetRow ( const udword  r,
const Point p 
)
inline

Sets a row.

Definition at line 78 of file IceMatrix3x3.h.

References Point::x, Point::y, and Point::z.

78 { m[r][0] = p.x; m[r][1] = p.y; m[r][2] = p.z; }
inline_ void Matrix3x3::SetScale ( const Point p)
inline

Sets the scale from a Point. The point is put on the diagonal.

Definition at line 46 of file IceMatrix3x3.h.

References Point::x, Point::y, and Point::z.

46 { m[0][0] = p.x; m[1][1] = p.y; m[2][2] = p.z; }
inline_ void Matrix3x3::SetScale ( float  sx,
float  sy,
float  sz 
)
inline

Sets the scale from floats. Values are put on the diagonal.

Definition at line 49 of file IceMatrix3x3.h.

49 { m[0][0] = sx; m[1][1] = sy; m[2][2] = sz; }
inline_ void Matrix3x3::SkewSymmetric ( const Point a)
inline

Makes a skew-symmetric matrix (a.k.a. Star(*) Matrix) [ 0.0 -a.z a.y ] [ a.z 0.0 -a.x ] [ -a.y a.x 0.0 ] This is also called a "cross matrix" since for any vectors A and B, A^B = Skew(A) * B = - B * Skew(A);

Definition at line 127 of file IceMatrix3x3.h.

References Point::x, Point::y, and Point::z.

128  {
129  m[0][0] = 0.0f;
130  m[0][1] = -a.z;
131  m[0][2] = a.y;
132 
133  m[1][0] = a.z;
134  m[1][1] = 0.0f;
135  m[1][2] = -a.x;
136 
137  m[2][0] = -a.y;
138  m[2][1] = a.x;
139  m[2][2] = 0.0f;
140  }
inline_ void Matrix3x3::Sub ( const Matrix3x3 mat)
inline

Sub another matrix.

Definition at line 167 of file IceMatrix3x3.h.

References m.

168  {
169  m[0][0] -= mat.m[0][0]; m[0][1] -= mat.m[0][1]; m[0][2] -= mat.m[0][2];
170  m[1][0] -= mat.m[1][0]; m[1][1] -= mat.m[1][1]; m[1][2] -= mat.m[1][2];
171  m[2][0] -= mat.m[2][0]; m[2][1] -= mat.m[2][1]; m[2][2] -= mat.m[2][2];
172  }
inline_ void Matrix3x3::Sub ( const Matrix3x3 a,
const Matrix3x3 b 
)
inline

Definition at line 211 of file IceMatrix3x3.h.

References m.

212  {
213  m[0][0] = a.m[0][0] - b.m[0][0]; m[0][1] = a.m[0][1] - b.m[0][1]; m[0][2] = a.m[0][2] - b.m[0][2];
214  m[1][0] = a.m[1][0] - b.m[1][0]; m[1][1] = a.m[1][1] - b.m[1][1]; m[1][2] = a.m[1][2] - b.m[1][2];
215  m[2][0] = a.m[2][0] - b.m[2][0]; m[2][1] = a.m[2][1] - b.m[2][1]; m[2][2] = a.m[2][2] - b.m[2][2];
216  }
inline_ float Matrix3x3::Trace ( ) const
inline

Computes the trace. The trace is the sum of the 3 diagonal components.

Definition at line 85 of file IceMatrix3x3.h.

85 { return m[0][0] + m[1][1] + m[2][2]; }
void Matrix3x3::Transpose ( )
inline

Transpose the matrix.

Definition at line 287 of file IceMatrix3x3.h.

References IR.

288  {
289  IR(m[1][0]) ^= IR(m[0][1]); IR(m[0][1]) ^= IR(m[1][0]); IR(m[1][0]) ^= IR(m[0][1]);
290  IR(m[2][0]) ^= IR(m[0][2]); IR(m[0][2]) ^= IR(m[2][0]); IR(m[2][0]) ^= IR(m[0][2]);
291  IR(m[2][1]) ^= IR(m[1][2]); IR(m[1][2]) ^= IR(m[2][1]); IR(m[2][1]) ^= IR(m[1][2]);
292  }
void Matrix3x3::Transpose ( const Matrix3x3 a)
inline

this = Transpose(a)

Definition at line 295 of file IceMatrix3x3.h.

References m.

296  {
297  m[0][0] = a.m[0][0]; m[0][1] = a.m[1][0]; m[0][2] = a.m[2][0];
298  m[1][0] = a.m[0][1]; m[1][1] = a.m[1][1]; m[1][2] = a.m[2][1];
299  m[2][0] = a.m[0][2]; m[2][1] = a.m[1][2]; m[2][2] = a.m[2][2];
300  }
inline_ void Matrix3x3::Zero ( )
inline

Clears the matrix.

Definition at line 87 of file IceMatrix3x3.h.

References ZeroMemory().

87 { ZeroMemory(&m, sizeof(m)); }

Friends And Related Function Documentation

inline_ friend Matrix3x3 operator* ( float  s,
const Matrix3x3 mat 
)
friend

Operator for Matrix3x3 Mul = float * Matrix3x3;.

Definition at line 395 of file IceMatrix3x3.h.

396  {
397  return Matrix3x3(
398  s*mat.m[0][0], s*mat.m[0][1], s*mat.m[0][2],
399  s*mat.m[1][0], s*mat.m[1][1], s*mat.m[1][2],
400  s*mat.m[2][0], s*mat.m[2][1], s*mat.m[2][2]);
401  }
inline_ friend Matrix3x3 operator/ ( float  s,
const Matrix3x3 mat 
)
friend

Operator for Matrix3x3 Div = float / Matrix3x3;.

Definition at line 414 of file IceMatrix3x3.h.

415  {
416  return Matrix3x3(
417  s/mat.m[0][0], s/mat.m[0][1], s/mat.m[0][2],
418  s/mat.m[1][0], s/mat.m[1][1], s/mat.m[1][2],
419  s/mat.m[2][0], s/mat.m[2][1], s/mat.m[2][2]);
420  }

Member Data Documentation


The documentation for this class was generated from the following file: