private double SkyChanelAtPoint(SkylightDistCoef skyCoef, double theta, double phi) { var gamma = Math.Acos( Math.Cos(thetaSun) * Math.Cos(theta) + Math.Sin(thetaSun) * Math.Sin(theta) * Math.Cos(phiSun - phi)); return(skyCoef.Zenith * CurlyF(skyCoef, theta, gamma) / CurlyF(skyCoef, 0, thetaSun)); }
public AllSkylightDistCoef(double turbidity, double thetaSun) { var t1 = thetaSun; var t2 = t1 * t1; var t3 = t1 * t2; double Yz = (4.0453 * turbidity - 4.9710) * Math.Tan((4.0 / 9 - turbidity / 120) * (Math.PI - 2 * thetaSun)) - 0.2155 * turbidity + 2.4192; double Y0 = (4.0453 * turbidity - 4.9710) * Math.Tan((4.0 / 9 - turbidity / 120) * (Math.PI)) - 0.2155 * turbidity + 2.4192; double YZen = Yz / Y0; double xZen = (+0.00166 * t3 - 0.00375 * t2 + 0.00209 * t1 + 0.00000) * turbidity * turbidity + (-0.02903 * t3 + 0.06377 * t2 - 0.03202 * t1 + 0.00394) * turbidity + (+0.11693 * t3 - 0.21196 * t2 + 0.06052 * t1 + 0.25886); double yZen = (+0.00275 * t3 - 0.00610 * t2 + 0.00317 * t1 + 0.00000) * turbidity * turbidity + (-0.04214 * t3 + 0.08970 * t2 - 0.04153 * t1 + 0.00516) * turbidity + (+0.15346 * t3 - 0.26756 * t2 + 0.06670 * t1 + 0.26688); Y = new SkylightDistCoef() { A = +0.1787 * turbidity - 1.4630, B = -0.3554 * turbidity + 0.4275, C = -0.0227 * turbidity + 5.3251, D = +0.1206 * turbidity - 2.5771, E = -0.0670 * turbidity + 0.3703, Zenith = YZen, }; _x = new SkylightDistCoef() { A = -0.0193 * turbidity - 0.2592, B = -0.0665 * turbidity + 0.0008, C = -0.0004 * turbidity + 0.2125, D = -0.0641 * turbidity - 0.8989, E = -0.0033 * turbidity + 0.0452, Zenith = xZen, }; _y = new SkylightDistCoef() { A = -0.0167 * turbidity - 0.2608, B = -0.0950 * turbidity + 0.0092, C = -0.0079 * turbidity + 0.2102, D = -0.0441 * turbidity - 1.6537, E = -0.0109 * turbidity + 0.0529, Zenith = yZen, }; }
private static double CurlyF(SkylightDistCoef skyCoef, double theta, double gamma) { return ((1 + skyCoef.A * Math.Exp(skyCoef.B / Math.Cos(theta))) * (1 + skyCoef.C * Math.Exp(skyCoef.D * gamma) + skyCoef.E * Math.Cos(gamma) * Math.Cos(gamma))); }