21 #ifndef __MIA_3DVECTOR_HH
22 #define __MIA_3DVECTOR_HH 1
30 #include <type_traits>
79 x(T(org.
x)),
y(T(org.
y)),
z(T(org.
z)){
91 return x *
x +
y *
y +
z *
z;
100 return sqrt(
norm2());
128 throw std::logic_error(
"Access to vectorelement out of range");
147 throw std::logic_error(
"Access to vectorelement out of range");
165 x = T(
x * a);
y = T(
y * a);
z = T(
z * a);
171 x = T(
x * a.
x);
y = T(
y * a.
y);
z = T(
z * a.
z);
179 x = T(
x/ a);
y =T (
y / a);
z = T(
z / a);
185 os <<
x <<
"," <<
y <<
"," <<
z;
201 is.clear(std::ios::badbit);
207 is.clear(std::ios::badbit);
213 is.clear(std::ios::badbit);
224 is.clear(std::ios::badbit);
230 is.clear(std::ios::badbit);
282 template <
typename T>
285 static const int size;
288 template <
typename T>
289 const int atomic_data<T3DVector<T> >::size = 3;
300 template <
typename T>
304 a.
y * b.
z - b.
y * a.
z,
305 a.
z * b.
x - b.
z * a.
x,
306 a.
x * b.
y - b.
x * a.
y
320 return a.
x * b.
x + a. y * b.
y + a.
z * b.
z;
337 std::ostream& operator << (std::ostream& os, const T3DVector<T>& v)
368 template <
typename T,
typename S>
407 assert(b.
x != 0.0 && b.
x != 0.0 && b.
x != 0.0);
435 a.
z * b.
x - b.
z * a.
x,
436 a.
x * b.
y - b.
x * a.
y);
443 return (b.
x == a.
x && b.
y == a.
y && b.
z == a.
z);
456 return (a.x < b.x && a.y < b.y && a.z < b.z);
462 return (b.x <= a.x && b.y <= a.y && b.z <= a.z);
468 return (b.
x > a.
x && b.
y > a.
y && b.
z > a.
z);
474 return (b.
x >= a.
x && b.
y >= a.
y && b.
z >= a.
z);
476 template <
typename T >
479 template <
typename T >
482 template <
typename T>
487 (a.
y < b.
y || (a.
y == b.
y && a.
x < b.
x)));