00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
#ifndef MATRIX_H
00022
#define MATRIX_H
00023
00024
#include<cmath>
00025
#include<cstring>
00026
#include "types.h"
00027
00028
class Vector3;
00029
00034 class Matrix {
00035
00036
public:
00037
00040 Matrix() {}
00041
00045 Matrix(DBL d[3][3]) {memcpy(&d,&a,
sizeof(a));}
00046
00050 Matrix(
int d) {memset(&a,d,
sizeof(DBL)*3*3);}
00051
00052
public:
00053
00056 DBL&
operator() (
int i,
int j) {
return a[i][j];}
00057
00060 const DBL&
operator() (
int i,
int j)
const {
return a[i][j];}
00061
00064 void zero() {memset(&a,0,
sizeof(DBL)*3*3);}
00065
00068
void transpose();
00069
00073
bool invert();
00074
00078
void applyFromLeft(
const Matrix &m);
00079
00080
public:
00084
static Matrix generateScaleMatrix(
const Vector3& v);
00085
00090
static Matrix generateRotationMatrix(
const Vector3& v);
00091
00092
private:
00093
static const DBL SMALL_DET;
00094 DBL a[3][3];
00095
00096 };
00097
00098
#endif