Free Electron
Vector3.h
Go to the documentation of this file.
1 /* Copyright (C) 2003-2021 Free Electron Organization
2  Any use of this software requires a license. If a valid license
3  was not distributed with this file, visit freeelectron.org. */
4 
5 /** @file */
6 
7 #ifndef __math_Vector3_h__
8 #define __math_Vector3_h__
9 
10 namespace fe
11 {
12 
13 typedef Vector<3,double> Vector3d;
14 typedef Vector<3,float> Vector3f;
15 typedef Vector<3,FE_UWORD> Vector3u;
16 typedef Vector<3,int> Vector3i;
17 typedef Vector<3,Real> Vector3;
18 
19 template<class T>
20 inline Vector<3,T> &cross3(Vector<3,T> &r, const Vector<3,T> &lhs,
21  const Vector<3,T> &rhs)
22 {
23  r[0] = (lhs[1] * rhs[2] - lhs[2] * rhs[1]);
24  r[1] = (lhs[2] * rhs[0] - lhs[0] * rhs[2]);
25  r[2] = (lhs[0] * rhs[1] - lhs[1] * rhs[0]);
26  return r;
27 }
28 
29 template<class T>
30 inline Vector<3,T> cross3(const Vector<3,T> &lhs, const Vector<3,T> &rhs)
31 {
32  Vector<3,T> v;
33  return cross3(v, lhs, rhs);
34 }
35 
36 template<class T>
37 inline Vector<3,T> &cross(Vector<3,T> &r, const Vector<3,T> &lhs,
38  const Vector<3,T> &rhs)
39 {
40  return cross3(r, lhs, rhs);
41 }
42 
43 template<class T>
44 inline Vector<3,T> cross(const Vector<3,T> &lhs, const Vector<3,T> &rhs)
45 {
46  return cross3(lhs, rhs);
47 }
48 
49 template<class T>
50 inline Vector<3,T>& set(Vector<3,T> &lhs)
51 {
52  lhs[0]=T(0);
53  lhs[1]=T(0);
54  lhs[2]=T(0);
55  return lhs;
56 }
57 
58 template<class T, typename U>
59 inline Vector<3,T>& set(Vector<3,T> &lhs, U x)
60 {
61  lhs[0]=(T)x;
62  lhs[1]=T(0);
63  lhs[2]=T(0);
64  return lhs;
65 }
66 
67 template<class T, typename U, typename V>
68 inline Vector<3,T>& set(Vector<3,T> &lhs, U x, V y)
69 {
70  lhs[0]=(T)x;
71  lhs[1]=(T)y;
72  lhs[2]=T(0);
73  return lhs;
74 }
75 
76 template<class T, typename U, typename V, typename W>
77 inline Vector<3,T>& set(Vector<3,T> &lhs, U x, V y, W z)
78 {
79  lhs[0]=(T)x;
80  lhs[1]=(T)y;
81  lhs[2]=(T)z;
82  return lhs;
83 }
84 
85 //* TEMP
86 #if TRUE
87 typedef Vector<4,F64> Vector4d;
88 typedef Vector<4,F32> Vector4f;
89 typedef Vector<4,FE_UWORD> Vector4u;
90 typedef Vector<4,int> Vector4i;
91 typedef Vector<4,Real> Vector4;
92 
93 template<class T>
94 inline Vector<4,T> &cross3(Vector<4,T> &r, const Vector<4,T> &lhs,
95  const Vector<4,T> &rhs)
96 {
97  r[0] = (lhs[1] * rhs[2] - lhs[2] * rhs[1]);
98  r[1] = (lhs[2] * rhs[0] - lhs[0] * rhs[2]);
99  r[2] = (lhs[0] * rhs[1] - lhs[1] * rhs[0]);
100  r[3] = T(0);
101  return r;
102 }
103 
104 template<class T>
105 inline Vector<4,T> cross3(const Vector<4,T> &lhs, const Vector<4,T> &rhs)
106 {
107  Vector<4,T> v;
108  return cross3(v, lhs, rhs);
109 }
110 
111 template<class T>
112 inline Vector<4,T>& set(Vector<4,T> &lhs)
113 {
114  lhs[0]=T(0);
115  lhs[1]=T(0);
116  lhs[2]=T(0);
117  lhs[3]=T(0);
118  return lhs;
119 }
120 
121 template<class T, typename U>
122 inline Vector<4,T>& set(Vector<4,T> &lhs, U x)
123 {
124  lhs[0]=(T)x;
125  lhs[1]=T(0);
126  lhs[2]=T(0);
127  lhs[3]=T(0);
128  return lhs;
129 }
130 
131 template<class T, typename U, typename V>
132 inline Vector<4,T>& set(Vector<4,T> &lhs, U x, V y)
133 {
134  lhs[0]=(T)x;
135  lhs[1]=(T)y;
136  lhs[2]=T(0);
137  lhs[3]=T(0);
138  return lhs;
139 }
140 
141 template<class T, typename U, typename V, typename W>
142 inline Vector<4,T>& set(Vector<4,T> &lhs, U x, V y, W z)
143 {
144  lhs[0]=(T)x;
145  lhs[1]=(T)y;
146  lhs[2]=(T)z;
147  lhs[3]=T(0);
148  return lhs;
149 }
150 
151 template<class T, typename U, typename V, typename W,typename X>
152 inline Vector<4,T>& set(Vector<4,T> &lhs, U x, V y, W z, X w)
153 {
154  lhs[0]=(T)x;
155  lhs[1]=(T)y;
156  lhs[2]=(T)z;
157  lhs[3]=(T)w;
158  return lhs;
159 }
160 #endif
161 
162 } /* namespace */
163 
164 
165 #endif /* __math_Vector3_h__ */
kernel
Definition: namespace.dox:3