comparison flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/DischargeTables.java @ 4226:cb9f22c3553f

DischargeTables: Added missing getWsForQ()
author Sascha L. Teichmann <teichmann@intevation.de>
date Tue, 23 Oct 2012 15:05:17 +0200
parents 1d9c9a3493ea
children dbe9b7d6b80b
comparison
equal deleted inserted replaced
4225:f4cee1a74605 4226:cb9f22c3553f
233 log.debug("Q(" + w + ") = " + Arrays.toString(result)); 233 log.debug("Q(" + w + ") = " + Arrays.toString(result));
234 } 234 }
235 235
236 return result; 236 return result;
237 } 237 }
238
239 public static double [] getWsForQ(double [][] values, double q) {
240
241 boolean debug = log.isDebugEnabled();
242
243 if (debug) {
244 log.debug("getWsForQ: W = " + q);
245 }
246
247 double [] qs = values[0];
248 double [] ws = values[1];
249
250 int N = Math.min(qs.length, ws.length);
251
252 if (N == 0) {
253 if (debug) {
254 log.debug("W(" + q + ") = []");
255 }
256 return new double [0];
257 }
258
259 TDoubleArrayList outWs = new TDoubleArrayList();
260
261 if (epsEquals(qs[0], q)) {
262 outWs.add(ws[0]);
263 }
264
265 for (int i = 1; i < N; ++i) {
266 if (epsEquals(qs[i], q)) {
267 outWs.add(ws[i]);
268 }
269 else if (between(qs[i-1], qs[i], q)) {
270 double w1 = ws[i-1];
271 double w2 = ws[i];
272 double q1 = qs[i-1];
273 double q2 = qs[i];
274
275 // w1 = m*q1 + b
276 // w2 = m*q2 + b
277 // w2 - w1 = m*(q2 - q1)
278 // m = (w2 - w1)/(q2 - q1) # q2 != q1
279 // b = w1 - m*q1
280 // q1 != q2
281
282 double m = (w2 - w1)/(q2 - q1);
283 double b = w1 - m*q1;
284 double w = q*m + b;
285
286 outWs.add(w);
287 }
288 }
289
290 double [] result = outWs.toNativeArray();
291
292 if (debug) {
293 log.debug("W(" + q + ") = " + Arrays.toString(result));
294 }
295
296 return result;
297 }
238 } 298 }
239 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 : 299 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org