Mercurial > dive4elements > river
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 : |