00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
#ifndef FXMAT3D_H
00025
#define FXMAT3D_H
00026
00027
00028
namespace FX {
00029
00030
00031
class FXQuatd;
00032
00033
00034
00035 class FXAPI FXMat3d {
00036
protected:
00037
FXVec3d m[3];
00038
public:
00039
00040
00041 FXMat3d(){}
00042
00043
00044 FXMat3d(
const FXMat3d& other);
00045
00046
00047 FXMat3d(FXdouble w);
00048
00049
00050 FXMat3d(FXdouble a00,FXdouble a01,FXdouble a02,
00051 FXdouble a10,FXdouble a11,FXdouble a12,
00052 FXdouble a20,FXdouble a21,FXdouble a22);
00053
00054
00055 FXMat3d(
const FXVec3d& a,
const FXVec3d& b,
const FXVec3d& c);
00056
00057
00058 FXMat3d(
const FXQuatd& quat);
00059
00060
00061 FXMat3d& operator=(
const FXMat3d& other);
00062 FXMat3d& operator=(FXdouble w);
00063 FXMat3d& operator+=(
const FXMat3d& w);
00064 FXMat3d& operator-=(
const FXMat3d& w);
00065 FXMat3d& operator*=(FXdouble w);
00066 FXMat3d& operator*=(
const FXMat3d& w);
00067 FXMat3d& operator/=(FXdouble w);
00068
00069
00070
FXVec3d& operator[](FXint i){
return m[i];}
00071
const FXVec3d& operator[](FXint i)
const {
return m[i];}
00072
00073
00074 operator FXdouble*(){
return m[0];}
00075 operator const FXdouble*()
const {
return m[0];}
00076
00077
00078
friend FXAPI FXMat3d operator+(
const FXMat3d& a,
const FXMat3d& b);
00079
friend FXAPI FXMat3d operator-(
const FXMat3d& a,
const FXMat3d& b);
00080
friend FXAPI FXMat3d operator-(
const FXMat3d& a);
00081
friend FXAPI FXMat3d operator*(
const FXMat3d& a,
const FXMat3d& b);
00082
friend FXAPI FXMat3d operator*(FXdouble x,
const FXMat3d& a);
00083
friend FXAPI FXMat3d operator*(
const FXMat3d& a,FXdouble x);
00084
friend FXAPI FXMat3d operator/(
const FXMat3d& a,FXdouble x);
00085
friend FXAPI FXMat3d operator/(FXdouble x,
const FXMat3d& a);
00086
00087
00088
friend FXAPI FXVec3d operator*(
const FXVec3d& v,
const FXMat3d& m);
00089
friend FXAPI FXVec3d operator*(
const FXMat3d& a,
const FXVec3d& v);
00090
00091
00092
friend FXAPI FXVec2d operator*(
const FXVec2d& v,
const FXMat3d& m);
00093
friend FXAPI FXVec2d operator*(
const FXMat3d& a,
const FXVec2d& v);
00094
00095
00096 FXMat3d& eye();
00097
00098
00099 FXMat3d& rot(FXdouble c,FXdouble s);
00100 FXMat3d& rot(FXdouble phi);
00101
00102
00103 FXMat3d& trans(FXdouble tx,FXdouble ty);
00104
00105
00106 FXMat3d& scale(FXdouble sx,FXdouble sy);
00107 FXMat3d& scale(FXdouble s);
00108
00109
00110
friend FXAPI FXdouble det(
const FXMat3d& m);
00111
00112
00113
friend FXAPI FXMat3d transpose(
const FXMat3d& m);
00114
00115
00116
friend FXAPI FXMat3d invert(
const FXMat3d& m);
00117
00118
00119
friend FXAPI FXStream& operator<<(FXStream& store,
const FXMat3d& m);
00120
00121
00122
friend FXAPI FXStream& operator>>(FXStream& store,FXMat3d& m);
00123 };
00124
00125 }
00126
00127
#endif