Changeset 19603
 Timestamp:
 Sep 2, 2019, 9:59:18 PM (6 months ago)
 File:

 1 edited
Legend:
 Unmodified
 Added
 Removed

trunk/Mars/msimreflector/MFresnelLens.cc
r19600 r19603 168 168 } 169 169 170 double CalcRefractiveIndex( const double &lambda)170 double CalcRefractiveIndex(double lambda) 171 171 { 172 172 // https://refractiveindex.info/?shelf=organic&book=poly(methyl_methacrylate)&page=Szczurowski … … 176 176 const double l2 = lambda*lambda; 177 177 178 const double c0 = 0.99654/(10.00787 /l2);179 const double c1 = 0.18964/(10.02191 /l2);180 const double c2 = 0.00411/(13.85727 /l2);178 const double c0 = 0.99654/(10.00787e6/l2); 179 const double c1 = 0.18964/(10.02191e6/l2); 180 const double c2 = 0.00411/(13.85727e6/l2); 181 181 182 182 return sqrt(1+c0+c1+c2); 183 183 } 184 184 185 void ApplyRefraction(MQuaternion &u, const TVector3 &n, const double &n1, const double &n2) 186 { 187 // u: incoming direction 185 bool ApplyRefraction(MQuaternion &u, const TVector3 &n, const double &n1, const double &n2) 186 { 187 // From: https://stackoverflow.com/questions/29758545/howtofindrefractionvectorfromincomingvectorandsurfacenormal 188 // Note that as a default u is supposed to be normalized such that z=1! 189 190 // u: incoming direction (normalized!) 188 191 // n: normal vector of surface 189 192 // n2: refractive index of new(?) medium 190 193 // n1: refractive index of old(?) medium 191 194 195 // V_refraction = r*V_incedence + (rc  sqrt(1 r^2 (1c^2)))n 196 // r = n1/n2 197 // c = n dot V_incedence. 198 199 // The vector should be normalized already 200 // u.NormalizeVector(); 201 192 202 const double r = n2/n1; 193 203 const double c = n*u.fVectorPart; … … 195 205 const double rc = r*c; 196 206 197 const double R = 1  r*r + rc*rc; // = 1  r*r *(1c*c); 198 199 const double v = rc + sqrt(R<0 ? 0 : R); 200 201 u = r*u  n*v; 207 const double R = 1  r*r + rc*rc; // = 1  (r*r*(1c*c)); 208 209 // What is this? Total reflection? 210 if (R<0) 211 return false; 212 213 const double v = rc + sqrt(R); 214 215 u.fVectorPart = r*u.fVectorPart  v*n; 216 217 return true; 202 218 } 203 219 … … 274 290 // Apply refraction at lens entrance (change directional vector) 275 291 // FIXME: Surace roughness 276 ApplyRefraction(u, norm, 1, n); 292 if (!ApplyRefraction(u, norm, 1, n)) 293 return 1; 277 294 278 295 // Propagate ray until bottom of lens … … 285 302 // Normal surface (bottom of lens) 286 303 // FIXME: Surace roughness 287 ApplyRefraction(u, TVector3(0, 0, 1), n, 1); 304 if (!ApplyRefraction(u, TVector3(0, 0, 1), n, 1)) 305 return 1; 288 306 289 307 // To make this consistent with a mirror system,
Note: See TracChangeset
for help on using the changeset viewer.