cctw  0.2.1
cctwvector3d.cpp
Go to the documentation of this file.
1 #include "cctwvector3d.h"
2 #include <math.h>
3 
4 template <typename T>
6 {
7  m_Vector[0] = x;
8  m_Vector[1] = y;
9  m_Vector[2] = z;
10 }
11 
12 template <typename T>
14 {
15  m_Vector[0] = 0;
16  m_Vector[1] = 0;
17  m_Vector[2] = 0;
18 }
19 
20 template <typename T>
21 template <typename T2>
23 {
24  m_Vector[0] = v.x();
25  m_Vector[1] = v.y();
26  m_Vector[2] = v.z();
27 }
28 
29 template <>
30 template <>
32 {
33  m_Vector[0] = floor(v.x());
34  m_Vector[1] = floor(v.y());
35  m_Vector[2] = floor(v.z());
36 }
37 
38 template <typename T>
40 {
41  return CctwVector3D<T>(x()+vec.x(), y()+vec.y(), z()+vec.z());
42 }
43 
44 template <typename T>
46 {
47  return CctwVector3D<T>(x()-vec.x(), y()-vec.y(), z()-vec.z());
48 }
49 
50 template <typename T>
52 {
53  return CctwVector3D<T>(x()*vec.x(), y()*vec.y(), z()*vec.z());
54 }
55 
56 template <>
58 {
59  return CctwVector3D<int>(floor((double)x()/(double)vec.x()),
60  floor((double)y()/(double)vec.y()),
61  floor((double)z()/(double)vec.z()));
62 }
63 
64 template <typename T>
65 CctwVector3D<T> CctwVector3D<T>::operator / (const CctwVector3D<T> &vec) const
66 {
67  return CctwVector3D<T>(x()/vec.x(),
68  y()/vec.y(),
69  z()/vec.z());
70 }
71 
72 template <typename T>
74 {
75  for (int i=0; i<3; i++) {
76  m_Vector[i] += vec.m_Vector[i];
77  }
78 
79  return *this;
80 }
81 
82 template <typename T>
84 {
85  for (int i=0; i<3; i++) {
86  m_Vector[i] -= vec.m_Vector[i];
87  }
88 
89  return *this;
90 }
91 
92 template <typename T>
94 {
95  return CctwVector3D<T>(x()+val, y()+val, z()+val);
96 }
97 
98 template <typename T>
100 {
101  return CctwVector3D<T>(x()-val, y()-val, z()-val);
102 }
103 
104 template <typename T>
106 {
107  return CctwVector3D<T>(x()*val, y()*val, z()*val);
108 }
109 
110 template <>
112 {
113  return CctwVector3D<int>(floor((double)x()/(double)val),
114  floor((double)y()/(double)val),
115  floor((double)z()/(double)val));
116 }
117 
118 template <typename T>
120 {
121  return CctwVector3D<T>(x()/val, y()/val, z()/val);
122 }
123 
124 template <typename T>
126 {
127  return x()==vec.x() && y()==vec.y() && z()==vec.z();
128 }
129 
130 template <typename T>
132 {
133  return x()!=vec.x() || y()!=vec.y() || z()!=vec.z();
134 }
135 
136 template <typename T>
138 {
139  if (z() > vec.z()) {
140  return true;
141  } else if (z() < vec.z()) {
142  return false;
143  } else if (y() > vec.y()) {
144  return true;
145  } else if (y() < vec.y()) {
146  return false;
147  } else if (x() > vec.x()) {
148  return true;
149  } else if (x() < vec.x()) {
150  return false;
151  } else {
152  return false;
153  }
154 }
155 
156 template <typename T>
158 {
159  if (z() > vec.z()) {
160  return true;
161  } else if (z() < vec.z()) {
162  return false;
163  } else if (y() > vec.y()) {
164  return true;
165  } else if (y() < vec.y()) {
166  return false;
167  } else if (x() > vec.x()) {
168  return true;
169  } else if (x() < vec.x()) {
170  return false;
171  } else {
172  return true;
173  }
174 }
175 
176 template <typename T>
178 {
179  if (z() < vec.z()) {
180  return true;
181  } else if (z() > vec.z()) {
182  return false;
183  } else if (y() < vec.y()) {
184  return true;
185  } else if (y() > vec.y()) {
186  return false;
187  } else if (x() < vec.x()) {
188  return true;
189  } else if (x() > vec.x()) {
190  return false;
191  } else {
192  return false;
193  }
194 }
195 
196 template <typename T>
198 {
199  if (z() < vec.z()) {
200  return true;
201  } else if (z() > vec.z()) {
202  return false;
203  } else if (y() < vec.y()) {
204  return true;
205  } else if (y() > vec.y()) {
206  return false;
207  } else if (x() < vec.x()) {
208  return true;
209  } else if (x() > vec.x()) {
210  return false;
211  } else {
212  return true;
213  }
214 }
215 
216 template <typename T>
218 {
219  return CctwVector3D<T>((x()<vec.x()?x():vec.x()),
220  (y()<vec.y()?y():vec.y()),
221  (z()<vec.z()?z():vec.z()));
222 }
223 
224 template <typename T>
226 {
227  return CctwVector3D<T>((x()>vec.x()?x():vec.x()),
228  (y()>vec.y()?y():vec.y()),
229  (z()>vec.z()?z():vec.z()));
230 }
231 
232 template <typename T>
234 {
235  return ::sqrt((double) lengthSquared());
236 }
237 
238 template <typename T>
240 {
241  return x()*x() + y()*y() + z()*z();
242 }
243 
244 template <typename T>
246 {
247  return x()*y()*z();
248 }
249 
250 template <typename T>
252 {
253  T len = length();
254 
255  if (::fabs((double)len) < 1e-10) {
256  return CctwVector3D<T>(0,0,0);
257  } else {
258  return CctwVector3D(x() / len,
259  y() / len,
260  z() / len);
261  }
262 }
263 
264 template <typename T>
266 {
267  T len = length();
268 
269  if (::fabs((double)len) < 1e-10) {
270  return;
271  } else {
272  m_Vector[0] /= len;
273  m_Vector[1] /= len;
274  m_Vector[2] /= len;
275  }
276 }
277 
278 template <typename T>
280 {
281  return v1.x()*v2.x() + v1.y()*v2.y() + v1.z()*v2.z();
282 }
283 
284 template <typename T>
286 {
287  return CctwVector3D<T>(v1.y()*v2.z() - v1.z()*v2.y(),
288  v1.z()*v2.x() - v1.x()*v2.z(),
289  v1.x()*v2.y() - v1.y()*v2.x());
290 }
291 
292 template <typename T>
294 {
295  return crossProduct(v1, v2).normalized();
296 }
297 
298 template <typename T>
299 void CctwVector3D<T>::setSettingsValue(QSettings *settings, QString name)
300 {
301  settings->beginGroup(name);
302 
303  settings->setValue("x", x());
304  settings->setValue("y", y());
305  settings->setValue("z", z());
306 
307  settings->endGroup();
308 }
309 
310 template <>
311 void CctwVector3D<int>::customSaver(const QVariant &val, QSettings *settings, QString name)
312 {
313  CctwIntVector3D vec = val.value<CctwIntVector3D>();
314 
315  vec.setSettingsValue(settings, name);
316 }
317 
318 template <>
319 void CctwVector3D<double>::customSaver(const QVariant &val, QSettings *settings, QString name)
320 {
321  CctwDoubleVector3D vec = val.value<CctwDoubleVector3D>();
322 
323  vec.setSettingsValue(settings, name);
324 }
325 
326 template <typename T>
328 {
329  return QString("[%1,%2,%3]").arg(x()).arg(y()).arg(z());
330 }
331 
332 template class CctwVector3D<int>;
333 template class CctwVector3D<double>;
QString toString()
CctwVector3D< T > operator/(const CctwVector3D< T > &vec) const
bool operator!=(const CctwVector3D< T > &vec) const
static CctwVector3D< T > normal(const CctwVector3D< T > &v1, const CctwVector3D< T > &v2)
T x() const
Definition: cctwvector3d.h:17
bool operator<=(const CctwVector3D< T > &vec) const
bool operator==(const CctwVector3D< T > &vec) const
CctwVector3D< T > operator*(const CctwVector3D< T > &vec) const
CctwVector3D< T > operator-(const CctwVector3D< T > &vec) const
CctwVector3D< T > operator+(const CctwVector3D< T > &vec) const
bool operator>=(const CctwVector3D< T > &vec) const
T lengthSquared() const
bool operator<(const CctwVector3D< T > &vec) const
T length() const
T z() const
Definition: cctwvector3d.h:19
static T dotProduct(const CctwVector3D< T > &v1, const CctwVector3D< T > &v2)
CctwVector3D< T > normalized() const
static CctwVector3D< T > crossProduct(const CctwVector3D< T > &v1, const CctwVector3D< T > &v2)
CctwVector3D< T > min(const CctwVector3D< T > &vec) const
void setSettingsValue(QSettings *settings, QString name)
T volume() const
CctwVector3D< T > operator-=(const CctwVector3D< T > &vec)
static void customSaver(const QVariant &val, QSettings *settings, QString name)
T y() const
Definition: cctwvector3d.h:18
CctwVector3D< T > operator+=(const CctwVector3D< T > &vec)
CctwVector3D< T > max(const CctwVector3D< T > &vec) const
bool operator>(const CctwVector3D< T > &vec) const