Main Page   Class Hierarchy   Alphabetical List   Compound List   File List   Compound Members

FXMat3f.h
1 /********************************************************************************
2 * *
3 * S i n g l e - P r e c i s i o n 3 x 3 M a t r i x *
4 * *
5 *********************************************************************************
6 * Copyright (C) 2003,2024 by Jeroen van der Zijp. All Rights Reserved. *
7 *********************************************************************************
8 * This library is free software; you can redistribute it and/or modify *
9 * it under the terms of the GNU Lesser General Public License as published by *
10 * the Free Software Foundation; either version 3 of the License, or *
11 * (at your option) any later version. *
12 * *
13 * This library is distributed in the hope that it will be useful, *
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
16 * GNU Lesser General Public License for more details. *
17 * *
18 * You should have received a copy of the GNU Lesser General Public License *
19 * along with this program. If not, see <http://www.gnu.org/licenses/> *
20 ********************************************************************************/
21 #ifndef FXMAT3F_H
22 #define FXMAT3F_H
23 
24 namespace FX {
25 
26 
27 class FXQuatf;
28 class FXMat2f;
29 class FXMat4f;
30 
31 
33 class FXAPI FXMat3f {
34 protected:
35  FXVec3f m[3];
36 public:
37 
39  FXMat3f(){}
40 
42  explicit FXMat3f(FXfloat s);
43 
45  FXMat3f(FXfloat a00,FXfloat a01,FXfloat a02,
46  FXfloat a10,FXfloat a11,FXfloat a12,
47  FXfloat a20,FXfloat a21,FXfloat a22);
48 
50  FXMat3f(const FXMat2f& s);
51 
53  FXMat3f(const FXMat3f& s);
54 
56  FXMat3f(const FXMat4f& s);
57 
59  FXMat3f(const FXQuatf& quat);
60 
62  FXMat3f(const FXVec3f& a,const FXVec3f& b,const FXVec3f& c);
63 
65  FXMat3f(FXfloat a,FXfloat b,FXfloat c);
66 
68  explicit FXMat3f(const FXVec3f& d);
69 
71  explicit FXMat3f(const FXfloat s[]);
72 
74  FXMat3f& operator=(FXfloat s);
75 
77  FXMat3f& operator=(const FXMat2f& s);
78  FXMat3f& operator=(const FXMat3f& s);
79  FXMat3f& operator=(const FXMat4f& s);
80 
82  FXMat3f& operator=(const FXQuatf& quat);
83 
85  FXMat3f& operator=(const FXfloat s[]);
86 
88  FXMat3f& set(FXfloat s);
89 
91  FXMat3f& set(FXfloat a00,FXfloat a01,FXfloat a02,
92  FXfloat a10,FXfloat a11,FXfloat a12,
93  FXfloat a20,FXfloat a21,FXfloat a22);
94 
96  FXMat3f& set(const FXMat2f& s);
97 
99  FXMat3f& set(const FXMat3f& s);
100 
102  FXMat3f& set(const FXMat4f& s);
103 
105  FXMat3f& set(const FXQuatf& quat);
106 
108  FXMat3f& set(const FXVec3f& a,const FXVec3f& b,const FXVec3f& c);
109 
111  FXMat3f& set(FXfloat a,FXfloat b,FXfloat c);
112 
114  FXMat3f& set(const FXVec3f& d);
115 
117  FXMat3f& set(const FXfloat s[]);
118 
120  FXMat3f& operator+=(const FXMat3f& w);
121  FXMat3f& operator-=(const FXMat3f& w);
122  FXMat3f& operator*=(const FXMat3f& w);
123  FXMat3f& operator*=(FXfloat w);
124  FXMat3f& operator/=(FXfloat w);
125 
127  FXVec3f& operator[](FXint i){return m[i];}
128  const FXVec3f& operator[](FXint i) const {return m[i];}
129 
131  operator FXfloat*(){return m[0];}
132  operator const FXfloat*() const {return m[0];}
133 
135  FXMat3f operator-() const;
136 
138  FXMat3f& identity();
139 
141  FXbool isIdentity() const;
142 
144  FXMat3f& rot(const FXQuatf& q);
145 
147  FXMat3f& rot(const FXVec3f& v,FXfloat c,FXfloat s);
148 
150  FXMat3f& rot(const FXVec3f& v,FXfloat phi);
151 
153  FXMat3f& xrot(FXfloat c,FXfloat s);
154  FXMat3f& xrot(FXfloat phi);
155 
157  FXMat3f& yrot(FXfloat c,FXfloat s);
158  FXMat3f& yrot(FXfloat phi);
159 
161  FXMat3f& zrot(FXfloat c,FXfloat s);
162  FXMat3f& zrot(FXfloat phi);
163 
165  FXMat3f& scale(FXfloat sx,FXfloat sy,FXfloat sz);
166  FXMat3f& scale(const FXVec3f& v);
167  FXMat3f& scale(FXfloat s);
168 
170  FXMat3f& mirror(const FXVec3f& n);
171 
173  FXfloat det() const;
174 
176  FXMat3f transpose() const;
177 
179  FXMat3f invert() const;
180 
183  };
184 
185 
187 extern FXAPI FXVec2f operator*(const FXMat3f& m,const FXVec2f& v);
188 extern FXAPI FXVec3f operator*(const FXMat3f& m,const FXVec3f& v);
189 
191 extern FXAPI FXVec2f operator*(const FXVec2f& v,const FXMat3f& m);
192 extern FXAPI FXVec3f operator*(const FXVec3f& v,const FXMat3f& m);
193 
195 extern FXAPI FXMat3f operator+(const FXMat3f& a,const FXMat3f& b);
196 extern FXAPI FXMat3f operator-(const FXMat3f& a,const FXMat3f& b);
197 
199 extern FXAPI FXMat3f operator*(const FXMat3f& a,const FXMat3f& b);
200 
202 extern FXAPI FXMat3f operator*(FXfloat x,const FXMat3f& a);
203 extern FXAPI FXMat3f operator*(const FXMat3f& a,FXfloat x);
204 extern FXAPI FXMat3f operator/(const FXMat3f& a,FXfloat x);
205 extern FXAPI FXMat3f operator/(FXfloat x,const FXMat3f& a);
206 
208 extern FXAPI FXbool operator==(const FXMat3f& a,const FXMat3f& b);
209 extern FXAPI FXbool operator!=(const FXMat3f& a,const FXMat3f& b);
210 extern FXAPI FXbool operator==(const FXMat3f& a,FXfloat n);
211 extern FXAPI FXbool operator!=(const FXMat3f& a,FXfloat n);
212 extern FXAPI FXbool operator==(FXfloat n,const FXMat3f& a);
213 extern FXAPI FXbool operator!=(FXfloat n,const FXMat3f& a);
214 
216 extern FXAPI FXMat3f orthogonalize(const FXMat3f& m);
217 
219 extern FXAPI FXStream& operator<<(FXStream& store,const FXMat3f& m);
220 
222 extern FXAPI FXStream& operator>>(FXStream& store,FXMat3f& m);
223 
224 }
225 
226 #endif
~FXMat3f()
Destructor.
Definition: FXMat3f.h:182
Single-precision 3x3 matrix.
Definition: FXMat3f.h:33
FXVec3f & operator[](FXint i)
Indexing.
Definition: FXMat3f.h:127
Definition: FX4Splitter.h:28
Single-precision quaternion.
Definition: FXQuatf.h:32
Single-precision 3-element vector.
Definition: FXVec3f.h:28
Single-precision 4x4 matrix.
Definition: FXMat4f.h:32
Single-precision 2x2 matrix.
Definition: FXMat2f.h:31
FXMat3f()
Default constructor; value is not initialized.
Definition: FXMat3f.h:39

Copyright © 1997-2022 Jeroen van der Zijp