# HG changeset patch # User Felix Wolfsteller # Date 1348307701 0 # Node ID 0623cdf32b3831f0379086ac37fa4cbdec65bc2b # Parent da48e33f42412dfe87ba0ca123f78c83dcc681b5 Document issue880 flys-artifacts/trunk@5568 c6561f87-3c4e-4783-a992-168aeb5c3f6f diff -r da48e33f4241 -r 0623cdf32b38 flys-artifacts/ChangeLog --- a/flys-artifacts/ChangeLog Sat Sep 22 07:47:12 2012 +0000 +++ b/flys-artifacts/ChangeLog Sat Sep 22 09:55:01 2012 +0000 @@ -1,3 +1,10 @@ +2012-09-22 Felix Wolfsteller + + Document issue880 (extrapolation of wkms). + + * src/main/java/de/intevation/flys/artifacts/StaticWKmsArtifact.java: + Do not extrapolate, mention further issues with the code. + 2012-09-22 Sascha L. Teichmann * src/main/java/de/intevation/flys/artifacts/model/minfo/BedDiffYearResult.java, diff -r da48e33f4241 -r 0623cdf32b38 flys-artifacts/src/main/java/de/intevation/flys/artifacts/StaticWKmsArtifact.java --- a/flys-artifacts/src/main/java/de/intevation/flys/artifacts/StaticWKmsArtifact.java Sat Sep 22 07:47:12 2012 +0000 +++ b/flys-artifacts/src/main/java/de/intevation/flys/artifacts/StaticWKmsArtifact.java Sat Sep 22 09:55:01 2012 +0000 @@ -303,12 +303,36 @@ * @return W in wkms that is closer to km than to next and prev, or Double.NaN. */ public double getWAtCloseKm(WKms wkms, double km, double next, double prev) { + // TODO symbolic "-1" pr next/prev is a bad idea (tm), as we compare + // distances to these values later. + // TODO issue888 + int size = wkms.size(); for (int i = 0; i < size; i++) { double wkmsKm = wkms.getKm(i); double dist = Distance.distance(wkmsKm, km); - if ((prev == -1d || dist <= Distance.distance(wkmsKm, prev)) - && (next == -1d || dist <= Distance.distance(wkmsKm, next))) { + if (dist == 0d) { + return wkms.getW(i); + } + + // Problematic Cases: + // X == km , | and | == prev and next, (?) == wkmsKm + // + // Standard case: + // ----------|----X-----|------- + // (1) (2) (3) (4) + // + // With prev==-1 + // -1 ------X-------|------ + // (5) (6) (7) + // + // With next==-1 + // + // ---|-----X----- -1 + // (8) (9) (10) + + if (dist <= Distance.distance(wkmsKm, prev) + && dist <= Distance.distance(wkmsKm, next)) { return wkms.getW(i); } }