SCL  1.0
Standard Control Library : Control, dynamics, physics, and simulation
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Friends Macros Groups Pages
TaoDeVector6Inl.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 _deVector6_inl
24 #define _deVector6_inl
25 
26 DE_MATH_API deVector3& deVector6::operator[](deInt row) { return _vec3[row]; }
27 DE_MATH_API const deVector3& deVector6::operator[](deInt row) const { return _vec3[row]; }
28 
29 DE_MATH_API deFloat& deVector6::elementAt(deInt i) { return (i < 3) ? _vec3[0][i] : _vec3[1][i - 3]; }
30 DE_MATH_API const deFloat& deVector6::elementAt(deInt i) const { return (i < 3) ? _vec3[0][i] : _vec3[1][i - 3]; }
31 
32 
33 DE_MATH_API deFloat deVector6::dot(const deVector6& v) const { return (_vec3[0].dot(v._vec3[0]) + _vec3[1].dot(v._vec3[1])); }
34 
35 DE_MATH_API void deVector6::operator=(const deVector6& v) { _vec3[0] = v._vec3[0]; _vec3[1] = v._vec3[1]; }
36 DE_MATH_API void deVector6::zero() { _vec3[0].zero(); _vec3[1].zero(); }
37 DE_MATH_API void deVector6::negate(const deVector6& v) { _vec3[0].negate(v._vec3[0]); _vec3[1].negate(v._vec3[1]); }
38 DE_MATH_API void deVector6::add(const deVector6& v1,const deVector6& v2) { _vec3[0].add(v1._vec3[0], v2._vec3[0]); _vec3[1].add(v1._vec3[1], v2._vec3[1]); }
39 DE_MATH_API void deVector6::subtract(const deVector6& v1,const deVector6& v2) { _vec3[0].subtract(v1._vec3[0], v2._vec3[0]); _vec3[1].subtract(v1._vec3[1], v2._vec3[1]); }
40 DE_MATH_API void deVector6::multiply(const deVector6& v, const deFloat s) { _vec3[0].multiply(v._vec3[0], s); _vec3[1].multiply(v._vec3[1], s); }
41 DE_MATH_API void deVector6::multiply(const deMatrix6& m, const deVector6& v) {
42  deVector3 tmpV3;
43  _vec3[0].multiply(m[0][0], v._vec3[0]); tmpV3.multiply(m[0][1], v._vec3[1]); _vec3[0] += tmpV3;
44  _vec3[1].multiply(m[1][0], v._vec3[0]); tmpV3.multiply(m[1][1], v._vec3[1]); _vec3[1] += tmpV3;
45 }
46 DE_MATH_API void deVector6::transposedMultiply(const deMatrix6& m, const deVector6& v) {
47  deVector3 tmpV3;
48  _vec3[0].transposedMultiply(m[0][0], v._vec3[0]); tmpV3.transposedMultiply(m[1][0], v._vec3[1]); _vec3[0] += tmpV3;
49  _vec3[1].transposedMultiply(m[0][1], v._vec3[0]); tmpV3.transposedMultiply(m[1][1], v._vec3[1]); _vec3[1] += tmpV3;
50 }
51 DE_MATH_API void deVector6::error(const deTransform& T, const deTransform& Td) { _vec3[0].subtract(T.translation(), Td.translation()); _vec3[1].angularError(T.rotation(), Td.rotation()); }
52 DE_MATH_API void deVector6::error(const deFrame &F, const deFrame& Fd) { _vec3[0].subtract(F.translation(), Fd.translation()); _vec3[1].angularError(F.rotation(), Fd.rotation()); }
53 DE_MATH_API void deVector6::operator+=(const deVector6& v) { _vec3[0] += v._vec3[0]; _vec3[1] += v._vec3[1]; }
54 DE_MATH_API void deVector6::operator-=(const deVector6& v) { _vec3[0] -= v._vec3[0]; _vec3[1] -= v._vec3[1]; }
55 DE_MATH_API void deVector6::operator*=(const deFloat s) { _vec3[0] *= s; _vec3[1] *= s; }
56 DE_MATH_API void deVector6::solve(const deMatrix6& m, const deVector6& y) { deMatrix6 lu; lu.ludecomp(m); backSub(lu,y); }
57 DE_MATH_API void deVector6::solveSPD(const deMatrix6& m, const deVector6& y) { deMatrix6 lu; lu.ludecompSPD(m); backSubSPD(lu,y); }
58 DE_MATH_API void deVector6::xform(const deTransform& t, const deVector6& v) {
59  _vec3[0].multiply(t.rotation(), v._vec3[0]);
60  _vec3[1].multiply(t.rotation(), v._vec3[1]);
61  deVector3 tmpV;
62  tmpV.crossMultiply(t.translation(), _vec3[0]);
63  _vec3[1] += tmpV;
64 }
65 DE_MATH_API void deVector6::xformT(const deTransform& t, const deVector6& v) {
66  _vec3[0].crossMultiply(t.translation(), v._vec3[1]);
67  _vec3[1].subtract(v._vec3[0], _vec3[0]);
68  _vec3[0].transposedMultiply(t.rotation(), _vec3[1]);
69  _vec3[1].transposedMultiply(t.rotation(), v._vec3[1]);
70 }
71 DE_MATH_API void deVector6::xformInvT(const deTransform& t, const deVector6& v) {
72  _vec3[0].multiply(t.rotation(), v._vec3[0]);
73  _vec3[1].multiply(t.rotation(), v._vec3[1]);
74  deVector3 tmpV;
75  tmpV.crossMultiply(t.translation(), _vec3[1]);
76  _vec3[0] += tmpV;
77 }
78 DE_MATH_API void deVector6::xformInv(const deTransform& t, const deVector6& v) {
79  _vec3[1].crossMultiply(t.translation(), v._vec3[0]);
80  _vec3[0].subtract(v._vec3[1], _vec3[1]);
81  _vec3[1].transposedMultiply(t.rotation(), _vec3[0]);
82  _vec3[0].transposedMultiply(t.rotation(), v._vec3[0]);
83 }
84 DE_MATH_API void deVector6::crossMultiply(const deVector6& v1, const deVector6& v2) {
85  _vec3[1].crossMultiply(v1._vec3[0], v2._vec3[1]);
86  _vec3[0].crossMultiply(v1._vec3[1], v2._vec3[0]);
87  _vec3[0] += _vec3[1];
88  _vec3[1].crossMultiply(v1._vec3[1], v2._vec3[1]);
89 }
90 
91 #endif // _deVector6_inl
DE_MATH_API void multiply(const deVector6 &v, const deFloat s)
this[i] = v[i] * s
Definition: TaoDeVector6Inl.h:40
DE_MATH_API void subtract(const deVector6 &v1, const deVector6 &v2)
this = v1 - v2
Definition: TaoDeVector6Inl.h:39
DE_MATH_API void angularError(const deMatrix3 &R, const deMatrix3 &Rd)
this = dPhi = R - Rd
Definition: TaoDeVector3Inl.h:65
DE_MATH_API void operator-=(const deVector6 &v)
this -= v
Definition: TaoDeVector6Inl.h:54
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
deQuaternion & rotation()
Definition: TaoDeFrame.h:49
DE_MATH_API void xformInvT(const deTransform &t, const deVector6 &v)
this = X^-T v
Definition: TaoDeVector6Inl.h:71
6x1 vector classThis class consists of two 3x1 vectors.
Definition: TaoDeVector6.h:33
DE_MATH_API void solveSPD(const deMatrix6 &m, const deVector6 &y)
this = x where y = m x and m is SPD
Definition: TaoDeVector6Inl.h:57
DE_MATH_API void operator+=(const deVector6 &v)
this += v
Definition: TaoDeVector6Inl.h:53
DE_MATH_API deMatrix3 & rotation()
Definition: TaoDeTransformInl.h:26
Transformation class using rotational matrixThis class consists of a matrix for rotation and a vector...
Definition: TaoDeTransform.h:32
DE_MATH_API void error(const deTransform &T, const deTransform &Td)
this = T - Td
Definition: TaoDeVector6Inl.h:51
void ludecomp(const deMatrix6 &m)
this = LU decomposition of m
Definition: TaoDeMatrix6.cpp:387
DE_MATH_API deVector3 & operator[](deInt row)
Definition: TaoDeVector6Inl.h:26
void backSub(const deMatrix6 &lu, const deVector6 &y)
this = x where y = LU x
Definition: TaoDeVector6.cpp:30
DE_MATH_API void zero()
this = zero vector
Definition: TaoDeVector6Inl.h:36
DE_MATH_API void transposedMultiply(const deMatrix6 &m, const deVector6 &v)
this = m^T * v
Definition: TaoDeVector6Inl.h:46
DE_MATH_API void solve(const deMatrix6 &m, const deVector6 &y)
this = x where y = m x
Definition: TaoDeVector6Inl.h:56
DE_MATH_API deFloat dot(const deVector3 &v) const
return this^T * v
Definition: TaoDeVector3Inl.h:29
Transformation class using quaternionThis class consists of a quaternion for rotation and a vector fo...
Definition: TaoDeFrame.h:36
DE_MATH_API void add(const deVector6 &v1, const deVector6 &v2)
this = v1 + v2
Definition: TaoDeVector6Inl.h:38
void ludecompSPD(const deMatrix6 &m)
this = LU decomposition of m where m is SPD
Definition: TaoDeMatrix6.cpp:438
6x6 matrix classThis class consists of four 3x3 matrices.
Definition: TaoDeMatrix6.h:33
DE_MATH_API void operator=(const deVector6 &v)
this = v
Definition: TaoDeVector6Inl.h:35
DE_MATH_API void xformT(const deTransform &t, const deVector6 &v)
this = X^T v
Definition: TaoDeVector6Inl.h:65
DE_MATH_API void negate(const deVector6 &v)
this = -v
Definition: TaoDeVector6Inl.h:37
deVector3 & translation()
Definition: TaoDeFrame.h:53
DE_MATH_API void add(const deVector3 &v1, const deVector3 &v2)
this = v1 + v2
Definition: TaoDeVector3Inl.h:46
DE_MATH_API void subtract(const deVector3 &v1, const deVector3 &v2)
this = v1 - v2
Definition: TaoDeVector3Inl.h:47
DE_MATH_API deFloat & elementAt(deInt i)
Definition: TaoDeVector6Inl.h:29
DE_MATH_API void xformInv(const deTransform &t, const deVector6 &v)
this = X^-1 v
Definition: TaoDeVector6Inl.h:78
DE_MATH_API void crossMultiply(const deVector6 &v1, const deVector6 &v2)
this = [v0;v1]X[tmp0;tmp1] = [ v1x , v0x ; 0 , v1x ] [ tmp0 ; tmp1 ]
Definition: TaoDeVector6Inl.h:84
void backSubSPD(const deMatrix6 &lu, const deVector6 &y)
this = x where y = LU x and L*U is SPD
Definition: TaoDeVector6.cpp:62
DE_MATH_API deVector3 & translation()
Definition: TaoDeTransformInl.h:28
DE_MATH_API void transposedMultiply(const deMatrix3 &m, const deVector3 &v)
this = m^T * v
Definition: TaoDeVector3Inl.h:53
DE_MATH_API void xform(const deTransform &t, const deVector6 &v)
this = X v
Definition: TaoDeVector6Inl.h:58
DE_MATH_API void operator*=(const deFloat s)
this *= s
Definition: TaoDeVector6Inl.h:55
DE_MATH_API void zero()
this = 0
Definition: TaoDeVector3Inl.h:38
DE_MATH_API deFloat dot(const deVector6 &v) const
Definition: TaoDeVector6Inl.h:33
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