MeVisLab Toolbox Reference
mlVector4.h
Go to the documentation of this file.
1 /*************************************************************************************
2 **
3 ** Copyright 2007, MeVis Medical Solutions AG
4 **
5 ** The user may use this file in accordance with the license agreement provided with
6 ** the Software or, alternatively, in accordance with the terms contained in a
7 ** written agreement between the user and MeVis Medical Solutions AG.
8 **
9 ** For further information use the contact form at https://www.mevislab.de/contact
10 **
11 **************************************************************************************/
12 
13 #ifndef ML_VECTOR4_H
14 #define ML_VECTOR4_H
15 
17 
18 // Include system independent file and project settings.
19 #include "mlLinearAlgebraSystem.h"
20 #include "mlLinearAlgebraDefs.h"
21 
22 #include "mlFloatingPointVector.h"
23 #include "mlVector2.h"
24 #include "mlVector3.h"
25 #include "mlMatrix3.h"
26 #include "mlMatrix4.h"
27 
28 #include <mlErrorOutput.h>
29 
30 // All declarations of this header will be in the ML_LA_NAMESPACE namespace.
31 ML_LA_START_NAMESPACE
32 
33 //--------------------------------------------------------------------
35 // This is necessary because we do not known whether vector or
36 // matrix header is included first and we cannot move template
37 // code into C++ file.
38 //--------------------------------------------------------------------
39 template <class DT> class Tvec2;
40 template <class DT> class Tvec3;
41 template <class DT> class Tmat3;
42 template <class DT> class Tmat4;
44 
45 //--------------------------------------------------------------------
47 //--------------------------------------------------------------------
48 template <class DT>
49 class Tvec4 : public FloatingPointVector<DT,4>
50 {
51 public:
52 
55 
57  typedef DT ComponentType;
58 
59  //--------------------------------------------------------------------
62  //--------------------------------------------------------------------
64  inline explicit Tvec4(const DT value=0) : Superclass(value)
65  {
66  }
67 
71  inline Tvec4(const Superclass &v): Superclass(v)
72  {
73  }
74 
77  inline Tvec4(const DT x, const DT y, const DT z, const DT w)
78  {
79  Superclass::_buffer[0] = x;
80  Superclass::_buffer[1] = y;
81  Superclass::_buffer[2] = z;
82  Superclass::_buffer[3] = w;
83  }
84 
86  inline Tvec4(const Tvec2<DT>& v, const DT z, const DT w)
87  {
88  Superclass::_buffer[0] = v[0];
89  Superclass::_buffer[1] = v[1];
90  Superclass::_buffer[2] = z;
91  Superclass::_buffer[3] = w;
92  }
93 
95  inline Tvec4(const Tvec3<DT>& v, const DT w)
96  {
97  Superclass::_buffer[0] = v[0];
98  Superclass::_buffer[1] = v[1];
99  Superclass::_buffer[2] = v[2];
100  Superclass::_buffer[3] = w;
101  }
102 
104  inline void assign(const DT x, const DT y, const DT z, const DT c)
105  {
106  Superclass::_buffer[0] = x;
107  Superclass::_buffer[1] = y;
108  Superclass::_buffer[2] = z;
109  Superclass::_buffer[3] = c;
110  }
111 
117  {
118  const DT lastComp = Superclass::_buffer[3];
119 
120  ML_CHECK_FLOAT_THROW(lastComp);
121  const DT div = static_cast<DT>(1) / lastComp;
122  return Tvec4<DT>(Superclass::_buffer[0] * div,
123  Superclass::_buffer[1] * div,
124  Superclass::_buffer[2] * div, 1);
125  }
127 };
128 
130 #define _ML_VEC4_RC(i) a[i][0]*v[0] + a[i][1]*v[1] + a[i][2]*v[2] + a[i][3]*v[3]
131 //-----------------------------------------------------------------------------------
133 //-----------------------------------------------------------------------------------
134 template <class DT>
135 inline Tvec4<DT> operator*(const Tmat4<DT>& a, const Tvec4<DT>& v)
136 {
138 }
139 #undef _ML_VEC4_RC
140 
141 //-----------------------------------------------------------------------------------
143 //-----------------------------------------------------------------------------------
144 template <class DT>
145 inline Tvec4<DT> operator*(const Tvec4<DT>& v, const Tmat4<DT>& a)
146 {
147  return a.transpose() * v;
148 }
149 
150 
151 //-----------------------------------------------------------------------------------
154 //-----------------------------------------------------------------------------------
164 
165 
166 #if ML_DEPRECATED_SINCE(3,5,0)
171 ML_DEPRECATED typedef Tvec4<MLfloat> vecf4;
174 ML_DEPRECATED typedef Tvec4<MLdouble> vecd4;
177 ML_DEPRECATED typedef Tvec4<MLldouble> vecld4;
180 ML_DEPRECATED typedef Tvec4<MLdouble> vec4;
182 
183 #endif
184 
185 
186 ML_LA_END_NAMESPACE
187 
188 #endif //of __mlVector4_H
189 
190 
191 
#define ML_DEPRECATED
Definition: CSOGroup.h:371
Template class for vector arithmetic with floating point data types.
T operator*(const FloatingPointVector< T, size, DataContainer > &a, const FloatingPointVector< T, size, DataContainer > &b)
Dot product, returns a.dot(b).
A four by four matrix class consisting of 4 row vectors.
Definition: mlMatrix4.h:36
Tmat4< DT > transpose() const
Returns the transposed *this.
Definition: mlMatrix4.h:584
Declaration of float vector type traits:
Definition: mlVector2.h:57
Forward declarations to resolve header file dependencies.
Definition: mlVector3.h:66
Forward declarations to resolve header file dependencies.
Definition: mlVector4.h:50
Tvec4(const DT value=0)
Default and value constructor. Sets all entries to a user given value.
Definition: mlVector4.h:64
FloatingPointVector< DT, 4 > Superclass
A typedef as a shorthand for the base class.
Definition: mlVector4.h:54
void assign(const DT x, const DT y, const DT z, const DT c)
Sets all components to the passed values.
Definition: mlVector4.h:104
Tvec4(const Tvec2< DT > &v, const DT z, const DT w)
Casts Vector2 to Tvec4. Sets last two entries are given by z and w.
Definition: mlVector4.h:86
Tvec4(const DT x, const DT y, const DT z, const DT w)
Builds the vector from the scalars x, y, z and w to the components 0 to 3, respectively.
Definition: mlVector4.h:77
Tvec4(const Tvec3< DT > &v, const DT w)
Casts Vector3 to Tvec4. Sets last entry to the passed value w.
Definition: mlVector4.h:95
DT ComponentType
A typedef to "export" the type of components.
Definition: mlVector4.h:57
Tvec4< DT > divideByLastComp() const
Divides all vector components by its last component and returns it as Tvec4 which then has a 1 as las...
Definition: mlVector4.h:116
Tvec4(const Superclass &v)
Copy constructor from FloatingPointVector.
Definition: mlVector4.h:71
#define ML_CHECK_FLOAT_THROW(x)
#define _ML_VEC4_RC(i)
Internal helper macro for tMat4 with Tvec4 multiplications. Do not use.
Definition: mlVector4.h:130
Tvec4< MLdouble > Vector4
A vector with 4 components of type double.
Definition: mlVector4.h:162
Tvec4< MLldouble > Vector4ld
A vector with 4 components of type long double.
Definition: mlVector4.h:160
Tvec4< MLdouble > Vector4d
A vector with 4 components of type double.
Definition: mlVector4.h:158
Tvec4< MLfloat > Vector4f
A vector with 4 components of type float.
Definition: mlVector4.h:156