SCL  1.0
Standard Control Library : Control, dynamics, physics, and simulation
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Friends Macros Groups Pages
TaoDeVector3.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 _deVector3_h
24 #define _deVector3_h
25 
32 class deVector3
33 {
34 public:
36  inline deVector3() { zero(); }
37 
39  inline deVector3(deFloat v0, deFloat v1, deFloat v2)
40  { _data[0] = v0; _data[1] = v1; _data[2] = v2; }
41 
42  inline deVector3(deVector3 const & orig) {
43  for (size_t ii(0); ii < DE_VECTOR3_SIZE; ++ii)
44  _data[ii] = orig._data[ii];
45  }
46 
48  deFloat& operator[](const deInt i) { return _data[i]; }
50  const deFloat& operator[](const deInt i) const { return _data[i]; }
52  operator deFloat*() { return _data; }
54  operator const deFloat*() const { return _data; }
56  deFloat& elementAt(const deInt i) { return _data[i]; }
58  const deFloat& elementAt(const deInt i) const { return _data[i]; }
59 
61  DE_MATH_API void operator=(const deVector3& v);
63  DE_MATH_API deInt operator==(const deVector3& v) const;
65  DE_MATH_API void operator+=(const deVector3& v);
67  DE_MATH_API void operator-=(const deVector3& v);
69  DE_MATH_API void operator*=(const deVector3& v);
71  DE_MATH_API void operator*=(const deFloat s);
73  DE_MATH_API void operator+=(const deFloat s);
74 
76  DE_MATH_API void zero();
77 
79  DE_MATH_API deFloat dot(const deVector3& v) const;
81  DE_MATH_API deFloat magnitude() const;
83  DE_MATH_API void normalize();
85  DE_MATH_API void set(const deFloat x, const deFloat y, const deFloat z);
87  DE_MATH_API void set(const deFloat* v);
89  DE_MATH_API void get(deFloat* v) const;
90 
92  DE_MATH_API void minimum(const deVector3& v);
94  DE_MATH_API void maximum(const deVector3& v);
95 
97  DE_MATH_API void negate(const deVector3& v);
99  DE_MATH_API void add(const deVector3& v1, const deVector3& v2);
101  DE_MATH_API void subtract(const deVector3& v1, const deVector3& v2);
103  DE_MATH_API void multiply(const deVector3& v1, const deVector3& v2);
105  DE_MATH_API void multiply(const deVector3& v, const deFloat s);
107  DE_MATH_API void add(const deVector3& v, const deFloat s);
109  DE_MATH_API void crossMultiply(const deVector3& v1, const deVector3& v2);
111  DE_MATH_API void multiply(const deMatrix3& m, const deVector3& v);
113  DE_MATH_API void transposedMultiply(const deMatrix3& m, const deVector3& v);
115  DE_MATH_API void multiply(const deTransform& t, const deVector3& v);
117  DE_MATH_API void inversedMultiply(const deTransform& t, const deVector3& v);
119  DE_MATH_API void diagonal(const deMatrix3& m);
121  DE_MATH_API void column(const deMatrix3& m, const deInt col);
123  DE_MATH_API void angularError(const deMatrix3& R, const deMatrix3& Rd);
125  DE_MATH_API void eulerXYZ(const deMatrix3& m);
127  DE_MATH_API void eulerZYX(const deMatrix3& m);
129  DE_MATH_API void eulerZYX(const deMatrix3& m, const deVector3& v);
131  DE_MATH_API void eulerZYX(const deQuaternion& q);
133  DE_MATH_API void backSub(const deMatrix3& LU, const deVector3& y);
135  DE_MATH_API void multiply(const deQuaternion& q, const deVector3& v);
137  DE_MATH_API void inversedMultiply(const deQuaternion& q, const deVector3& v);
139  DE_MATH_API void column(const deQuaternion& q, const deInt col);
140  // dPhi = Einv ( q - qd) = -2*q_tilde^T qd <-- since (q_tilde^T q) = 0
141  // E = 0.5*q_tilde
142  // Einv = (EtE)inv Et = 4Et = 2*qtilde^T <-- since (q_tilde^T q_tilde) = I
143  // q_tilde = [ -x -y -z; w -z y; z w -x; -y x w ]
144  // q_tilde^T = [ -x w z -y; -y -z w x; -z y -x w ]
145  DE_MATH_API void angularError(const deQuaternion& q, const deQuaternion& qd);
147  DE_MATH_API void multiply(const deFrame& f, const deVector3& v);
149  DE_MATH_API void inversedMultiply(const deFrame& f, const deVector3& v);
150 
152  // this = v + t * (vg - v)
153  DE_MATH_API void lerp(const deVector3& v, const deVector3& vg, const deFloat t);
154 
155 private:
156  deFloat _data[DE_VECTOR3_SIZE];
157 };
158 
159 #endif // _deVector3_h
DE_MATH_API void eulerZYX(const deMatrix3 &m)
this = ZYX Euler angles of m
Definition: TaoDeVector3Inl.h:67
DE_MATH_API void angularError(const deMatrix3 &R, const deMatrix3 &Rd)
this = dPhi = R - Rd
Definition: TaoDeVector3Inl.h:65
DE_MATH_API void normalize()
this[i] *= (1 / magnitude())
Definition: TaoDeVector3Inl.h:39
3x1 vector classThis is a C++ wrapper class of deVector3f.
Definition: TaoDeVector3.h:32
DE_MATH_API void crossMultiply(const deVector3 &v1, const deVector3 &v2)
this = v1 x v2
Definition: TaoDeVector3Inl.h:51
DE_MATH_API void maximum(const deVector3 &v)
this[i] = max(this[i], v[i])
Definition: TaoDeVector3Inl.h:44
DE_MATH_API deInt operator==(const deVector3 &v) const
return (this == v)
Definition: TaoDeVector3Inl.h:28
const deFloat & operator[](const deInt i) const
return const this[i]
Definition: TaoDeVector3.h:50
DE_MATH_API void inversedMultiply(const deTransform &t, const deVector3 &v)
this = ~[r,p]*v = [~r, -(~r*p)]*v = ~r*v -~r*p = ~r*(v-p)
Definition: TaoDeVector3Inl.h:58
Transformation class using rotational matrixThis class consists of a matrix for rotation and a vector...
Definition: TaoDeTransform.h:32
DE_MATH_API void operator-=(const deVector3 &v)
this -= v
Definition: TaoDeVector3Inl.h:34
Quaternion classThis is a C++ wrapper class of deQuaternionf.
Definition: TaoDeQuaternion.h:35
DE_MATH_API void minimum(const deVector3 &v)
this[i] = min(this[i], v[i])
Definition: TaoDeVector3Inl.h:43
DE_MATH_API deFloat dot(const deVector3 &v) const
return this^T * v
Definition: TaoDeVector3Inl.h:29
DE_MATH_API void backSub(const deMatrix3 &LU, const deVector3 &y)
this = x where y = LU x
Definition: TaoDeVector3Inl.h:70
DE_MATH_API void set(const deFloat x, const deFloat y, const deFloat z)
this = (x, y, z)
Definition: TaoDeVector3Inl.h:40
deFloat & elementAt(const deInt i)
return this[i]
Definition: TaoDeVector3.h:56
Transformation class using quaternionThis class consists of a quaternion for rotation and a vector fo...
Definition: TaoDeFrame.h:36
DE_MATH_API void column(const deMatrix3 &m, const deInt col)
this = col of m
Definition: TaoDeVector3Inl.h:64
deVector3(deFloat v0, deFloat v1, deFloat v2)
Definition: TaoDeVector3.h:39
DE_MATH_API void add(const deVector3 &v1, const deVector3 &v2)
this = v1 + v2
Definition: TaoDeVector3Inl.h:46
DE_MATH_API void operator=(const deVector3 &v)
this = v;
Definition: TaoDeVector3Inl.h:32
DE_MATH_API void eulerXYZ(const deMatrix3 &m)
this = XYZ Euler angles of m
Definition: TaoDeVector3Inl.h:66
DE_MATH_API void diagonal(const deMatrix3 &m)
this = diag(m)
Definition: TaoDeVector3Inl.h:63
DE_MATH_API void subtract(const deVector3 &v1, const deVector3 &v2)
this = v1 - v2
Definition: TaoDeVector3Inl.h:47
const deFloat & elementAt(const deInt i) const
return const this[i]
Definition: TaoDeVector3.h:58
deVector3()
Definition: TaoDeVector3.h:36
3x3 matrix classThis is a C++ wrapper class of deMatrix3f.
Definition: TaoDeMatrix3.h:33
deFloat & operator[](const deInt i)
return this[i]
Definition: TaoDeVector3.h:48
DE_MATH_API void operator+=(const deVector3 &v)
this += v
Definition: TaoDeVector3Inl.h:33
DE_MATH_API void transposedMultiply(const deMatrix3 &m, const deVector3 &v)
this = m^T * v
Definition: TaoDeVector3Inl.h:53
DE_MATH_API void operator*=(const deVector3 &v)
this[i] *= v[i]
Definition: TaoDeVector3Inl.h:35
DE_MATH_API void zero()
this = 0
Definition: TaoDeVector3Inl.h:38
DE_MATH_API deFloat magnitude() const
return sqrt(this^T * this)
Definition: TaoDeVector3Inl.h:30
DE_MATH_API void negate(const deVector3 &v)
this = -v
Definition: TaoDeVector3Inl.h:45
DE_MATH_API void multiply(const deVector3 &v1, const deVector3 &v2)
this[i] = v1[i] * v2[i]
Definition: TaoDeVector3Inl.h:48
DE_MATH_API void lerp(const deVector3 &v, const deVector3 &vg, const deFloat t)
this = LERP
Definition: TaoDeVector3Inl.h:86