Commit d82f78583f0990449019f4b225b2c236f535f95a

Authored by David Mayerich
1 parent 9b563709

fixed excess files

stim/math/.vec3.h.swp deleted
No preview for this file type
stim/math/.vec3_BASE_62876.h.swp deleted
No preview for this file type
stim/math/.vec3_LOCAL_62876.h.swp deleted
No preview for this file type
stim/math/.vec3_REMOTE_62876.h.swp deleted
No preview for this file type
stim/math/vec3.h.orig deleted
1 -#ifndef STIM_VEC3_H  
2 -#define STIM_VEC3_H  
3 -  
4 -  
5 -#include <stim/cuda/cudatools/callable.h>  
6 -#include <cmath>  
7 -  
8 -  
9 -namespace stim{  
10 -  
11 -  
12 -/// A class designed to act as a 3D vector with CUDA compatibility  
13 -template<typename T>  
14 -class vec3{  
15 -  
16 -protected:  
17 - T ptr[3];  
18 -  
19 -public:  
20 -  
21 - CUDA_CALLABLE vec3(){}  
22 -  
23 - CUDA_CALLABLE vec3(T v){  
24 - ptr[0] = ptr[1] = ptr[2] = v;  
25 - }  
26 -  
27 - CUDA_CALLABLE vec3(T x, T y, T z){  
28 - ptr[0] = x;  
29 - ptr[1] = y;  
30 - ptr[2] = z;  
31 - }  
32 -  
33 - //copy constructor  
34 - CUDA_CALLABLE vec3( const vec3<T>& other){  
35 - ptr[0] = other.ptr[0];  
36 - ptr[1] = other.ptr[1];  
37 - ptr[2] = other.ptr[2];  
38 - }  
39 -  
40 - //access an element using an index  
41 - CUDA_CALLABLE T& operator[](size_t idx){  
42 - return ptr[idx];  
43 - }  
44 -  
45 - CUDA_CALLABLE T* data(){  
46 - return ptr;  
47 - }  
48 -  
49 -/// Casting operator. Creates a new vector with a new type U.  
50 - template< typename U >  
51 - CUDA_CALLABLE operator vec3<U>(){  
52 - vec3<U> result;  
53 - result.ptr[0] = (U)ptr[0];  
54 - result.ptr[1] = (U)ptr[1];  
55 - result.ptr[2] = (U)ptr[2];  
56 -  
57 - return result;  
58 - }  
59 -  
60 - // computes the squared Euclidean length (useful for several operations where only >, =, or < matter)  
61 - CUDA_CALLABLE T len_sq() const{  
62 - return ptr[0] * ptr[0] + ptr[1] * ptr[1] + ptr[2] * ptr[2];  
63 - }  
64 -  
65 - /// computes the Euclidean length of the vector  
66 - CUDA_CALLABLE T len() const{  
67 - return sqrt(len_sq());  
68 - }  
69 -  
70 -  
71 - /// Convert the vector from cartesian to spherical coordinates (x, y, z -> r, theta, phi where theta = [0, 2*pi])  
72 - CUDA_CALLABLE vec3<T> cart2sph() const{  
73 - vec3<T> sph;  
74 - sph.ptr[0] = len();  
75 - sph.ptr[1] = std::atan2(ptr[1], ptr[0]);  
76 - if(sph.ptr[0] == 0)  
77 - sph.ptr[2] = 0;  
78 - else  
79 - sph.ptr[2] = std::acos(ptr[2] / sph.ptr[0]);  
80 - return sph;  
81 - }  
82 -  
83 - /// Convert the vector from cartesian to spherical coordinates (r, theta, phi -> x, y, z where theta = [0, 2*pi])  
84 - CUDA_CALLABLE vec3<T> sph2cart() const{  
85 - vec3<T> cart;  
86 - cart.ptr[0] = ptr[0] * std::cos(ptr[1]) * std::sin(ptr[2]);  
87 - cart.ptr[1] = ptr[0] * std::sin(ptr[1]) * std::sin(ptr[2]);  
88 - cart.ptr[2] = ptr[0] * std::cos(ptr[2]);  
89 -  
90 - return cart;  
91 - }  
92 -  
93 - /// Computes the normalized vector (where each coordinate is divided by the L2 norm)  
94 - CUDA_CALLABLE vec3<T> norm() const{  
95 - vec3<T> result;  
96 - T l = len(); //compute the vector length  
97 - return (*this) / l;  
98 - }  
99 -  
100 - /// Computes the cross product of a 3-dimensional vector  
101 - CUDA_CALLABLE vec3<T> cross(const vec3<T> rhs) const{  
102 -  
103 - vec3<T> result;  
104 -  
105 - result[0] = (ptr[1] * rhs.ptr[2] - ptr[2] * rhs.ptr[1]);  
106 - result[1] = (ptr[2] * rhs.ptr[0] - ptr[0] * rhs.ptr[2]);  
107 - result[2] = (ptr[0] * rhs.ptr[1] - ptr[1] * rhs.ptr[0]);  
108 -  
109 - return result;  
110 - }  
111 -  
112 - /// Compute the Euclidean inner (dot) product  
113 - CUDA_CALLABLE T dot(vec3<T> rhs) const{  
114 - return ptr[0] * rhs.ptr[0] + ptr[1] * rhs.ptr[1] + ptr[2] * rhs.ptr[2];  
115 - }  
116 -  
117 - /// Arithmetic addition operator  
118 -  
119 - /// @param rhs is the right-hand-side operator for the addition  
120 - CUDA_CALLABLE vec3<T> operator+(vec3<T> rhs) const{  
121 - vec3<T> result;  
122 - result.ptr[0] = ptr[0] + rhs[0];  
123 - result.ptr[1] = ptr[1] + rhs[1];  
124 - result.ptr[2] = ptr[2] + rhs[2];  
125 - return result;  
126 - }  
127 -  
128 - /// Arithmetic addition to a scalar  
129 -  
130 - /// @param rhs is the right-hand-side operator for the addition  
131 - CUDA_CALLABLE vec3<T> operator+(T rhs) const{  
132 - vec3<T> result;  
133 - result.ptr[0] = ptr[0] + rhs;  
134 - result.ptr[1] = ptr[1] + rhs;  
135 - result.ptr[2] = ptr[2] + rhs;  
136 - return result;  
137 - }  
138 -  
139 - /// Arithmetic subtraction operator  
140 -  
141 - /// @param rhs is the right-hand-side operator for the subtraction  
142 - CUDA_CALLABLE vec3<T> operator-(vec3<T> rhs) const{  
143 - vec3<T> result;  
144 - result.ptr[0] = ptr[0] - rhs[0];  
145 - result.ptr[1] = ptr[1] - rhs[1];  
146 - result.ptr[2] = ptr[2] - rhs[2];  
147 - return result;  
148 - }  
149 - /// Arithmetic subtraction to a scalar  
150 -  
151 - /// @param rhs is the right-hand-side operator for the addition  
152 - CUDA_CALLABLE vec3<T> operator-(T rhs) const{  
153 - vec3<T> result;  
154 - result.ptr[0] = ptr[0] - rhs;  
155 - result.ptr[1] = ptr[1] - rhs;  
156 - result.ptr[2] = ptr[2] - rhs;  
157 - return result;  
158 - }  
159 -  
160 - /// Arithmetic scalar multiplication operator  
161 -  
162 - /// @param rhs is the right-hand-side operator for the subtraction  
163 - CUDA_CALLABLE vec3<T> operator*(T rhs) const{  
164 - vec3<T> result;  
165 - result.ptr[0] = ptr[0] * rhs;  
166 - result.ptr[1] = ptr[1] * rhs;  
167 - result.ptr[2] = ptr[2] * rhs;  
168 - return result;  
169 - }  
170 -  
171 - /// Arithmetic scalar division operator  
172 -  
173 - /// @param rhs is the right-hand-side operator for the subtraction  
174 - CUDA_CALLABLE vec3<T> operator/(T rhs) const{  
175 - return (*this) * ((T)1.0/rhs);  
176 - }  
177 -  
178 - /// Multiplication by a scalar, followed by assignment  
179 - CUDA_CALLABLE vec3<T> operator*=(T rhs){  
180 - ptr[0] = ptr[0] * rhs;  
181 - ptr[1] = ptr[1] * rhs;  
182 - ptr[2] = ptr[2] * rhs;  
183 - return *this;  
184 - }  
185 -  
186 - /// Addition and assignment  
187 - CUDA_CALLABLE vec3<T> operator+=(vec3<T> rhs){  
188 - ptr[0] = ptr[0] + rhs;  
189 - ptr[1] = ptr[1] + rhs;  
190 - ptr[2] = ptr[2] + rhs;  
191 - return *this;  
192 - }  
193 -  
194 - /// Assign a scalar to all values  
195 - CUDA_CALLABLE vec3<T> & operator=(T rhs){  
196 - ptr[0] = ptr[0] = rhs;  
197 - ptr[1] = ptr[1] = rhs;  
198 - ptr[2] = ptr[2] = rhs;  
199 - return *this;  
200 - }  
201 -  
202 - /// Casting and assignment  
203 - template<typename Y>  
204 - CUDA_CALLABLE vec3<T> & operator=(vec3<Y> rhs){  
205 - ptr[0] = (T)rhs.ptr[0];  
206 - ptr[1] = (T)rhs.ptr[1];  
207 - ptr[2] = (T)rhs.ptr[2];  
208 - return *this;  
209 - }  
210 -  
211 - /// Unary minus (returns the negative of the vector)  
212 - CUDA_CALLABLE vec3<T> operator-() const{  
213 - vec3<T> result;  
214 - result.ptr[0] = -ptr[0];  
215 - result.ptr[1] = -ptr[1];  
216 - result.ptr[2] = -ptr[2];  
217 - return result;  
218 - }  
219 -  
220 -<<<<<<< HEAD  
221 -//#ifndef __NVCC__  
222 -=======  
223 ->>>>>>> 9f5c0d4a055a2a19e69a97db1441aa617f96180c  
224 - /// Outputs the vector as a string  
225 - std::string str() const{  
226 - std::stringstream ss;  
227 -  
228 - const size_t N = 3;  
229 -  
230 - ss<<"[";  
231 - for(size_t i=0; i<N; i++)  
232 - {  
233 - ss<<ptr[i];  
234 - if(i != N-1)  
235 - ss<<", ";  
236 - }  
237 - ss<<"]";  
238 -  
239 - return ss.str();  
240 - }  
241 -<<<<<<< HEAD  
242 -//#endif  
243 -=======  
244 ->>>>>>> 9f5c0d4a055a2a19e69a97db1441aa617f96180c  
245 -  
246 - size_t size(){ return 3; }  
247 -  
248 - }; //end class vec3  
249 -} //end namespace stim  
250 -  
251 -/// Multiply a vector by a constant when the vector is on the right hand side  
252 -template <typename T>  
253 -stim::vec3<T> operator*(T lhs, stim::vec3<T> rhs){  
254 - return rhs * lhs;  
255 -}  
256 -  
257 -//stream operator  
258 -template<typename T>  
259 -std::ostream& operator<<(std::ostream& os, stim::vec3<T> const& rhs){  
260 - os<<rhs.str();  
261 - return os;  
262 -}  
263 -  
264 -#endif  
stim/math/vec3_BACKUP_62876.h deleted
1 -#ifndef STIM_VEC3_H  
2 -#define STIM_VEC3_H  
3 -  
4 -  
5 -#include <stim/cuda/cudatools/callable.h>  
6 -#include <cmath>  
7 -  
8 -  
9 -namespace stim{  
10 -  
11 -  
12 -/// A class designed to act as a 3D vector with CUDA compatibility  
13 -template<typename T>  
14 -class vec3{  
15 -  
16 -protected:  
17 - T ptr[3];  
18 -  
19 -public:  
20 -  
21 - CUDA_CALLABLE vec3(){}  
22 -  
23 - CUDA_CALLABLE vec3(T v){  
24 - ptr[0] = ptr[1] = ptr[2] = v;  
25 - }  
26 -  
27 - CUDA_CALLABLE vec3(T x, T y, T z){  
28 - ptr[0] = x;  
29 - ptr[1] = y;  
30 - ptr[2] = z;  
31 - }  
32 -  
33 - //copy constructor  
34 - CUDA_CALLABLE vec3( const vec3<T>& other){  
35 - ptr[0] = other.ptr[0];  
36 - ptr[1] = other.ptr[1];  
37 - ptr[2] = other.ptr[2];  
38 - }  
39 -  
40 - //access an element using an index  
41 - CUDA_CALLABLE T& operator[](size_t idx){  
42 - return ptr[idx];  
43 - }  
44 -  
45 - CUDA_CALLABLE T* data(){  
46 - return ptr;  
47 - }  
48 -  
49 -/// Casting operator. Creates a new vector with a new type U.  
50 - template< typename U >  
51 - CUDA_CALLABLE operator vec3<U>(){  
52 - vec3<U> result;  
53 - result.ptr[0] = (U)ptr[0];  
54 - result.ptr[1] = (U)ptr[1];  
55 - result.ptr[2] = (U)ptr[2];  
56 -  
57 - return result;  
58 - }  
59 -  
60 - // computes the squared Euclidean length (useful for several operations where only >, =, or < matter)  
61 - CUDA_CALLABLE T len_sq() const{  
62 - return ptr[0] * ptr[0] + ptr[1] * ptr[1] + ptr[2] * ptr[2];  
63 - }  
64 -  
65 - /// computes the Euclidean length of the vector  
66 - CUDA_CALLABLE T len() const{  
67 - return sqrt(len_sq());  
68 - }  
69 -  
70 -  
71 - /// Convert the vector from cartesian to spherical coordinates (x, y, z -> r, theta, phi where theta = [0, 2*pi])  
72 - CUDA_CALLABLE vec3<T> cart2sph() const{  
73 - vec3<T> sph;  
74 - sph.ptr[0] = len();  
75 - sph.ptr[1] = std::atan2(ptr[1], ptr[0]);  
76 - if(sph.ptr[0] == 0)  
77 - sph.ptr[2] = 0;  
78 - else  
79 - sph.ptr[2] = std::acos(ptr[2] / sph.ptr[0]);  
80 - return sph;  
81 - }  
82 -  
83 - /// Convert the vector from cartesian to spherical coordinates (r, theta, phi -> x, y, z where theta = [0, 2*pi])  
84 - CUDA_CALLABLE vec3<T> sph2cart() const{  
85 - vec3<T> cart;  
86 - cart.ptr[0] = ptr[0] * std::cos(ptr[1]) * std::sin(ptr[2]);  
87 - cart.ptr[1] = ptr[0] * std::sin(ptr[1]) * std::sin(ptr[2]);  
88 - cart.ptr[2] = ptr[0] * std::cos(ptr[2]);  
89 -  
90 - return cart;  
91 - }  
92 -  
93 - /// Computes the normalized vector (where each coordinate is divided by the L2 norm)  
94 - CUDA_CALLABLE vec3<T> norm() const{  
95 - vec3<T> result;  
96 - T l = len(); //compute the vector length  
97 - return (*this) / l;  
98 - }  
99 -  
100 - /// Computes the cross product of a 3-dimensional vector  
101 - CUDA_CALLABLE vec3<T> cross(const vec3<T> rhs) const{  
102 -  
103 - vec3<T> result;  
104 -  
105 - result[0] = (ptr[1] * rhs.ptr[2] - ptr[2] * rhs.ptr[1]);  
106 - result[1] = (ptr[2] * rhs.ptr[0] - ptr[0] * rhs.ptr[2]);  
107 - result[2] = (ptr[0] * rhs.ptr[1] - ptr[1] * rhs.ptr[0]);  
108 -  
109 - return result;  
110 - }  
111 -  
112 - /// Compute the Euclidean inner (dot) product  
113 - CUDA_CALLABLE T dot(vec3<T> rhs) const{  
114 - return ptr[0] * rhs.ptr[0] + ptr[1] * rhs.ptr[1] + ptr[2] * rhs.ptr[2];  
115 - }  
116 -  
117 - /// Arithmetic addition operator  
118 -  
119 - /// @param rhs is the right-hand-side operator for the addition  
120 - CUDA_CALLABLE vec3<T> operator+(vec3<T> rhs) const{  
121 - vec3<T> result;  
122 - result.ptr[0] = ptr[0] + rhs[0];  
123 - result.ptr[1] = ptr[1] + rhs[1];  
124 - result.ptr[2] = ptr[2] + rhs[2];  
125 - return result;  
126 - }  
127 -  
128 - /// Arithmetic addition to a scalar  
129 -  
130 - /// @param rhs is the right-hand-side operator for the addition  
131 - CUDA_CALLABLE vec3<T> operator+(T rhs) const{  
132 - vec3<T> result;  
133 - result.ptr[0] = ptr[0] + rhs;  
134 - result.ptr[1] = ptr[1] + rhs;  
135 - result.ptr[2] = ptr[2] + rhs;  
136 - return result;  
137 - }  
138 -  
139 - /// Arithmetic subtraction operator  
140 -  
141 - /// @param rhs is the right-hand-side operator for the subtraction  
142 - CUDA_CALLABLE vec3<T> operator-(vec3<T> rhs) const{  
143 - vec3<T> result;  
144 - result.ptr[0] = ptr[0] - rhs[0];  
145 - result.ptr[1] = ptr[1] - rhs[1];  
146 - result.ptr[2] = ptr[2] - rhs[2];  
147 - return result;  
148 - }  
149 - /// Arithmetic subtraction to a scalar  
150 -  
151 - /// @param rhs is the right-hand-side operator for the addition  
152 - CUDA_CALLABLE vec3<T> operator-(T rhs) const{  
153 - vec3<T> result;  
154 - result.ptr[0] = ptr[0] - rhs;  
155 - result.ptr[1] = ptr[1] - rhs;  
156 - result.ptr[2] = ptr[2] - rhs;  
157 - return result;  
158 - }  
159 -  
160 - /// Arithmetic scalar multiplication operator  
161 -  
162 - /// @param rhs is the right-hand-side operator for the subtraction  
163 - CUDA_CALLABLE vec3<T> operator*(T rhs) const{  
164 - vec3<T> result;  
165 - result.ptr[0] = ptr[0] * rhs;  
166 - result.ptr[1] = ptr[1] * rhs;  
167 - result.ptr[2] = ptr[2] * rhs;  
168 - return result;  
169 - }  
170 -  
171 - /// Arithmetic scalar division operator  
172 -  
173 - /// @param rhs is the right-hand-side operator for the subtraction  
174 - CUDA_CALLABLE vec3<T> operator/(T rhs) const{  
175 - return (*this) * ((T)1.0/rhs);  
176 - }  
177 -  
178 - /// Multiplication by a scalar, followed by assignment  
179 - CUDA_CALLABLE vec3<T> operator*=(T rhs){  
180 - ptr[0] = ptr[0] * rhs;  
181 - ptr[1] = ptr[1] * rhs;  
182 - ptr[2] = ptr[2] * rhs;  
183 - return *this;  
184 - }  
185 -  
186 - /// Addition and assignment  
187 - CUDA_CALLABLE vec3<T> operator+=(vec3<T> rhs){  
188 - ptr[0] = ptr[0] + rhs;  
189 - ptr[1] = ptr[1] + rhs;  
190 - ptr[2] = ptr[2] + rhs;  
191 - return *this;  
192 - }  
193 -  
194 - /// Assign a scalar to all values  
195 - CUDA_CALLABLE vec3<T> & operator=(T rhs){  
196 - ptr[0] = ptr[0] = rhs;  
197 - ptr[1] = ptr[1] = rhs;  
198 - ptr[2] = ptr[2] = rhs;  
199 - return *this;  
200 - }  
201 -  
202 - /// Casting and assignment  
203 - template<typename Y>  
204 - CUDA_CALLABLE vec3<T> & operator=(vec3<Y> rhs){  
205 - ptr[0] = (T)rhs.ptr[0];  
206 - ptr[1] = (T)rhs.ptr[1];  
207 - ptr[2] = (T)rhs.ptr[2];  
208 - return *this;  
209 - }  
210 -  
211 - /// Unary minus (returns the negative of the vector)  
212 - CUDA_CALLABLE vec3<T> operator-() const{  
213 - vec3<T> result;  
214 - result.ptr[0] = -ptr[0];  
215 - result.ptr[1] = -ptr[1];  
216 - result.ptr[2] = -ptr[2];  
217 - return result;  
218 - }  
219 -  
220 -<<<<<<< HEAD  
221 -//#ifndef __NVCC__  
222 -=======  
223 ->>>>>>> 9f5c0d4a055a2a19e69a97db1441aa617f96180c  
224 - /// Outputs the vector as a string  
225 - std::string str() const{  
226 - std::stringstream ss;  
227 -  
228 - const size_t N = 3;  
229 -  
230 - ss<<"[";  
231 - for(size_t i=0; i<N; i++)  
232 - {  
233 - ss<<ptr[i];  
234 - if(i != N-1)  
235 - ss<<", ";  
236 - }  
237 - ss<<"]";  
238 -  
239 - return ss.str();  
240 - }  
241 -<<<<<<< HEAD  
242 -//#endif  
243 -=======  
244 ->>>>>>> 9f5c0d4a055a2a19e69a97db1441aa617f96180c  
245 -  
246 - size_t size(){ return 3; }  
247 -  
248 - }; //end class vec3  
249 -} //end namespace stim  
250 -  
251 -/// Multiply a vector by a constant when the vector is on the right hand side  
252 -template <typename T>  
253 -stim::vec3<T> operator*(T lhs, stim::vec3<T> rhs){  
254 - return rhs * lhs;  
255 -}  
256 -  
257 -//stream operator  
258 -template<typename T>  
259 -std::ostream& operator<<(std::ostream& os, stim::vec3<T> const& rhs){  
260 - os<<rhs.str();  
261 - return os;  
262 -}  
263 -  
264 -#endif  
stim/math/vec3_BASE_62876.h deleted
1 -#ifndef STIM_VEC3_H  
2 -#define STIM_VEC3_H  
3 -  
4 -  
5 -#include <stim/cuda/cudatools/callable.h>  
6 -  
7 -  
8 -namespace stim{  
9 -  
10 -  
11 -/// A class designed to act as a 3D vector with CUDA compatibility  
12 -template<typename T>  
13 -class vec3{  
14 -  
15 -protected:  
16 - T ptr[3];  
17 -  
18 -public:  
19 -  
20 - CUDA_CALLABLE vec3(){}  
21 -  
22 - CUDA_CALLABLE vec3(T v){  
23 - ptr[0] = ptr[1] = ptr[2] = v;  
24 - }  
25 -  
26 - CUDA_CALLABLE vec3(T x, T y, T z){  
27 - ptr[0] = x;  
28 - ptr[1] = y;  
29 - ptr[2] = z;  
30 - }  
31 -  
32 - //copy constructor  
33 - CUDA_CALLABLE vec3( const vec3<T>& other){  
34 - ptr[0] = other.ptr[0];  
35 - ptr[1] = other.ptr[1];  
36 - ptr[2] = other.ptr[2];  
37 - }  
38 -  
39 - //access an element using an index  
40 - CUDA_CALLABLE T& operator[](size_t idx){  
41 - return ptr[idx];  
42 - }  
43 -  
44 - CUDA_CALLABLE T* data(){  
45 - return ptr;  
46 - }  
47 -  
48 -/// Casting operator. Creates a new vector with a new type U.  
49 - template< typename U >  
50 - CUDA_CALLABLE operator vec3<U>(){  
51 - vec3<U> result;  
52 - result.ptr[0] = (U)ptr[0];  
53 - result.ptr[1] = (U)ptr[1];  
54 - result.ptr[2] = (U)ptr[2];  
55 -  
56 - return result;  
57 - }  
58 -  
59 - // computes the squared Euclidean length (useful for several operations where only >, =, or < matter)  
60 - CUDA_CALLABLE T len_sq() const{  
61 - return ptr[0] * ptr[0] + ptr[1] * ptr[1] + ptr[2] * ptr[2];  
62 - }  
63 -  
64 - /// computes the Euclidean length of the vector  
65 - CUDA_CALLABLE T len() const{  
66 - return sqrt(len_sq());  
67 - }  
68 -  
69 -  
70 - /// Convert the vector from cartesian to spherical coordinates (x, y, z -> r, theta, phi where theta = [0, 2*pi])  
71 - CUDA_CALLABLE vec3<T> cart2sph() const{  
72 - vec3<T> sph;  
73 - sph.ptr[0] = len();  
74 - sph.ptr[1] = std::atan2(ptr[1], ptr[0]);  
75 - if(sph.ptr[0] == 0)  
76 - sph.ptr[2] = 0;  
77 - else  
78 - sph.ptr[2] = std::acos(ptr[2] / sph.ptr[0]);  
79 - return sph;  
80 - }  
81 -  
82 - /// Convert the vector from cartesian to spherical coordinates (r, theta, phi -> x, y, z where theta = [0, 2*pi])  
83 - CUDA_CALLABLE vec3<T> sph2cart() const{  
84 - vec3<T> cart;  
85 - cart.ptr[0] = ptr[0] * std::cos(ptr[1]) * std::sin(ptr[2]);  
86 - cart.ptr[1] = ptr[0] * std::sin(ptr[1]) * std::sin(ptr[2]);  
87 - cart.ptr[2] = ptr[0] * std::cos(ptr[2]);  
88 -  
89 - return cart;  
90 - }  
91 -  
92 - /// Computes the normalized vector (where each coordinate is divided by the L2 norm)  
93 - CUDA_CALLABLE vec3<T> norm() const{  
94 - vec3<T> result;  
95 - T l = len(); //compute the vector length  
96 - return (*this) / l;  
97 - }  
98 -  
99 - /// Computes the cross product of a 3-dimensional vector  
100 - CUDA_CALLABLE vec3<T> cross(const vec3<T> rhs) const{  
101 -  
102 - vec3<T> result;  
103 -  
104 - result[0] = (ptr[1] * rhs.ptr[2] - ptr[2] * rhs.ptr[1]);  
105 - result[1] = (ptr[2] * rhs.ptr[0] - ptr[0] * rhs.ptr[2]);  
106 - result[2] = (ptr[0] * rhs.ptr[1] - ptr[1] * rhs.ptr[0]);  
107 -  
108 - return result;  
109 - }  
110 -  
111 - /// Compute the Euclidean inner (dot) product  
112 - CUDA_CALLABLE T dot(vec3<T> rhs) const{  
113 - return ptr[0] * rhs.ptr[0] + ptr[1] * rhs.ptr[1] + ptr[2] * rhs.ptr[2];  
114 - }  
115 -  
116 - /// Arithmetic addition operator  
117 -  
118 - /// @param rhs is the right-hand-side operator for the addition  
119 - CUDA_CALLABLE vec3<T> operator+(vec3<T> rhs) const{  
120 - vec3<T> result;  
121 - result.ptr[0] = ptr[0] + rhs[0];  
122 - result.ptr[1] = ptr[1] + rhs[1];  
123 - result.ptr[2] = ptr[2] + rhs[2];  
124 - return result;  
125 - }  
126 -  
127 - /// Arithmetic addition to a scalar  
128 -  
129 - /// @param rhs is the right-hand-side operator for the addition  
130 - CUDA_CALLABLE vec3<T> operator+(T rhs) const{  
131 - vec3<T> result;  
132 - result.ptr[0] = ptr[0] + rhs;  
133 - result.ptr[1] = ptr[1] + rhs;  
134 - result.ptr[2] = ptr[2] + rhs;  
135 - return result;  
136 - }  
137 -  
138 - /// Arithmetic subtraction operator  
139 -  
140 - /// @param rhs is the right-hand-side operator for the subtraction  
141 - CUDA_CALLABLE vec3<T> operator-(vec3<T> rhs) const{  
142 - vec3<T> result;  
143 - result.ptr[0] = ptr[0] - rhs[0];  
144 - result.ptr[1] = ptr[1] - rhs[1];  
145 - result.ptr[2] = ptr[2] - rhs[2];  
146 - return result;  
147 - }  
148 - /// Arithmetic subtraction to a scalar  
149 -  
150 - /// @param rhs is the right-hand-side operator for the addition  
151 - CUDA_CALLABLE vec3<T> operator-(T rhs) const{  
152 - vec3<T> result;  
153 - result.ptr[0] = ptr[0] - rhs;  
154 - result.ptr[1] = ptr[1] - rhs;  
155 - result.ptr[2] = ptr[2] - rhs;  
156 - return result;  
157 - }  
158 -  
159 - /// Arithmetic scalar multiplication operator  
160 -  
161 - /// @param rhs is the right-hand-side operator for the subtraction  
162 - CUDA_CALLABLE vec3<T> operator*(T rhs) const{  
163 - vec3<T> result;  
164 - result.ptr[0] = ptr[0] * rhs;  
165 - result.ptr[1] = ptr[1] * rhs;  
166 - result.ptr[2] = ptr[2] * rhs;  
167 - return result;  
168 - }  
169 -  
170 - /// Arithmetic scalar division operator  
171 -  
172 - /// @param rhs is the right-hand-side operator for the subtraction  
173 - CUDA_CALLABLE vec3<T> operator/(T rhs) const{  
174 - return (*this) * ((T)1.0/rhs);  
175 - }  
176 -  
177 - /// Multiplication by a scalar, followed by assignment  
178 - CUDA_CALLABLE vec3<T> operator*=(T rhs){  
179 - ptr[0] = ptr[0] * rhs;  
180 - ptr[1] = ptr[1] * rhs;  
181 - ptr[2] = ptr[2] * rhs;  
182 - return *this;  
183 - }  
184 -  
185 - /// Addition and assignment  
186 - CUDA_CALLABLE vec3<T> operator+=(vec3<T> rhs){  
187 - ptr[0] = ptr[0] + rhs;  
188 - ptr[1] = ptr[1] + rhs;  
189 - ptr[2] = ptr[2] + rhs;  
190 - return *this;  
191 - }  
192 -  
193 - /// Assign a scalar to all values  
194 - CUDA_CALLABLE vec3<T> & operator=(T rhs){  
195 - ptr[0] = ptr[0] = rhs;  
196 - ptr[1] = ptr[1] = rhs;  
197 - ptr[2] = ptr[2] = rhs;  
198 - return *this;  
199 - }  
200 -  
201 - /// Casting and assignment  
202 - template<typename Y>  
203 - CUDA_CALLABLE vec3<T> & operator=(vec3<Y> rhs){  
204 - ptr[0] = (T)rhs.ptr[0];  
205 - ptr[1] = (T)rhs.ptr[1];  
206 - ptr[2] = (T)rhs.ptr[2];  
207 - return *this;  
208 - }  
209 -  
210 - /// Unary minus (returns the negative of the vector)  
211 - CUDA_CALLABLE vec3<T> operator-() const{  
212 - vec3<T> result;  
213 - result.ptr[0] = -ptr[0];  
214 - result.ptr[1] = -ptr[1];  
215 - result.ptr[2] = -ptr[2];  
216 - return result;  
217 - }  
218 -  
219 -#ifndef __NVCC__  
220 - /// Outputs the vector as a string  
221 - std::string str() const{  
222 - std::stringstream ss;  
223 -  
224 - const size_t N = 3;  
225 -  
226 - ss<<"[";  
227 - for(size_t i=0; i<N; i++)  
228 - {  
229 - ss<<ptr[i];  
230 - if(i != N-1)  
231 - ss<<", ";  
232 - }  
233 - ss<<"]";  
234 -  
235 - return ss.str();  
236 - }  
237 -#endif  
238 -  
239 - size_t size(){ return 3; }  
240 -  
241 - }; //end class vec3  
242 -} //end namespace stim  
243 -  
244 -/// Multiply a vector by a constant when the vector is on the right hand side  
245 -template <typename T>  
246 -stim::vec3<T> operator*(T lhs, stim::vec3<T> rhs){  
247 - return rhs * lhs;  
248 -}  
249 -  
250 -//stream operator  
251 -template<typename T>  
252 -std::ostream& operator<<(std::ostream& os, stim::vec3<T> const& rhs){  
253 - os<<rhs.str();  
254 - return os;  
255 -}  
256 -  
257 -#endif  
stim/math/vec3_LOCAL_62876.h deleted
1 -#ifndef STIM_VEC3_H  
2 -#define STIM_VEC3_H  
3 -  
4 -  
5 -#include <stim/cuda/cudatools/callable.h>  
6 -  
7 -  
8 -namespace stim{  
9 -  
10 -  
11 -/// A class designed to act as a 3D vector with CUDA compatibility  
12 -template<typename T>  
13 -class vec3{  
14 -  
15 -protected:  
16 - T ptr[3];  
17 -  
18 -public:  
19 -  
20 - CUDA_CALLABLE vec3(){}  
21 -  
22 - CUDA_CALLABLE vec3(T v){  
23 - ptr[0] = ptr[1] = ptr[2] = v;  
24 - }  
25 -  
26 - CUDA_CALLABLE vec3(T x, T y, T z){  
27 - ptr[0] = x;  
28 - ptr[1] = y;  
29 - ptr[2] = z;  
30 - }  
31 -  
32 - //copy constructor  
33 - CUDA_CALLABLE vec3( const vec3<T>& other){  
34 - ptr[0] = other.ptr[0];  
35 - ptr[1] = other.ptr[1];  
36 - ptr[2] = other.ptr[2];  
37 - }  
38 -  
39 - //access an element using an index  
40 - CUDA_CALLABLE T& operator[](size_t idx){  
41 - return ptr[idx];  
42 - }  
43 -  
44 - CUDA_CALLABLE T* data(){  
45 - return ptr;  
46 - }  
47 -  
48 -/// Casting operator. Creates a new vector with a new type U.  
49 - template< typename U >  
50 - CUDA_CALLABLE operator vec3<U>(){  
51 - vec3<U> result;  
52 - result.ptr[0] = (U)ptr[0];  
53 - result.ptr[1] = (U)ptr[1];  
54 - result.ptr[2] = (U)ptr[2];  
55 -  
56 - return result;  
57 - }  
58 -  
59 - // computes the squared Euclidean length (useful for several operations where only >, =, or < matter)  
60 - CUDA_CALLABLE T len_sq() const{  
61 - return ptr[0] * ptr[0] + ptr[1] * ptr[1] + ptr[2] * ptr[2];  
62 - }  
63 -  
64 - /// computes the Euclidean length of the vector  
65 - CUDA_CALLABLE T len() const{  
66 - return sqrt(len_sq());  
67 - }  
68 -  
69 -  
70 - /// Convert the vector from cartesian to spherical coordinates (x, y, z -> r, theta, phi where theta = [0, 2*pi])  
71 - CUDA_CALLABLE vec3<T> cart2sph() const{  
72 - vec3<T> sph;  
73 - sph.ptr[0] = len();  
74 - sph.ptr[1] = std::atan2(ptr[1], ptr[0]);  
75 - if(sph.ptr[0] == 0)  
76 - sph.ptr[2] = 0;  
77 - else  
78 - sph.ptr[2] = std::acos(ptr[2] / sph.ptr[0]);  
79 - return sph;  
80 - }  
81 -  
82 - /// Convert the vector from cartesian to spherical coordinates (r, theta, phi -> x, y, z where theta = [0, 2*pi])  
83 - CUDA_CALLABLE vec3<T> sph2cart() const{  
84 - vec3<T> cart;  
85 - cart.ptr[0] = ptr[0] * std::cos(ptr[1]) * std::sin(ptr[2]);  
86 - cart.ptr[1] = ptr[0] * std::sin(ptr[1]) * std::sin(ptr[2]);  
87 - cart.ptr[2] = ptr[0] * std::cos(ptr[2]);  
88 -  
89 - return cart;  
90 - }  
91 -  
92 - /// Computes the normalized vector (where each coordinate is divided by the L2 norm)  
93 - CUDA_CALLABLE vec3<T> norm() const{  
94 - vec3<T> result;  
95 - T l = len(); //compute the vector length  
96 - return (*this) / l;  
97 - }  
98 -  
99 - /// Computes the cross product of a 3-dimensional vector  
100 - CUDA_CALLABLE vec3<T> cross(const vec3<T> rhs) const{  
101 -  
102 - vec3<T> result;  
103 -  
104 - result[0] = (ptr[1] * rhs.ptr[2] - ptr[2] * rhs.ptr[1]);  
105 - result[1] = (ptr[2] * rhs.ptr[0] - ptr[0] * rhs.ptr[2]);  
106 - result[2] = (ptr[0] * rhs.ptr[1] - ptr[1] * rhs.ptr[0]);  
107 -  
108 - return result;  
109 - }  
110 -  
111 - /// Compute the Euclidean inner (dot) product  
112 - CUDA_CALLABLE T dot(vec3<T> rhs) const{  
113 - return ptr[0] * rhs.ptr[0] + ptr[1] * rhs.ptr[1] + ptr[2] * rhs.ptr[2];  
114 - }  
115 -  
116 - /// Arithmetic addition operator  
117 -  
118 - /// @param rhs is the right-hand-side operator for the addition  
119 - CUDA_CALLABLE vec3<T> operator+(vec3<T> rhs) const{  
120 - vec3<T> result;  
121 - result.ptr[0] = ptr[0] + rhs[0];  
122 - result.ptr[1] = ptr[1] + rhs[1];  
123 - result.ptr[2] = ptr[2] + rhs[2];  
124 - return result;  
125 - }  
126 -  
127 - /// Arithmetic addition to a scalar  
128 -  
129 - /// @param rhs is the right-hand-side operator for the addition  
130 - CUDA_CALLABLE vec3<T> operator+(T rhs) const{  
131 - vec3<T> result;  
132 - result.ptr[0] = ptr[0] + rhs;  
133 - result.ptr[1] = ptr[1] + rhs;  
134 - result.ptr[2] = ptr[2] + rhs;  
135 - return result;  
136 - }  
137 -  
138 - /// Arithmetic subtraction operator  
139 -  
140 - /// @param rhs is the right-hand-side operator for the subtraction  
141 - CUDA_CALLABLE vec3<T> operator-(vec3<T> rhs) const{  
142 - vec3<T> result;  
143 - result.ptr[0] = ptr[0] - rhs[0];  
144 - result.ptr[1] = ptr[1] - rhs[1];  
145 - result.ptr[2] = ptr[2] - rhs[2];  
146 - return result;  
147 - }  
148 - /// Arithmetic subtraction to a scalar  
149 -  
150 - /// @param rhs is the right-hand-side operator for the addition  
151 - CUDA_CALLABLE vec3<T> operator-(T rhs) const{  
152 - vec3<T> result;  
153 - result.ptr[0] = ptr[0] - rhs;  
154 - result.ptr[1] = ptr[1] - rhs;  
155 - result.ptr[2] = ptr[2] - rhs;  
156 - return result;  
157 - }  
158 -  
159 - /// Arithmetic scalar multiplication operator  
160 -  
161 - /// @param rhs is the right-hand-side operator for the subtraction  
162 - CUDA_CALLABLE vec3<T> operator*(T rhs) const{  
163 - vec3<T> result;  
164 - result.ptr[0] = ptr[0] * rhs;  
165 - result.ptr[1] = ptr[1] * rhs;  
166 - result.ptr[2] = ptr[2] * rhs;  
167 - return result;  
168 - }  
169 -  
170 - /// Arithmetic scalar division operator  
171 -  
172 - /// @param rhs is the right-hand-side operator for the subtraction  
173 - CUDA_CALLABLE vec3<T> operator/(T rhs) const{  
174 - return (*this) * ((T)1.0/rhs);  
175 - }  
176 -  
177 - /// Multiplication by a scalar, followed by assignment  
178 - CUDA_CALLABLE vec3<T> operator*=(T rhs){  
179 - ptr[0] = ptr[0] * rhs;  
180 - ptr[1] = ptr[1] * rhs;  
181 - ptr[2] = ptr[2] * rhs;  
182 - return *this;  
183 - }  
184 -  
185 - /// Addition and assignment  
186 - CUDA_CALLABLE vec3<T> operator+=(vec3<T> rhs){  
187 - ptr[0] = ptr[0] + rhs;  
188 - ptr[1] = ptr[1] + rhs;  
189 - ptr[2] = ptr[2] + rhs;  
190 - return *this;  
191 - }  
192 -  
193 - /// Assign a scalar to all values  
194 - CUDA_CALLABLE vec3<T> & operator=(T rhs){  
195 - ptr[0] = ptr[0] = rhs;  
196 - ptr[1] = ptr[1] = rhs;  
197 - ptr[2] = ptr[2] = rhs;  
198 - return *this;  
199 - }  
200 -  
201 - /// Casting and assignment  
202 - template<typename Y>  
203 - CUDA_CALLABLE vec3<T> & operator=(vec3<Y> rhs){  
204 - ptr[0] = (T)rhs.ptr[0];  
205 - ptr[1] = (T)rhs.ptr[1];  
206 - ptr[2] = (T)rhs.ptr[2];  
207 - return *this;  
208 - }  
209 -  
210 - /// Unary minus (returns the negative of the vector)  
211 - CUDA_CALLABLE vec3<T> operator-() const{  
212 - vec3<T> result;  
213 - result.ptr[0] = -ptr[0];  
214 - result.ptr[1] = -ptr[1];  
215 - result.ptr[2] = -ptr[2];  
216 - return result;  
217 - }  
218 -  
219 -//#ifndef __NVCC__  
220 - /// Outputs the vector as a string  
221 - std::string str() const{  
222 - std::stringstream ss;  
223 -  
224 - const size_t N = 3;  
225 -  
226 - ss<<"[";  
227 - for(size_t i=0; i<N; i++)  
228 - {  
229 - ss<<ptr[i];  
230 - if(i != N-1)  
231 - ss<<", ";  
232 - }  
233 - ss<<"]";  
234 -  
235 - return ss.str();  
236 - }  
237 -//#endif  
238 -  
239 - size_t size(){ return 3; }  
240 -  
241 - }; //end class vec3  
242 -} //end namespace stim  
243 -  
244 -/// Multiply a vector by a constant when the vector is on the right hand side  
245 -template <typename T>  
246 -stim::vec3<T> operator*(T lhs, stim::vec3<T> rhs){  
247 - return rhs * lhs;  
248 -}  
249 -  
250 -//stream operator  
251 -template<typename T>  
252 -std::ostream& operator<<(std::ostream& os, stim::vec3<T> const& rhs){  
253 - os<<rhs.str();  
254 - return os;  
255 -}  
256 -  
257 -#endif  
stim/math/vec3_REMOTE_62876.h deleted
1 -#ifndef STIM_VEC3_H  
2 -#define STIM_VEC3_H  
3 -  
4 -  
5 -#include <stim/cuda/cudatools/callable.h>  
6 -#include <cmath>  
7 -  
8 -  
9 -namespace stim{  
10 -  
11 -  
12 -/// A class designed to act as a 3D vector with CUDA compatibility  
13 -template<typename T>  
14 -class vec3{  
15 -  
16 -protected:  
17 - T ptr[3];  
18 -  
19 -public:  
20 -  
21 - CUDA_CALLABLE vec3(){}  
22 -  
23 - CUDA_CALLABLE vec3(T v){  
24 - ptr[0] = ptr[1] = ptr[2] = v;  
25 - }  
26 -  
27 - CUDA_CALLABLE vec3(T x, T y, T z){  
28 - ptr[0] = x;  
29 - ptr[1] = y;  
30 - ptr[2] = z;  
31 - }  
32 -  
33 - //copy constructor  
34 - CUDA_CALLABLE vec3( const vec3<T>& other){  
35 - ptr[0] = other.ptr[0];  
36 - ptr[1] = other.ptr[1];  
37 - ptr[2] = other.ptr[2];  
38 - }  
39 -  
40 - //access an element using an index  
41 - CUDA_CALLABLE T& operator[](size_t idx){  
42 - return ptr[idx];  
43 - }  
44 -  
45 - CUDA_CALLABLE T* data(){  
46 - return ptr;  
47 - }  
48 -  
49 -/// Casting operator. Creates a new vector with a new type U.  
50 - template< typename U >  
51 - CUDA_CALLABLE operator vec3<U>(){  
52 - vec3<U> result;  
53 - result.ptr[0] = (U)ptr[0];  
54 - result.ptr[1] = (U)ptr[1];  
55 - result.ptr[2] = (U)ptr[2];  
56 -  
57 - return result;  
58 - }  
59 -  
60 - // computes the squared Euclidean length (useful for several operations where only >, =, or < matter)  
61 - CUDA_CALLABLE T len_sq() const{  
62 - return ptr[0] * ptr[0] + ptr[1] * ptr[1] + ptr[2] * ptr[2];  
63 - }  
64 -  
65 - /// computes the Euclidean length of the vector  
66 - CUDA_CALLABLE T len() const{  
67 - return sqrt(len_sq());  
68 - }  
69 -  
70 -  
71 - /// Convert the vector from cartesian to spherical coordinates (x, y, z -> r, theta, phi where theta = [0, 2*pi])  
72 - CUDA_CALLABLE vec3<T> cart2sph() const{  
73 - vec3<T> sph;  
74 - sph.ptr[0] = len();  
75 - sph.ptr[1] = std::atan2(ptr[1], ptr[0]);  
76 - if(sph.ptr[0] == 0)  
77 - sph.ptr[2] = 0;  
78 - else  
79 - sph.ptr[2] = std::acos(ptr[2] / sph.ptr[0]);  
80 - return sph;  
81 - }  
82 -  
83 - /// Convert the vector from cartesian to spherical coordinates (r, theta, phi -> x, y, z where theta = [0, 2*pi])  
84 - CUDA_CALLABLE vec3<T> sph2cart() const{  
85 - vec3<T> cart;  
86 - cart.ptr[0] = ptr[0] * std::cos(ptr[1]) * std::sin(ptr[2]);  
87 - cart.ptr[1] = ptr[0] * std::sin(ptr[1]) * std::sin(ptr[2]);  
88 - cart.ptr[2] = ptr[0] * std::cos(ptr[2]);  
89 -  
90 - return cart;  
91 - }  
92 -  
93 - /// Computes the normalized vector (where each coordinate is divided by the L2 norm)  
94 - CUDA_CALLABLE vec3<T> norm() const{  
95 - vec3<T> result;  
96 - T l = len(); //compute the vector length  
97 - return (*this) / l;  
98 - }  
99 -  
100 - /// Computes the cross product of a 3-dimensional vector  
101 - CUDA_CALLABLE vec3<T> cross(const vec3<T> rhs) const{  
102 -  
103 - vec3<T> result;  
104 -  
105 - result[0] = (ptr[1] * rhs.ptr[2] - ptr[2] * rhs.ptr[1]);  
106 - result[1] = (ptr[2] * rhs.ptr[0] - ptr[0] * rhs.ptr[2]);  
107 - result[2] = (ptr[0] * rhs.ptr[1] - ptr[1] * rhs.ptr[0]);  
108 -  
109 - return result;  
110 - }  
111 -  
112 - /// Compute the Euclidean inner (dot) product  
113 - CUDA_CALLABLE T dot(vec3<T> rhs) const{  
114 - return ptr[0] * rhs.ptr[0] + ptr[1] * rhs.ptr[1] + ptr[2] * rhs.ptr[2];  
115 - }  
116 -  
117 - /// Arithmetic addition operator  
118 -  
119 - /// @param rhs is the right-hand-side operator for the addition  
120 - CUDA_CALLABLE vec3<T> operator+(vec3<T> rhs) const{  
121 - vec3<T> result;  
122 - result.ptr[0] = ptr[0] + rhs[0];  
123 - result.ptr[1] = ptr[1] + rhs[1];  
124 - result.ptr[2] = ptr[2] + rhs[2];  
125 - return result;  
126 - }  
127 -  
128 - /// Arithmetic addition to a scalar  
129 -  
130 - /// @param rhs is the right-hand-side operator for the addition  
131 - CUDA_CALLABLE vec3<T> operator+(T rhs) const{  
132 - vec3<T> result;  
133 - result.ptr[0] = ptr[0] + rhs;  
134 - result.ptr[1] = ptr[1] + rhs;  
135 - result.ptr[2] = ptr[2] + rhs;  
136 - return result;  
137 - }  
138 -  
139 - /// Arithmetic subtraction operator  
140 -  
141 - /// @param rhs is the right-hand-side operator for the subtraction  
142 - CUDA_CALLABLE vec3<T> operator-(vec3<T> rhs) const{  
143 - vec3<T> result;  
144 - result.ptr[0] = ptr[0] - rhs[0];  
145 - result.ptr[1] = ptr[1] - rhs[1];  
146 - result.ptr[2] = ptr[2] - rhs[2];  
147 - return result;  
148 - }  
149 - /// Arithmetic subtraction to a scalar  
150 -  
151 - /// @param rhs is the right-hand-side operator for the addition  
152 - CUDA_CALLABLE vec3<T> operator-(T rhs) const{  
153 - vec3<T> result;  
154 - result.ptr[0] = ptr[0] - rhs;  
155 - result.ptr[1] = ptr[1] - rhs;  
156 - result.ptr[2] = ptr[2] - rhs;  
157 - return result;  
158 - }  
159 -  
160 - /// Arithmetic scalar multiplication operator  
161 -  
162 - /// @param rhs is the right-hand-side operator for the subtraction  
163 - CUDA_CALLABLE vec3<T> operator*(T rhs) const{  
164 - vec3<T> result;  
165 - result.ptr[0] = ptr[0] * rhs;  
166 - result.ptr[1] = ptr[1] * rhs;  
167 - result.ptr[2] = ptr[2] * rhs;  
168 - return result;  
169 - }  
170 -  
171 - /// Arithmetic scalar division operator  
172 -  
173 - /// @param rhs is the right-hand-side operator for the subtraction  
174 - CUDA_CALLABLE vec3<T> operator/(T rhs) const{  
175 - return (*this) * ((T)1.0/rhs);  
176 - }  
177 -  
178 - /// Multiplication by a scalar, followed by assignment  
179 - CUDA_CALLABLE vec3<T> operator*=(T rhs){  
180 - ptr[0] = ptr[0] * rhs;  
181 - ptr[1] = ptr[1] * rhs;  
182 - ptr[2] = ptr[2] * rhs;  
183 - return *this;  
184 - }  
185 -  
186 - /// Addition and assignment  
187 - CUDA_CALLABLE vec3<T> operator+=(vec3<T> rhs){  
188 - ptr[0] = ptr[0] + rhs;  
189 - ptr[1] = ptr[1] + rhs;  
190 - ptr[2] = ptr[2] + rhs;  
191 - return *this;  
192 - }  
193 -  
194 - /// Assign a scalar to all values  
195 - CUDA_CALLABLE vec3<T> & operator=(T rhs){  
196 - ptr[0] = ptr[0] = rhs;  
197 - ptr[1] = ptr[1] = rhs;  
198 - ptr[2] = ptr[2] = rhs;  
199 - return *this;  
200 - }  
201 -  
202 - /// Casting and assignment  
203 - template<typename Y>  
204 - CUDA_CALLABLE vec3<T> & operator=(vec3<Y> rhs){  
205 - ptr[0] = (T)rhs.ptr[0];  
206 - ptr[1] = (T)rhs.ptr[1];  
207 - ptr[2] = (T)rhs.ptr[2];  
208 - return *this;  
209 - }  
210 -  
211 - /// Unary minus (returns the negative of the vector)  
212 - CUDA_CALLABLE vec3<T> operator-() const{  
213 - vec3<T> result;  
214 - result.ptr[0] = -ptr[0];  
215 - result.ptr[1] = -ptr[1];  
216 - result.ptr[2] = -ptr[2];  
217 - return result;  
218 - }  
219 -  
220 - /// Outputs the vector as a string  
221 - std::string str() const{  
222 - std::stringstream ss;  
223 -  
224 - const size_t N = 3;  
225 -  
226 - ss<<"[";  
227 - for(size_t i=0; i<N; i++)  
228 - {  
229 - ss<<ptr[i];  
230 - if(i != N-1)  
231 - ss<<", ";  
232 - }  
233 - ss<<"]";  
234 -  
235 - return ss.str();  
236 - }  
237 -  
238 - size_t size(){ return 3; }  
239 -  
240 - }; //end class vec3  
241 -} //end namespace stim  
242 -  
243 -/// Multiply a vector by a constant when the vector is on the right hand side  
244 -template <typename T>  
245 -stim::vec3<T> operator*(T lhs, stim::vec3<T> rhs){  
246 - return rhs * lhs;  
247 -}  
248 -  
249 -//stream operator  
250 -template<typename T>  
251 -std::ostream& operator<<(std::ostream& os, stim::vec3<T> const& rhs){  
252 - os<<rhs.str();  
253 - return os;  
254 -}  
255 -  
256 -#endif