19 double r,
double theta,
double phi);
24 double theta,
double phi);
43 #ifdef WITH_SUPERGITTER
44#define SGN(x) (x<0) ? -1 : (x>0)
70 double lambdax, lambday, lambdaz, lambda;
75 if (currentIndex[0] == -1)
85 int signx = SGN(k0[0]);
86 int signy = SGN(k0[1]);
87 int signz = SGN(k0[2]);
88 index[0] = currentIndex[0] + signx;
89 index[1] = currentIndex[1] + signy;
90 index[2] = currentIndex[2] + signz;
92 lambdax = (index[0] * git.
d[0] - p0[0] - git.
r0) / k0[0];
93 lambday = (index[1] * git.
d[1] - p0[1] - git.
r0) / k0[1];
94 lambdaz = (index[2] * git.
d[2] - p0[2] - git.
r0) / k0[2];
98 if (fabs(lambdax) < fabs(lambday))
105 if (fabs(lambdaz) < lambda)
111 currentIndex[i] = index[i];
112 return p0 + lambda * k0;
118 double lambdax = DBL_MAX;
119 double lambday = DBL_MAX;
120 double lambdaz = DBL_MAX, lambda;
135 int signx = SGN(k0[0]);
136 int signy = SGN(k0[1]);
137 int signz = SGN(k0[2]);
138 index[0] = currentIndex[0] + signx;
139 index[1] = currentIndex[1] + signy;
140 index[2] = currentIndex[2] + signz;
142 if (k0[0] != 0) lambdax = ((double)index[0] * git.
d[0] - p0[0] - git.
r0) / k0[0];
143 if (k0[1] != 0) lambday = ((double)index[1] * git.
d[1] - p0[1] - git.
r0) / k0[1];
144 if (k0[2] != 0) lambdaz = ((double)index[2] * git.
d[2] - p0[2] - git.
r0) / k0[2];
148 if ((lambdax < lambday) && (lambdax > 10.0*DBL_MIN))
155 if ((lambdaz < lambda) && (lambdaz > 10.0 * DBL_MIN) || lambda < 10.0 * DBL_MIN)
161 currentIndex[i] = index[i];
163 return p0 + lambda * k0;
Template class for threedimensional vectors.
Template class to store arbitrary information in a 3D-grid This template class provides a virtual 3D-...
double r0
Radius of the calculation sphere.
maths::Vector< double > d
Edge length of one cell in x-, y- and z-direction.
This class provides a grid used for inelastic scattering calculation.
Raytracer used for ultrashort pulse calculation with raytracing only.
maths::Vector< double > ursprungrot(double dr, double theta, double phi, maths::Vector< double > &exrot, maths::Vector< double > &eyrot, grid &git)
maths::Vector< double > drehvektor(maths::Vector< double > vein, double theta, double phi)
maths::Vector< double > startpunkt(int ix, int iy, grid &git, double r, double theta, double phi)
maths::Vector< double > pnext(maths::Vector< double > p0, maths::Vector< double > k0, maths::Vector< double > d, double eps=1E-50)
maths::Vector< double > drehphivektor(maths::Vector< double > vein, double phi)
This class is used for the iray class. This class is intended for internal use only....
This file contains the Vector template class and some useful functions around this class.