//constructor public AngleDerivation(double par_mirr_angle_with_z_degrees, double fresnel_normal_with_z_degrees, double refractive_index) { //debug storage: this.debug_mirr_angle_deg = par_mirr_angle_with_z_degrees; this.debug_fresnel_angle_deg = fresnel_normal_with_z_degrees; //storing relevant variables this.refractive_index = refractive_index; this.fresnel_norm_z = Math.Cos(AngleDerivation.getRadians(fresnel_normal_with_z_degrees)); this.par_mirr_z = Math.Cos(AngleDerivation.getRadians(par_mirr_angle_with_z_degrees)); }
public void setIncomingLightAngle(double angle_with_z_axis, double angle_with_x_axis) { double opx, opy, opz, xangle, zangle; Scientrace.Vector op; zangle = AngleDerivation.getRadians(angle_with_z_axis); xangle = AngleDerivation.getRadians(angle_with_x_axis); opx = Math.Sin(zangle) * Math.Cos(xangle); opy = Math.Sin(zangle) * Math.Sin(xangle); opz = Math.Sqrt(1 - (opy * opy) - (opx * opx)); op = new Scientrace.Vector(opx, opy, opz); this.setIncomingLightVector(op); }
public void setOutputAngles(double nxo, double nyo, double uxo, double uyo) { double nx, ny, ux, uy; double rn = Math.Sqrt((nxo * nxo) + (nyo * nyo)); double ru = Math.Sqrt((uxo * uxo) + (uyo * uyo)); nx = nxo / rn; ny = nyo / rn; ux = uxo / ru; uy = uyo / ru; this.nrad = AngleDerivation.getRadians(nx, ny); this.urad = AngleDerivation.getRadians(ux, uy); this.removeNans(); //Console.WriteLine(this.nrad+"AFTER"); }
public void getnyuy(ref double ny, ref double uy, double ra, double rb, double A, double B, double py, double c) { double s = this.refractive_index; double nyp, nym; double uyp, uym; nyp = Math.Sqrt((ra * ra) - (A * A)); //positive squareroot nym = -Math.Sqrt((ra * ra) - (A * A)); //negative " uyp = Math.Sqrt((rb * rb) - (B * B)); uym = -Math.Sqrt((rb * rb) - (B * B)); if (AngleDerivation.closeEnough((uyp - (s * py)) / (nyp), c)) { ny = nyp; uy = uyp; return; } if (AngleDerivation.closeEnough((uyp - (s * py)) / (nym), c)) { ny = nym; uy = uyp; return; } if (AngleDerivation.closeEnough((uym - (s * py)) / (nyp), c)) { ny = nyp; uy = uym; return; } if (AngleDerivation.closeEnough((uym - (s * py)) / (nym), c)) { ny = nym; uy = uym; return; } }
public void printAngles(double nxo, double nyo, double uxo, double uyo) { double nx, ny, ux, uy; double rn = Math.Sqrt((nxo * nxo) + (nyo * nyo)); double ru = Math.Sqrt((uxo * uxo) + (uyo * uyo)); nx = nxo / rn; ny = nyo / rn; ux = uxo / ru; uy = uyo / ru; //Console.WriteLine ("\n\n nrad = " + this.getRadians (nx, ny) + "rad, n = {" + nxo + ";" + nyo + "; " + Math.Sqrt (1.0 - rn * rn) + "}" + "\n urad = " + this.getRadians (ux, uy) + "rad, u = {" + uxo + ";" + uyo + "; " + Math.Sqrt (1.0 - ru * ru) + "}" + "\n diff (deg): " + ((this.getDAngle (nx, ny) - this.getDAngle (ux, uy)))); Console.WriteLine("\n\n nrad = " + this.nrad + "rad, n = {" + nxo + ";" + nyo + "; " + Math.Sqrt(1.0 - rn * rn) + "}" + "\n urad = " + this.urad + "rad, u = {" + uxo + ";" + uyo + "; " + Math.Sqrt(1.0 - ru * ru) + "}" + "\n diff (deg): " + ((AngleDerivation.getDAngle(nx, ny) - AngleDerivation.getDAngle(ux, uy)))); }