SCL  1.0
Standard Control Library : Control, dynamics, physics, and simulation
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Friends Macros Groups Pages
TaoDeVector3Inl.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_inl
24 #define _deVector3_inl
25 
27 
28 DE_MATH_API deInt deVector3::operator==(const deVector3& v) const { return deIsEqualV3V3(_data, v); }
29 DE_MATH_API deFloat deVector3::dot(const deVector3& v) const { return deDotV3V3(_data, v); }
30 DE_MATH_API deFloat deVector3::magnitude() const { return deMagnitudeV3(_data); }
31 
32 DE_MATH_API void deVector3::operator=(const deVector3& v) { deSetV3V3(_data, v); }
33 DE_MATH_API void deVector3::operator+=(const deVector3& v) { deAddV3V3(_data, v); }
34 DE_MATH_API void deVector3::operator-=(const deVector3& v) { deSubV3V3(_data, v); }
35 DE_MATH_API void deVector3::operator*=(const deVector3& v) { deMulV3V3(_data, v); }
36 DE_MATH_API void deVector3::operator*=(const deFloat s) { deMulV3S1(_data, s); }
37 DE_MATH_API void deVector3::operator+=(const deFloat s) { deAddV3S1(_data, s); }
38 DE_MATH_API void deVector3::zero() { deZeroV3(_data); }
39 DE_MATH_API void deVector3::normalize() { deNormalizeV3(_data); }
40 DE_MATH_API void deVector3::set(const deFloat x, const deFloat y, const deFloat z) { deSetV3S3(_data, x, y, z); }
41 DE_MATH_API void deVector3::set(const deFloat* v) { deSetV3V3(_data, v); }
42 DE_MATH_API void deVector3::get(deFloat* v) const { deSetV3V3(v, _data); }
43 DE_MATH_API void deVector3::minimum(const deVector3& v) { deMinV3V3(_data, v); }
44 DE_MATH_API void deVector3::maximum(const deVector3& v) { deMaxV3V3(_data, v); }
45 DE_MATH_API void deVector3::negate(const deVector3& v) { deNegateV3V3(_data, v); }
46 DE_MATH_API void deVector3::add(const deVector3& v1, const deVector3& v2) { deAddV3V3V3(_data, v1, v2); }
47 DE_MATH_API void deVector3::subtract(const deVector3& v1, const deVector3& v2) { deSubV3V3V3(_data, v1, v2); }
48 DE_MATH_API void deVector3::multiply(const deVector3& v1, const deVector3& v2) { deMulV3V3V3(_data, v1, v2); }
49 DE_MATH_API void deVector3::multiply(const deVector3& v, const deFloat s) { deMulV3V3S1(_data, v, s); }
50 DE_MATH_API void deVector3::add(const deVector3& v, const deFloat s) { deAddV3V3S1(_data, v, s); }
51 DE_MATH_API void deVector3::crossMultiply(const deVector3& v1, const deVector3& v2) { deCrossV3V3V3(_data, v1, v2); }
52 DE_MATH_API void deVector3::multiply(const deMatrix3& m, const deVector3& v) { deMulV3M3V3(_data, m._data, v); }
53 DE_MATH_API void deVector3::transposedMultiply(const deMatrix3& m, const deVector3& v) { deMulV3M3tV3(_data, m._data, v); }
54 DE_MATH_API void deVector3::multiply(const deTransform& t, const deVector3& v) {
55  deMulV3M3V3(_data, t.rotation()._data, v);
56  deAddV3V3(_data, t.translation());
57 }
58 DE_MATH_API void deVector3::inversedMultiply(const deTransform& t, const deVector3& v) {
59  deVector3 p;
60  deSubV3V3V3(p, v, t.translation());
61  deMulV3M3tV3(_data, t.rotation()._data, (const deVector3&)p); // YYY
62 }
63 DE_MATH_API void deVector3::diagonal(const deMatrix3& m) { deDiagonalV3M3(_data, m._data); }
64 DE_MATH_API void deVector3::column(const deMatrix3& m, const deInt col) { deColumnV3M3S1(_data, m._data, col); }
65 DE_MATH_API void deVector3::angularError(const deMatrix3& R, const deMatrix3& Rd) { deAngularErrorV3M3M3(_data, R._data, Rd._data); }
66 DE_MATH_API void deVector3::eulerXYZ(const deMatrix3& m) { deSetV3M3xyz(_data, m._data); }
67 DE_MATH_API void deVector3::eulerZYX(const deMatrix3& m) { deSetV3M3zyx(_data, m._data); }
68 DE_MATH_API void deVector3::eulerZYX(const deMatrix3& m, const deVector3& v) { deSetV3M3zyxV3(_data, m._data, v); }
69 DE_MATH_API void deVector3::eulerZYX(const deQuaternion& q) { deSetV3Q4zyx(_data, q); }
70 DE_MATH_API void deVector3::backSub(const deMatrix3& LU, const deVector3& y) { deBackSubstituteV3M3V3(_data, LU._data, y); }
71 DE_MATH_API void deVector3::multiply(const deQuaternion& q, const deVector3& v) { deMulV3Q4V3(_data, q, v); }
72 DE_MATH_API void deVector3::inversedMultiply(const deQuaternion& q, const deVector3& v) { deMulV3Q4iV3(_data, q, v); }
73 DE_MATH_API void deVector3::column(const deQuaternion& q, const deInt col) { deColumnV3Q4S1(_data, q, col); }
74 DE_MATH_API void deVector3::angularError(const deQuaternion& q, const deQuaternion& qd) { deAngularErrorV3Q4Q4(_data, q, qd); }
76 DE_MATH_API void deVector3::multiply(const deFrame& f, const deVector3& v) {
77  deMulV3Q4V3(_data, f.rotation(), v);
78  deAddV3V3(_data, f.translation());
79 }
81 DE_MATH_API void deVector3::inversedMultiply(const deFrame& f, const deVector3& v) {
82  deVector3 p;
83  deSubV3V3V3(p, v, f.translation());
84  deMulV3Q4iV3(_data, f.rotation(), (const deVector3&)p); // YYY
85 }
86 DE_MATH_API void deVector3::lerp(const deVector3& v, const deVector3& vg, const deFloat t) { deLerpV3V3V3S1(_data, v, vg, t); }
87 
88 #endif // _deVector3_inl
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
deQuaternion & rotation()
Definition: TaoDeFrame.h:49
DE_MATH_API deInt operator==(const deVector3 &v) const
return (this == v)
Definition: TaoDeVector3Inl.h:28
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
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 operator-=(const deVector3 &v)
this -= v
Definition: TaoDeVector3Inl.h:34
DE_MATH_API void get(deFloat *v) const
[x y z] = this
Definition: TaoDeVector3Inl.h:42
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
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 & 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 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
3x3 matrix classThis is a C++ wrapper class of deMatrix3f.
Definition: TaoDeMatrix3.h:33
DE_MATH_API void operator+=(const deVector3 &v)
this += v
Definition: TaoDeVector3Inl.h:33
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 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