123 double solar_elevation)
125 const double *elev_matrix;
127 int int_turbidity =
int(turbidity);
128 double turbidity_rem = turbidity -
double(int_turbidity);
130 solar_elevation =
pow(solar_elevation / (
MATH_PI / 2.0), (1.0 / 3.0));
134 elev_matrix = dataset + (9 * 6 * (int_turbidity - 1));
136 for (
uint i = 0; i < 9; ++i) {
139 (1.0 - albedo) * (1.0 - turbidity_rem) *
140 (
pow(1.0 - solar_elevation, 5.0) * elev_matrix[i] +
141 5.0 *
pow(1.0 - solar_elevation, 4.0) * solar_elevation * elev_matrix[i + 9] +
142 10.0 *
pow(1.0 - solar_elevation, 3.0) *
pow(solar_elevation, 2.0) * elev_matrix[i + 18] +
143 10.0 *
pow(1.0 - solar_elevation, 2.0) *
pow(solar_elevation, 3.0) * elev_matrix[i + 27] +
144 5.0 * (1.0 - solar_elevation) *
pow(solar_elevation, 4.0) * elev_matrix[i + 36] +
145 pow(solar_elevation, 5.0) * elev_matrix[i + 45]);
149 elev_matrix = dataset + (9 * 6 * 10 + 9 * 6 * (int_turbidity - 1));
150 for (
uint i = 0; i < 9; ++i) {
153 (albedo) * (1.0 - turbidity_rem) *
154 (
pow(1.0 - solar_elevation, 5.0) * elev_matrix[i] +
155 5.0 *
pow(1.0 - solar_elevation, 4.0) * solar_elevation * elev_matrix[i + 9] +
156 10.0 *
pow(1.0 - solar_elevation, 3.0) *
pow(solar_elevation, 2.0) * elev_matrix[i + 18] +
157 10.0 *
pow(1.0 - solar_elevation, 2.0) *
pow(solar_elevation, 3.0) * elev_matrix[i + 27] +
158 5.0 * (1.0 - solar_elevation) *
pow(solar_elevation, 4.0) * elev_matrix[i + 36] +
159 pow(solar_elevation, 5.0) * elev_matrix[i + 45]);
162 if (int_turbidity == 10) {
167 elev_matrix = dataset + (9 * 6 * (int_turbidity));
168 for (
uint i = 0; i < 9; ++i) {
171 (1.0 - albedo) * (turbidity_rem) *
172 (
pow(1.0 - solar_elevation, 5.0) * elev_matrix[i] +
173 5.0 *
pow(1.0 - solar_elevation, 4.0) * solar_elevation * elev_matrix[i + 9] +
174 10.0 *
pow(1.0 - solar_elevation, 3.0) *
pow(solar_elevation, 2.0) * elev_matrix[i + 18] +
175 10.0 *
pow(1.0 - solar_elevation, 2.0) *
pow(solar_elevation, 3.0) * elev_matrix[i + 27] +
176 5.0 * (1.0 - solar_elevation) *
pow(solar_elevation, 4.0) * elev_matrix[i + 36] +
177 pow(solar_elevation, 5.0) * elev_matrix[i + 45]);
181 elev_matrix = dataset + (9 * 6 * 10 + 9 * 6 * (int_turbidity));
182 for (
uint i = 0; i < 9; ++i) {
185 (albedo) * (turbidity_rem) *
186 (
pow(1.0 - solar_elevation, 5.0) * elev_matrix[i] +
187 5.0 *
pow(1.0 - solar_elevation, 4.0) * solar_elevation * elev_matrix[i + 9] +
188 10.0 *
pow(1.0 - solar_elevation, 3.0) *
pow(solar_elevation, 2.0) * elev_matrix[i + 18] +
189 10.0 *
pow(1.0 - solar_elevation, 2.0) *
pow(solar_elevation, 3.0) * elev_matrix[i + 27] +
190 5.0 * (1.0 - solar_elevation) *
pow(solar_elevation, 4.0) * elev_matrix[i + 36] +
191 pow(solar_elevation, 5.0) * elev_matrix[i + 45]);
198 double solar_elevation)
200 const double *elev_matrix;
202 int int_turbidity =
int(turbidity);
203 double turbidity_rem = turbidity -
double(int_turbidity);
205 solar_elevation =
pow(solar_elevation / (
MATH_PI / 2.0), (1.0 / 3.0));
208 elev_matrix = dataset + (6 * (int_turbidity - 1));
210 res = (1.0 - albedo) * (1.0 - turbidity_rem) *
211 (
pow(1.0 - solar_elevation, 5.0) * elev_matrix[0] +
212 5.0 *
pow(1.0 - solar_elevation, 4.0) * solar_elevation * elev_matrix[1] +
213 10.0 *
pow(1.0 - solar_elevation, 3.0) *
pow(solar_elevation, 2.0) * elev_matrix[2] +
214 10.0 *
pow(1.0 - solar_elevation, 2.0) *
pow(solar_elevation, 3.0) * elev_matrix[3] +
215 5.0 * (1.0 - solar_elevation) *
pow(solar_elevation, 4.0) * elev_matrix[4] +
216 pow(solar_elevation, 5.0) * elev_matrix[5]);
219 elev_matrix = dataset + (6 * 10 + 6 * (int_turbidity - 1));
221 res += (albedo) * (1.0 - turbidity_rem) *
222 (
pow(1.0 - solar_elevation, 5.0) * elev_matrix[0] +
223 5.0 *
pow(1.0 - solar_elevation, 4.0) * solar_elevation * elev_matrix[1] +
224 10.0 *
pow(1.0 - solar_elevation, 3.0) *
pow(solar_elevation, 2.0) * elev_matrix[2] +
225 10.0 *
pow(1.0 - solar_elevation, 2.0) *
pow(solar_elevation, 3.0) * elev_matrix[3] +
226 5.0 * (1.0 - solar_elevation) *
pow(solar_elevation, 4.0) * elev_matrix[4] +
227 pow(solar_elevation, 5.0) * elev_matrix[5]);
228 if (int_turbidity == 10) {
233 elev_matrix = dataset + (6 * (int_turbidity));
235 res += (1.0 - albedo) * (turbidity_rem) *
236 (
pow(1.0 - solar_elevation, 5.0) * elev_matrix[0] +
237 5.0 *
pow(1.0 - solar_elevation, 4.0) * solar_elevation * elev_matrix[1] +
238 10.0 *
pow(1.0 - solar_elevation, 3.0) *
pow(solar_elevation, 2.0) * elev_matrix[2] +
239 10.0 *
pow(1.0 - solar_elevation, 2.0) *
pow(solar_elevation, 3.0) * elev_matrix[3] +
240 5.0 * (1.0 - solar_elevation) *
pow(solar_elevation, 4.0) * elev_matrix[4] +
241 pow(solar_elevation, 5.0) * elev_matrix[5]);
244 elev_matrix = dataset + (6 * 10 + 6 * (int_turbidity));
246 res += (albedo) * (turbidity_rem) *
247 (
pow(1.0 - solar_elevation, 5.0) * elev_matrix[0] +
248 5.0 *
pow(1.0 - solar_elevation, 4.0) * solar_elevation * elev_matrix[1] +
249 10.0 *
pow(1.0 - solar_elevation, 3.0) *
pow(solar_elevation, 2.0) * elev_matrix[2] +
250 10.0 *
pow(1.0 - solar_elevation, 2.0) *
pow(solar_elevation, 3.0) * elev_matrix[3] +
251 5.0 * (1.0 - solar_elevation) *
pow(solar_elevation, 4.0) * elev_matrix[4] +
252 pow(solar_elevation, 5.0) * elev_matrix[5]);