SCL  1.0
Standard Control Library : Control, dynamics, physics, and simulation
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Friends Macros Groups Pages
TaoDeMatrix3.h
1 /* Copyright (c) 2005 Arachi, Inc. and Stanford University. All rights reserved.
2  *
3  * Permission is hereby granted, free of charge, to any person obtaining
4  * a copy of this software and associated documentation files (the
5  * "Software"), to deal in the Software without restriction, including
6  * without limitation the rights to use, copy, modify, merge, publish,
7  * distribute, sublicense, and/or sell copies of the Software, and to
8  * permit persons to whom the Software is furnished to do so, subject
9  * to the following conditions:
10  *
11  * The above copyright notice and this permission notice shall be included
12  * in all copies or substantial portions of the Software.
13  *
14  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
15  * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
17  * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
18  * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
19  * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
20  * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
21  */
22 
23 #ifndef _deMatrix3_h
24 #define _deMatrix3_h
25 
33 class deMatrix3
34 {
35 public:
37  inline deMatrix3() { zero(); }
38 
43  operator deFloat*() { return _data[0]; }
44 
49  operator const deFloat*() const { return _data[0]; }
50 
52  deFloat* operator[](const deInt row) { return _data[row]; }
54  const deFloat* operator[](const deInt row) const { return _data[row]; }
56  deFloat& elementAt(const deInt i, const deInt j) { return _data[i][j]; }
58  const deFloat& elementAt(const deInt i, const deInt j) const { return _data[i][j]; }
60  DE_MATH_API void operator=(const deMatrix3& m);
62  DE_MATH_API void zero();
64  DE_MATH_API void identity();
66  DE_MATH_API void negate(const deMatrix3& m);
68  DE_MATH_API void add(const deMatrix3& m1, const deMatrix3& m2);
70  DE_MATH_API void subtract(const deMatrix3& m1, const deMatrix3& m2);
72  DE_MATH_API void multiply(const deMatrix3& m1, const deMatrix3& m2);
74  DE_MATH_API void transposedMultiply(const deMatrix3& m1, const deMatrix3& m2);
76  DE_MATH_API void multiplyTransposed(const deMatrix3& m1, const deMatrix3& m2);
78  DE_MATH_API void multiply(const deMatrix3& m, const deFloat s);
80  DE_MATH_API void operator+=(const deMatrix3& m);
82  DE_MATH_API void operator-=(const deMatrix3& m);
84  DE_MATH_API void operator*=(const deFloat s);
86  DE_MATH_API void diagonal(const deFloat x, const deFloat y, const deFloat z);
88  DE_MATH_API void diagonal(const deVector3& v);
89 
93  // @{
95  DE_MATH_API void eulerXYZ(const deFloat x, const deFloat y, const deFloat z);
97  DE_MATH_API void eulerZYX(const deFloat x, const deFloat y, const deFloat z);
99  DE_MATH_API void set(const deQuaternion& q);
101  DE_MATH_API void set(const deInt axis, const deFloat angle);
103  DE_MATH_API void set(const deVector3& axis, const deFloat angle);
105  DE_MATH_API void set(const deFloat a0, const deFloat a1, const deFloat a2,
106  const deFloat a3, const deFloat a4, const deFloat a5,
107  const deFloat a6, const deFloat a7, const deFloat a8);
108  // @}
109 
111  DE_MATH_API deFloat det() const;
113  DE_MATH_API void inverseDet(const deMatrix3& m);
115  DE_MATH_API void inverseDetSPD(const deMatrix3& m);
117  DE_MATH_API void ludecomp(const deMatrix3& m);
119  DE_MATH_API void transpose(const deMatrix3& m);
121  DE_MATH_API void multiplyTransposed(const deVector3& v1, const deVector3& v2);
123  DE_MATH_API void crossMultiply(const deVector3& v, const deMatrix3& m);
125  DE_MATH_API void cross(const deVector3& v);
127  DE_MATH_API void multiplyCross(const deMatrix3& m, const deVector3& v);
128 
129  friend class deVector3;
130  friend class deQuaternion;
131 
132 private:
133  deFloat _data[DE_MATRIX3_ROW][DE_MATRIX3_COL];
134 };
135 
136 #endif // _deMatrix3_h
DE_MATH_API void transpose(const deMatrix3 &m)
this = m^T
Definition: TaoDeMatrix3Inl.h:50
3x1 vector classThis is a C++ wrapper class of deVector3f.
Definition: TaoDeVector3.h:32
DE_MATH_API void operator+=(const deMatrix3 &m)
this += m
Definition: TaoDeMatrix3Inl.h:38
deFloat * operator[](const deInt row)
Definition: TaoDeMatrix3.h:52
DE_MATH_API void subtract(const deMatrix3 &m1, const deMatrix3 &m2)
this = m1 - m2
Definition: TaoDeMatrix3Inl.h:33
DE_MATH_API void multiplyCross(const deMatrix3 &m, const deVector3 &v)
this = m * (v x)
Definition: TaoDeMatrix3Inl.h:54
DE_MATH_API void transposedMultiply(const deMatrix3 &m1, const deMatrix3 &m2)
this = m1^T * m2
Definition: TaoDeMatrix3Inl.h:35
DE_MATH_API void operator-=(const deMatrix3 &m)
this -= m
Definition: TaoDeMatrix3Inl.h:39
DE_MATH_API void diagonal(const deFloat x, const deFloat y, const deFloat z)
diag(this) = (x, y, z), offdiag(this) = 0
Definition: TaoDeMatrix3Inl.h:41
deFloat & elementAt(const deInt i, const deInt j)
Definition: TaoDeMatrix3.h:56
DE_MATH_API void identity()
this = identity matrix
Definition: TaoDeMatrix3Inl.h:30
DE_MATH_API void zero()
this = zero matrix
Definition: TaoDeMatrix3Inl.h:29
DE_MATH_API void add(const deMatrix3 &m1, const deMatrix3 &m2)
this = m1 + m2
Definition: TaoDeMatrix3Inl.h:32
DE_MATH_API void ludecomp(const deMatrix3 &m)
this = LU decomposition of m
Definition: TaoDeMatrix3Inl.h:49
deMatrix3()
Definition: TaoDeMatrix3.h:37
DE_MATH_API void multiplyTransposed(const deMatrix3 &m1, const deMatrix3 &m2)
this = m1 * m2^T
Definition: TaoDeMatrix3Inl.h:36
const deFloat * operator[](const deInt row) const
Definition: TaoDeMatrix3.h:54
DE_MATH_API void multiply(const deMatrix3 &m1, const deMatrix3 &m2)
this = m1 * m2
Definition: TaoDeMatrix3Inl.h:34
Quaternion classThis is a C++ wrapper class of deQuaternionf.
Definition: TaoDeQuaternion.h:35
DE_MATH_API void negate(const deMatrix3 &m)
this = -m
Definition: TaoDeMatrix3Inl.h:31
DE_MATH_API void operator=(const deMatrix3 &m)
this = m
Definition: TaoDeMatrix3Inl.h:28
const deFloat & elementAt(const deInt i, const deInt j) const
Definition: TaoDeMatrix3.h:58
DE_MATH_API void crossMultiply(const deVector3 &v, const deMatrix3 &m)
this = (v x) * m
Definition: TaoDeMatrix3Inl.h:52
DE_MATH_API void inverseDetSPD(const deMatrix3 &m)
this = m^-1 using determinent where m is SPD
Definition: TaoDeMatrix3Inl.h:48
DE_MATH_API void set(const deQuaternion &q)
this = q
Definition: TaoDeMatrix3Inl.h:55
DE_MATH_API deFloat det() const
Definition: TaoDeMatrix3Inl.h:26
3x3 matrix classThis is a C++ wrapper class of deMatrix3f.
Definition: TaoDeMatrix3.h:33
DE_MATH_API void cross(const deVector3 &v)
this = (v x)
Definition: TaoDeMatrix3Inl.h:53
DE_MATH_API void eulerXYZ(const deFloat x, const deFloat y, const deFloat z)
this = X-Y-Z Euler angles
Definition: TaoDeMatrix3Inl.h:43
DE_MATH_API void operator*=(const deFloat s)
this *= s
Definition: TaoDeMatrix3Inl.h:40
DE_MATH_API void eulerZYX(const deFloat x, const deFloat y, const deFloat z)
this = Z-Y-X Euler angles
Definition: TaoDeMatrix3Inl.h:44
DE_MATH_API void inverseDet(const deMatrix3 &m)
this = m^-1 using determinent
Definition: TaoDeMatrix3Inl.h:47