GOAT (Geometrical optics application tool) 0.1
Loading...
Searching...
No Matches
asphericLens.h
Go to the documentation of this file.
1#pragma once
2#include "objectshape.h"
3namespace GOAT
4{
5 namespace raytracing
6 {
12 typedef struct
13 {
14 double k;
15 double R;
16 std::vector<double> A;
17 double shift=0;
18 bool isPlano = false;
20
21
25 typedef struct
26 {
28 double offset;
29 double radius;
31
32
33
39
41 public ObjectShape
42 {
43 public:
45 std::complex<double> n, asphericLensParms lensParms,
46 const maths::Matrix<std::complex<double> > alpha = maths::CUNITY,
47 const maths::Vector<double>& Ex = maths::ex,
48 const maths::Vector<double>& Ey = maths::ey,
49 const maths::Vector<double>& Ez = maths::ez);
50 void binWrite();
51 void binRead();
52 void scale(double sf);
57 double volume();
58 void binWrite(std::ofstream& os) { }
59 void binRead(std::ifstream& os) { }
60 void initQuad() { }
61 void setr0(double r0) { }
63 void setPos(double x, double y, double z) { }
65 return maths::Vector<double> (0, 0, 0);
66 }
67
68
71 double zleft(maths::Vector<double> P, double lambda);
72 double zright(maths::Vector<double> P, double lambda);
73 double z(double r, asphericLensSide side);
74
75 double dzdrleft(maths::Vector<double> P, double lambda);
76 double dzdrright(maths::Vector<double> P, double lambda);
77
78/*
79 double dzright(double lambda);
80 double dzleft(double lambda);
81 */
82 double drdlambda;
85 };
86 }
87}
This class represents a threedimensional (numeric) Matrix as a template.
Definition matrix.h:23
Template class for threedimensional vectors.
Definition vector.h:57
double sf
scaling factor, it is used to scale the shape of the object
maths::Matrix< std::complex< double > > alpha
polarisability matrix
double r0
radius of the calculation sphere
std::complex< double > n
refractive index of the object
void binWrite(std::ofstream &os)
not yet implemented
maths::Vector< double > P
void setPos(double x, double y, double z)
not yet implemented
void binRead(std::ifstream &os)
not yet implemented
double zright(maths::Vector< double > P, double lambda)
asphericLens(const maths::Vector< double > &P, std::complex< double > n, asphericLensParms lensParms, const maths::Matrix< std::complex< double > > alpha=maths::CUNITY, const maths::Vector< double > &Ex=maths::ex, const maths::Vector< double > &Ey=maths::ey, const maths::Vector< double > &Ez=maths::ez)
maths::Vector< double > currentnorm
bool isInside(const maths::Vector< double > &p)
checks if point P is inside the object
void initQuad()
not yet implemented
void setPos(maths::Vector< double > r)
not yet implemented
void setr0(double r0)
not yet implemented
double z(double r, asphericLensSide side)
maths::Vector< double > calcCoM()
not yet implemented
double dzdrleft(maths::Vector< double > P, double lambda)
bool next(const maths::Vector< double > &p, const maths::Vector< double > &k, maths::Vector< double > &pout)
searches for the next (nearest) intersection of a ray with the object, p: current position of the ray...
maths::Vector< double > k
double zleft(maths::Vector< double > P, double lambda)
maths::Vector< double > norm(const maths::Vector< double > &P)
surface normal at the point P
double dzdrright(maths::Vector< double > P, double lambda)
double volume()
not yet implemented
const Matrix< std::complex< double > > CUNITY
Unity matrix (complex-valued)
Definition matrix.h:475
Raytracer used for ultrashort pulse calculation with raytracing only.
Definition asphericLens.h:6
This class is used for the iray class. This class is intended for internal use only....
Definition fresnel.h:7
Structure to describe one side of an aspheric lens The surface is described by .
double shift
how much must the curve be shifted (with consideration of the offset)
bool isPlano
true, if the corresponding side is plano