Commit 761ebaa936cf81f314fb51047ff84e6a60fffeaf
1 parent
18f207ce
spherical harmonics arithmetic
Showing
3 changed files
with
51 additions
and
3 deletions
Show diff stats
stim/math/constants.h
@@ -4,7 +4,6 @@ | @@ -4,7 +4,6 @@ | ||
4 | #define STIM_PI 3.1415926535897932384626433832795028841971693993751058209749445923078164062862 | 4 | #define STIM_PI 3.1415926535897932384626433832795028841971693993751058209749445923078164062862 |
5 | #define STIM_TAU 2 * STIM_PI | 5 | #define STIM_TAU 2 * STIM_PI |
6 | 6 | ||
7 | -#include "stim/cuda/cudatools/callable.h" | ||
8 | namespace stim{ | 7 | namespace stim{ |
9 | const double PI = 3.1415926535897932384626433832795028841971693993751058209749445923078164062862; | 8 | const double PI = 3.1415926535897932384626433832795028841971693993751058209749445923078164062862; |
10 | const double TAU = 2 * stim::PI; | 9 | const double TAU = 2 * stim::PI; |
stim/math/spharmonics.h
@@ -5,7 +5,6 @@ | @@ -5,7 +5,6 @@ | ||
5 | #include <boost/math/special_functions/spherical_harmonic.hpp> | 5 | #include <boost/math/special_functions/spherical_harmonic.hpp> |
6 | #include <vector> | 6 | #include <vector> |
7 | 7 | ||
8 | -#define PI 3.14159 | ||
9 | #define WIRE_SCALE 1.001 | 8 | #define WIRE_SCALE 1.001 |
10 | namespace stim{ | 9 | namespace stim{ |
11 | 10 | ||
@@ -32,6 +31,12 @@ protected: | @@ -32,6 +31,12 @@ protected: | ||
32 | 31 | ||
33 | 32 | ||
34 | public: | 33 | public: |
34 | + spharmonics() { | ||
35 | + mcN = 0; | ||
36 | + } | ||
37 | + spharmonics(size_t c) : spharmonics() { | ||
38 | + resize(c); | ||
39 | + } | ||
35 | 40 | ||
36 | void push(double c){ | 41 | void push(double c){ |
37 | C.push_back(c); | 42 | C.push_back(c); |
@@ -163,6 +168,38 @@ public: | @@ -163,6 +168,38 @@ public: | ||
163 | return fx; | 168 | return fx; |
164 | } | 169 | } |
165 | 170 | ||
171 | + //overload arithmetic operations | ||
172 | + spharmonics<T> operator*(T rhs) const { | ||
173 | + spharmonics<T> result(C.size()); //create a new spherical harmonics object | ||
174 | + for (size_t c = 0; c < C.size(); c++) //for each coefficient | ||
175 | + result.C[c] = C[c] * rhs; //calculate the factor and store the result in the new spharmonics object | ||
176 | + return result; | ||
177 | + } | ||
178 | + | ||
179 | + spharmonics<T> operator+(spharmonics<T> rhs) { | ||
180 | + size_t low = std::min(C.size(), rhs.C.size()); //store the number of coefficients in the lowest object | ||
181 | + size_t high = std::max(C.size(), rhs.C.size()); //store the number of coefficients in the result | ||
182 | + bool rhs_lowest = false; //true if rhs has the lowest number of coefficients | ||
183 | + if (rhs.C.size() < C.size()) rhs_lowest = true; //if rhs has a lower number of coefficients, set the flag | ||
184 | + | ||
185 | + spharmonics<T> result(high); //create a new object | ||
186 | + size_t c; | ||
187 | + for (c = 0; c < low; c++) //perform the first batch of additions | ||
188 | + result.C[c] = C[c] + rhs.C[c]; //perform the addition | ||
189 | + | ||
190 | + for (c = low; c < high; c++) { | ||
191 | + if (rhs_lowest) | ||
192 | + result.C[c] = C[c]; | ||
193 | + else | ||
194 | + result.C[c] = rhs.C[c]; | ||
195 | + } | ||
196 | + return result; | ||
197 | + } | ||
198 | + | ||
199 | + spharmonics<T> operator-(spharmonics<T> rhs) { | ||
200 | + return (*this) + (rhs * (T)(-1)); | ||
201 | + } | ||
202 | + | ||
166 | }; //end class sph_harmonics | 203 | }; //end class sph_harmonics |
167 | 204 | ||
168 | 205 |
stim/visualization/gl_spharmonics.h
@@ -163,6 +163,19 @@ protected: | @@ -163,6 +163,19 @@ protected: | ||
163 | } | 163 | } |
164 | 164 | ||
165 | public: | 165 | public: |
166 | + gl_spharmonics<T>() { | ||
167 | + | ||
168 | + } | ||
169 | + | ||
170 | + gl_spharmonics<T>(const spharmonics<T> copy) : gl_spharmonics<T>() { | ||
171 | + C = copy.C; | ||
172 | + } | ||
173 | + | ||
174 | + gl_spharmonics<T>& operator=(const spharmonics<T> rhs) { | ||
175 | + gl_spharmonics<T> result(rhs.C.size()); | ||
176 | + result.C = spharmonics<T>::rhs.C; | ||
177 | + return result; | ||
178 | + } | ||
166 | 179 | ||
167 | void glRender(){ | 180 | void glRender(){ |
168 | //set all OpenGL parameters required for drawing | 181 | //set all OpenGL parameters required for drawing |
@@ -177,7 +190,6 @@ public: | @@ -177,7 +190,6 @@ public: | ||
177 | gen_function(); | 190 | gen_function(); |
178 | } | 191 | } |
179 | 192 | ||
180 | - | ||
181 | }; //end gl_spharmonics | 193 | }; //end gl_spharmonics |
182 | 194 | ||
183 | 195 |