12 #include <cuda/CudaGlobal.hpp>
22 # include <QTextStream>
25 namespace mgx {
namespace util {
37 template <
size_t dim,
class T =
float>
class Vector {
43 typedef T& reference_type;
44 typedef const T& const_reference_type;
45 typedef T* pointer_type;
46 typedef const T* const_pointer_type;
56 for(
size_t i = 0;
i < dim;
i++)
65 for(
size_t i = 0;
i < dim; ++
i)
75 for(
size_t i = 0;
i < d1; ++
i)
77 for(
size_t i = d1;
i < dim; ++
i)
80 for(
size_t i = 0;
i < dim; ++
i)
93 template <
class Vec> CU_HOST_DEVICE
explicit Vector(
const Vec& el)
95 for(
size_t i = 0;
i < dim;
i++)
105 for(
size_t i = 0;
i < dim; ++
i)
136 explicit Vector(
const T&
x,
const T&
y,
const T&
z,
const T&
t)
149 Vector(
const T&
x,
const T&
y,
const T&
z,
const T& a,
const T& b)
163 Vector(
const T&
x,
const T&
y,
const T&
z,
const T& a,
const T& b,
const T& c)
178 Vector(
const T&
x,
const T&
y,
const T&
z,
const T& a,
const T& b,
const T& c,
const T& d)
194 Vector(
const T& a,
const T& b,
const T& c,
const T& d,
const T& e,
const T& f,
const T& g,
const T& h,
const T&
i,
195 const T&
j,
const T&
k,
const T&
l)
273 for(
size_t i = 0;
i < dim;
i++)
308 for(
size_t i = 0;
i < dim;
i++)
309 ans[
i] = elems[
i] * vec.elems[
i];
352 for(
size_t i = 0;
i < dim; ++
i)
353 elems[
i] /= vec.elems[
i];
364 for(
size_t i = 0;
i < dim;
i++)
365 ans[
i] = scalar * vec.elems[
i];
377 for(
size_t i = 0;
i < dim;
i++)
378 ans += elems[
i] * vec.elems[
i];
389 for(
size_t i = 0;
i < dim;
i++)
390 elems[
i] = vec.elems[
i];
401 for(
size_t i = 0;
i < dim;
i++)
402 elems[
i] += vec.elems[
i];
412 for(
size_t i = 0;
i < dim;
i++)
423 for(
size_t i = 0;
i < dim;
i++)
424 elems[
i] -= vec.elems[
i];
434 for(
size_t i = 0;
i < dim;
i++)
445 for(
size_t i = 0;
i < dim;
i++)
455 for(
size_t i = 0;
i < dim;
i++)
456 elems[
i] = (T)(elems[
i] * scalar);
466 for(
size_t i = 0;
i < dim; ++
i)
476 for(
size_t i = 0;
i < dim; ++
i)
477 elems[
i] = (T)(elems[
i] / scalar);
487 for(
size_t i = 0;
i < dim;
i++)
488 if(elems[
i] != vec.elems[
i])
499 return (!((*
this) == vec));
525 return std::sqrt((
float)
normsq());
527 return std::sqrt(
normsq());
538 for(
size_t i = 0;
i < dim;
i++)
539 ans += elems[
i] * elems[
i];
551 return ((*
this) /= sz);
566 for(
size_t i = 0;
i < dim;
i++)
574 for(
size_t i = 0;
i < dim;
i++)
604 void set(
const T&
x,
const T&
y,
const T&
z)
616 void set(
const T&
x,
const T&
y,
const T&
z,
const T&
t)
631 for(
size_t i = 0;
i < dim; ++
i) {
644 return (*
this) ^ other;
883 for(
size_t i = 0;
i < dim; ++
i) {
884 if(elems[
i] < other.elems[
i])
886 if(elems[
i] > other.elems[
i])
900 for(
size_t i = 0;
i < dim; ++
i) {
901 if(elems[
i] < other.elems[
i])
903 if(elems[
i] > other.elems[
i])
919 for(
size_t i = 0;
i < dim; ++
i) {
920 if(elems[
i] > other.elems[
i])
922 if(elems[
i] < other.elems[
i])
937 for(
size_t i = 0;
i < dim; ++
i) {
938 if(elems[
i] > other.elems[
i])
940 if(elems[
i] < other.elems[
i])
946 friend std::ostream& operator<<(std::ostream& out,
const Vector& vec)
948 for(
size_t i = 0;
i < dim;
i++) {
956 friend std::istream& operator>>(std::istream& in,
Vector& vec)
959 for(
size_t i = 1;
i < dim && in;
i++)
960 in >> std::ws >> vec[
i];
967 for(
size_t i = 0;
i < dim;
i++) {
978 for(
size_t i = 1;
i < dim && !in.
atEnd();
i++)
1002 return ((v1[0] * v2[1]) - (v1[1] * v2[0]));
1034 ans[0] = v1[1] * v2[2] - v1[2] * v2[1];
1035 ans[1] = v1[2] * v2[0] - v1[0] * v2[2];
1036 ans[2] = v1[0] * v2[1] - v1[1] * v2[0];
1048 return atan2(v.
y(), v.
x());
1059 float y = norm(v1 ^ v2);
1082 return (v1 * v2 < 0) ? -1 : 1;
1096 return atan2(-y, x);
1134 return (s < 0) ? -s : s;
1178 for(
size_t i = 0; i < dim; ++i) {
1179 result[i] = fabs(v[i]);
1193 for(
size_t i = 0; i < dim; ++i) {
1194 result[i] = (v1[i] >= v2[i] ? v1[i] : v2[i]);
1208 for(
size_t i = 0; i < dim; ++i) {
1209 result[i] = (v1[i] <= v2[i] ? v1[i] : v2[i]);
1219 template <
size_t dim,
typename T>
1223 result = max(minv, min(maxv, v));
1233 template <
size_t dim,
typename T>
1237 for(
size_t i = 0; i < dim; ++i) {
1238 result[i] = v1[i] * v2[i];
1264 template <
size_t dim,
typename T>
1268 for(
size_t i = 0; i < dim; ++i) {
1269 result[i] = v1[i] / v2[i];
1281 const float ratio = 1 - 1e-8;
1282 if((std::abs(v.
y()) >= ratio * std::abs(v.
x())) && (std::abs(v.
z()) >= ratio * std::abs(v.
x())))
1284 else if((std::abs(v.
x()) >= ratio * std::abs(v.
y())) && (std::abs(v.
z()) >= ratio * std::abs(v.
y())))
1295 template <
size_t dim,
typename T,
typename T1>
1299 for(
size_t i = 0; i < dim; ++i) {
1300 result[i] = (*fct)(v[i]);
1310 template <
size_t dim,
typename T,
typename T1>
1311 CU_HOST_DEVICE Vector<dim, T> map(T (*fct)(
const T1&),
const Vector<dim, T1>& v)
1313 Vector<dim, T> result;
1314 for(
size_t i = 0; i < dim; ++i) {
1315 result[i] = (*fct)(v[i]);
1328 for(
size_t i = 0; i < dim; ++i) {
1329 result[i] = (*fct)(v[i]);
1339 template <
size_t dim,
typename T>
1344 for(
size_t i = 0; i < dim; ++i) {
1345 result[i] = (*fct)(v1[i], v2[i]);
1355 template <
size_t dim,
typename T>
1359 for(
size_t i = 0; i < dim; ++i) {
1360 result[i] = (*fct)(v1[i], v2[i]);
1370 template <
size_t dim,
typename T>
1374 for(
size_t i = 0; i < dim; ++i) {
1375 result[i] = (*fct)(v1[i], v2[i]);
1385 template <
size_t dim,
typename T,
typename T1,
typename T2>
1390 for(
size_t i = 0; i < dim; ++i) {
1391 result[i] = (*fct)(v1[i], v2[i]);
1401 template <
size_t dim,
typename T,
typename T1,
typename T2>
1405 for(
size_t i = 0; i < dim; ++i) {
1406 result[i] = (*fct)(v1[i], v2[i]);
1416 template <
size_t dim,
typename T,
typename T1,
typename T2>
1420 for(
size_t i = 0; i < dim; ++i) {
1421 result[i] = (*fct)(v1[i], v2[i]);
1434 for(
size_t i = 0; i < dim; ++i)
1435 res[i] = v[i] + value;
1447 for(
size_t i = 0; i < dim; ++i)
1448 res[i] = v[i] + value;
1460 for(
size_t i = 0; i < dim; ++i)
1461 res[i] = v[i] - value;
1474 for(
size_t i = 0; i < dim; ++i)
1475 res[i] = value - v[i];
1502 Vector<dim - 1, T> res(v);
1508 #ifndef COMPILE_CUDA
1510 #include <UnorderedMap.hpp>
1514 #ifdef HASH_NEED_TR1
1518 template <
size_t dim,
typename T>
struct hash<mgx::util::Vector<dim, T> > {
1521 static const hash<T> hash_value = hash<T>();
1522 size_t acc = hash_value(v[0]);
1523 for(
size_t i = 1; i < dim; ++i)
1524 acc ^= hash_value(v[i]);
1529 # ifdef HASH_NEED_TR1
CU_HOST_DEVICE Vector< dim, T > operator+(const Vector< dim, T > &v, const T &value)
Add a value to all elements of a vector.
Definition: Vector.hpp:1431
CU_HOST_DEVICE Vector(const T &x, const T &y, const T &z)
Initialize a 3D vector.
Definition: Vector.hpp:124
CU_HOST_DEVICE void t(const T &v)
Short access to the fourth element.
Definition: Vector.hpp:678
CU_HOST_DEVICE T operator^(const Vector< 2, T > &v1, const Vector< 2, T > &v2)
Cross product v1 x v2 (French notation)
Definition: Vector.hpp:1001
CU_HOST_DEVICE Vector< dim, T > map(T(*fct)(const T &, const T &), const Vector< dim, T > &v1, const Vector< dim, T > &v2)
Map a function to all elements of a vector.
Definition: Vector.hpp:1356
CU_HOST_DEVICE bool operator<=(const Vector &other) const
Comparison operator.
Definition: Vector.hpp:898
CU_HOST_DEVICE Vector & operator/=(const T1 &scalar)
In-place division by a scalar.
Definition: Vector.hpp:474
CU_HOST_DEVICE Vector(const T &a, const T &b, const T &c, const T &d, const T &e, const T &f, const T &g, const T &h, const T &i, const T &j, const T &k, const T &l)
Initialize a 12D vector.
Definition: Vector.hpp:194
CU_HOST_DEVICE Vector & operator/=(const T &scalar)
In-place division by a scalar.
Definition: Vector.hpp:464
CU_HOST_DEVICE Vector< 2, T > projectXY(void)
Extract the two first elements of the vector.
Definition: Vector.hpp:869
CU_HOST_DEVICE T & j()
Short access to the second element.
Definition: Vector.hpp:805
CU_HOST_DEVICE Vector cross(const Vector &other) const
Compute the cross product as this x other.
Definition: Vector.hpp:641
CU_HOST_DEVICE const T * c_data() const
Returns a constant raw pointer on the data.
Definition: Vector.hpp:262
CU_HOST_DEVICE float angle(const Vector< 3, T > &v1, const Vector< 3, T > &v2, const Vector< 3, T > &ref)
Oriented angle between v1 and v2 with ref to orient the space.
Definition: Vector.hpp:1090
CU_HOST_DEVICE Vector< dim, T > divide(const Vector< dim, T > &v1, const Vector< dim, T > &v2)
Return the vector whose components are clipped to min/max components.
Definition: Vector.hpp:1265
CU_HOST_DEVICE Vector normalized(void) const
Returns a normalized version of the vector.
Definition: Vector.hpp:558
CU_HOST_DEVICE T & y()
Short access to the second element.
Definition: Vector.hpp:696
CU_HOST_DEVICE const T & operator[](size_t idx) const
Access to the element idx.
Definition: Vector.hpp:514
CU_HOST_DEVICE const T & l() const
Short access to the fourth element.
Definition: Vector.hpp:859
CU_HOST_DEVICE const T & j() const
Short access to the second element.
Definition: Vector.hpp:841
CU_HOST_DEVICE T & t()
Short access to the fourth element.
Definition: Vector.hpp:714
CU_HOST_DEVICE T norm() const
Euclidean norm of the vector.
Definition: Vector.hpp:522
CU_HOST_DEVICE float angle(const Vector< 2, T > &v1, const Vector< 2, T > &v2)
Oriented angle between v1 and v2.
Definition: Vector.hpp:1068
CU_HOST_DEVICE void x(const T &v)
Short access to the first element.
Definition: Vector.hpp:651
CU_HOST_DEVICE Vector(const T &x, const T &y, const T &z, const T &a, const T &b, const T &c)
Initialize a 6D vector.
Definition: Vector.hpp:163
CU_HOST_DEVICE Vector & normalize(void)
Normalize the vector.
Definition: Vector.hpp:548
CU_HOST_DEVICE Vector(const Vector< d1, T1 > &vec)
Copy another vector with different number of elements.
Definition: Vector.hpp:72
CU_HOST_DEVICE Vector operator-(void) const
Vector negation.
Definition: Vector.hpp:270
CU_HOST_DEVICE T & i()
Short access to the first element.
Definition: Vector.hpp:796
CU_HOST_DEVICE Vector< dim, T > fabs(const Vector< dim, T > &v)
Return the vector whose component is the absolute value of the input vector.
Definition: Vector.hpp:1175
CU_HOST_DEVICE float normalized(float)
Euclidean square norm of a real.
Definition: Vector.hpp:1109
CU_HOST_DEVICE Vector operator*(const T &scalar) const
Multiplication by a scalar.
Definition: Vector.hpp:317
CU_HOST_DEVICE Vector & operator*=(const T &scalar)
In-place multiplication by a scalar.
Definition: Vector.hpp:443
CU_HOST_DEVICE void set(const T &x, const T &y, const T &z, const T &t)
Set the values of a 4-D vector.
Definition: Vector.hpp:616
CU_HOST_DEVICE Vector< dim-1, T > cartesian(const Vector< dim, T > &v)
Extract the cartesion coordinates from a homogeneous vector.
Definition: Vector.hpp:1500
CU_HOST_DEVICE T norm(const Vector< dim, T > &v)
Function-version of the norm.
Definition: Vector.hpp:1143
CU_HOST_DEVICE Vector(const T &x, const T &y)
Initialize a 2D vector.
Definition: Vector.hpp:113
CU_HOST_DEVICE T operator%(const Vector< 2, T > &v1, const Vector< 2, T > &v2)
Cross product v1 x v2.
Definition: Vector.hpp:990
CU_HOST_DEVICE Vector(const T &x, const T &y, const T &z, const T &a, const T &b)
Initialize a 5D vector.
Definition: Vector.hpp:149
CU_HOST_DEVICE Vector< dim, T > multiply(const Vector< dim, T > &v1, const Vector< dim, T > &v2)
Return the vector whose component is the product of the two input vectors components.
Definition: Vector.hpp:1234
CU_HOST_DEVICE Vector(const Vector &vec)
Copy another vector.
Definition: Vector.hpp:54
CU_HOST_DEVICE const T & x() const
Short access to the first element.
Definition: Vector.hpp:723
CU_HOST_DEVICE Vector operator-(const Vector &vec) const
Vector subtraction.
Definition: Vector.hpp:294
CU_HOST_DEVICE T & x()
Short access to the first element.
Definition: Vector.hpp:687
CU_HOST_DEVICE bool operator==(const Vector &vec) const
Element-wise equality.
Definition: Vector.hpp:485
CU_HOST_DEVICE Vector & operator+=(const Vector &vec)
In-place vector addition.
Definition: Vector.hpp:399
CU_HOST_DEVICE T & operator[](size_t idx)
Access to the element idx.
Definition: Vector.hpp:506
CU_HOST_DEVICE Vector & operator-=(const T &val)
In-place value subtraction.
Definition: Vector.hpp:432
CU_HOST_DEVICE Vector< dim, T > map(T(*fct)(T1), const Vector< dim, T1 > &v)
Map a function to all elements of a vector.
Definition: Vector.hpp:1325
CU_HOST_DEVICE Vector(const Vec &el)
Initialize a vector from any object behaving like an array.
Definition: Vector.hpp:93
CU_HOST_DEVICE iterator end()
STL-iteration end.
Definition: Vector.hpp:247
CU_HOST_DEVICE Vector< 3, T > operator%(const Vector< 3, T > &v1, const Vector< 3, T > &v2)
Cross product v1 x v2.
Definition: Vector.hpp:1021
CU_HOST_DEVICE Vector & operator+=(const T &val)
In-place constant addition.
Definition: Vector.hpp:410
CU_HOST_DEVICE const_iterator end() const
Stl-iteration constant end.
Definition: Vector.hpp:254
CU_HOST_DEVICE iterator begin()
STL-iteration begin.
Definition: Vector.hpp:232
CU_HOST_DEVICE Vector mult(const Vector &vec) const
Element-wise multiplcation.
Definition: Vector.hpp:305
CU_HOST_DEVICE bool operator>=(const Vector &other) const
Comparison operator.
Definition: Vector.hpp:935
CU_HOST_DEVICE Vector & operator*=(const T1 &scalar)
In-place multiplication by a scalar.
Definition: Vector.hpp:453
CU_HOST_DEVICE T * data()
Returns a raw pointer on the data.
Definition: Vector.hpp:224
CU_HOST_DEVICE float angle(const Vector< 1, T > &v1, const Vector< 1, T > &v2)
Oriented angle between v1 and v2.
Definition: Vector.hpp:1080
CU_HOST_DEVICE void y(const T &v)
Short access to the second element.
Definition: Vector.hpp:660
CU_HOST_DEVICE Vector & operator/=(const Vector &vec)
In-place element-wise division by a scalar.
Definition: Vector.hpp:350
CU_HOST_DEVICE float normsq(float s)
Euclidean square norm of a real.
Definition: Vector.hpp:1121
CU_HOST_DEVICE Vector< dim, T > min(const Vector< dim, T > &v1, const Vector< dim, T > &v2)
Return the vector whose component is the min of the two input vectors components. ...
Definition: Vector.hpp:1205
CU_HOST_DEVICE Vector< dim, T > normalized(const Vector< dim, T > &v)
Function-version of the square norm.
Definition: Vector.hpp:1163
CU_HOST_DEVICE Vector(const T &x, const T &y, const T &z, const T &a, const T &b, const T &c, const T &d)
Initialize a 7D vector.
Definition: Vector.hpp:178
Namespace containing all the utility classes.
Definition: Vector.hpp:37
CU_HOST_DEVICE void i(const T &v)
Short access to the first element.
Definition: Vector.hpp:760
CU_HOST_DEVICE Vector operator/(const T &scalar) const
Division by a scalar.
Definition: Vector.hpp:328
CU_HOST_DEVICE Vector(const T &x, const T &y, const T &z, const T &t)
Initialize a 4D vector.
Definition: Vector.hpp:136
CU_HOST_DEVICE Vector< dim, T > map(T(*fct)(T1, T2), const Vector< dim, T1 > &v1, const Vector< dim, T2 > &v2)
Map a function to all elements of a vector.
Definition: Vector.hpp:1417
#define STATIC_ASSERT(B)
Assertion that works at compile time.
Definition: StaticAssert.hpp:47
CU_HOST_DEVICE bool operator<(const Vector &other) const
Comparison operator.
Definition: Vector.hpp:881
CU_HOST_DEVICE void set(const T &x, const T &y, const T &z)
Set the values of a 3-D vector.
Definition: Vector.hpp:604
CU_HOST_DEVICE void set(const T &x, const T &y)
Set the values of a 2-D vector.
Definition: Vector.hpp:593
CU_HOST_DEVICE Vector & operator-=(const Vector &vec)
In-place vector subtraction.
Definition: Vector.hpp:421
CU_HOST_DEVICE T normsq(const Vector< dim, T > &v)
Function-version of the square norm.
Definition: Vector.hpp:1153
static CU_HOST_DEVICE size_t size()
Returns the size of the vector (i.e.
Definition: Vector.hpp:216
CU_HOST_DEVICE const T & z() const
Short access to the third element.
Definition: Vector.hpp:741
CU_HOST_DEVICE Vector operator/(const Vector &vec) const
Element-wise division.
Definition: Vector.hpp:339
CU_HOST_DEVICE T normsq() const
Square of the Euclidean norm of the vector.
Definition: Vector.hpp:535
CU_HOST_DEVICE Vector< dim, T > trim(const Vector< dim, T > &v, const Vector< dim, T > &minv, const Vector< dim, T > &maxv)
Return the vector with components clipped to min and max vectors.
Definition: Vector.hpp:1220
Define the STATIC_ASSERT macro.
CU_HOST_DEVICE T & z()
Short access to the third element.
Definition: Vector.hpp:705
CU_HOST_DEVICE float norm(float s)
Euclidean norm of a real.
Definition: Vector.hpp:1133
CU_HOST_DEVICE T & l()
Short access to the fourth element.
Definition: Vector.hpp:823
CU_HOST_DEVICE friend Vector operator*(const T &scalar, const Vector &vec)
Multiplication by a scalar.
Definition: Vector.hpp:361
CU_HOST_DEVICE void set(const T &x)
Set the values of a 1-D vector.
Definition: Vector.hpp:583
CU_HOST_DEVICE void l(const T &v)
Short access to the fourth element.
Definition: Vector.hpp:787
CU_HOST_DEVICE const T & t() const
Short access to the fourth element.
Definition: Vector.hpp:750
CU_HOST_DEVICE void z(const T &v)
Short access to the third element.
Definition: Vector.hpp:669
CU_HOST_DEVICE Vector< dim, T > map(T(*fct)(const T1 &, const T2 &), const Vector< dim, T1 > &v1, const Vector< dim, T2 > &v2)
Map a function to all elements of a vector.
Definition: Vector.hpp:1402
CU_HOST_DEVICE Vector< dim, T > operator-(const Vector< dim, T > &v, const T &value)
Substact a value to all elements of a vector.
Definition: Vector.hpp:1457
CU_HOST_DEVICE void k(const T &v)
Short access to the third element.
Definition: Vector.hpp:778
CU_HOST_DEVICE Vector< 3, T > operator^(const Vector< 3, T > &v1, const Vector< 3, T > &v2)
Cross product v1 x v2 (French notation)
Definition: Vector.hpp:1032
CU_HOST_DEVICE bool operator>(const Vector &other) const
Comparison operator.
Definition: Vector.hpp:917
CU_HOST_DEVICE Vector< dim, T > map(const T &(*fct)(const T1 &, const T2 &), const Vector< dim, T1 > &v1, const Vector< dim, T2 > &v2)
Map a function to all elements of a vector.
Definition: Vector.hpp:1386
CU_HOST_DEVICE Vector operator+(const Vector &vec) const
Vector addition.
Definition: Vector.hpp:283
CU_HOST_DEVICE T operator*(const Vector &vec) const
Dot product.
Definition: Vector.hpp:374
CU_HOST_DEVICE Vector< dim+1, T > homogeneous(const Vector< dim, T > &v)
Create a homogeneous coordinate vector from a cartesian one.
Definition: Vector.hpp:1486
CU_HOST_DEVICE Vector< dim, T > max(const Vector< dim, T > &v1, const Vector< dim, T > &v2)
Return the vector whose component is the max of the two input vectors components. ...
Definition: Vector.hpp:1190
CU_HOST_DEVICE float angle(const Vector< 2, T > &v)
Angle of the vector with (0,1)
Definition: Vector.hpp:1046
CU_HOST_DEVICE Vector & operator=(const T &value)
Set all the elements to value.
Definition: Vector.hpp:629
CU_HOST_DEVICE T operator^(const Vector< 1, T > &, const Vector< 1, T > &)
Cross product v1 x v2 (French notation)
Definition: Vector.hpp:1011
CU_HOST_DEVICE float angle(const Vector< 3, T > &v1, const Vector< 3, T > &v2)
Non-oriented angle between v1 and v2.
Definition: Vector.hpp:1056
CU_HOST_DEVICE Vector< dim, T > operator-(const T &value, const Vector< dim, T > &v)
Equivalent to substracting a vector with all component the same to another one.
Definition: Vector.hpp:1471
CU_HOST_DEVICE Vector< dim, T > map(T(*fct)(T, T), const Vector< dim, T > &v1, const Vector< dim, T > &v2)
Map a function to all elements of a vector.
Definition: Vector.hpp:1371
CU_HOST_DEVICE T & k()
Short access to the third element.
Definition: Vector.hpp:814
CU_HOST_DEVICE Vector(const Vector< dim, T1 > &vec)
Copy another vector with different number of elements.
Definition: Vector.hpp:63
CU_HOST_DEVICE const T & y() const
Short access to the second element.
Definition: Vector.hpp:732
CU_HOST_DEVICE const_iterator begin() const
Stl-iteration constant begin.
Definition: Vector.hpp:239
CU_HOST_DEVICE const T & k() const
Short access to the third element.
Definition: Vector.hpp:850
CU_HOST_DEVICE Vector< 3, T > orthogonal(const Vector< 3, T > &v)
Find a vector orthogonal to v.
Definition: Vector.hpp:1279
CU_HOST_DEVICE bool operator!=(const Vector &vec) const
Element-wise inequality.
Definition: Vector.hpp:498
CU_HOST_DEVICE void j(const T &v)
Short access to the second element.
Definition: Vector.hpp:769
CU_HOST_DEVICE Vector< dim, T > map(const T &(*fct)(const T &, const T &), const Vector< dim, T > &v1, const Vector< dim, T > &v2)
Map a function to all elements of a vector.
Definition: Vector.hpp:1340
CU_HOST_DEVICE Vector & operator=(const Vector &vec)
Vector copy.
Definition: Vector.hpp:387
CU_HOST_DEVICE Vector(const T &x=T())
Initialize a vector with all values to x.
Definition: Vector.hpp:103
CU_HOST_DEVICE const T & i() const
Short access to the first element.
Definition: Vector.hpp:832
CU_HOST_DEVICE Vector< dim, T > operator+(const T &value, const Vector< dim, T > &v)
Add a value to all elements of a vector.
Definition: Vector.hpp:1444