comparison artifacts/src/main/java/org/dive4elements/river/artifacts/model/MainValuesQFacet.java @ 7494:4de4b19b6be6

Fixed half broken interpolation code for lines to 'Dauerlinie'.
author Sascha L. Teichmann <teichmann@intevation.de>
date Fri, 01 Nov 2013 13:25:54 +0100
parents 3e9961dcbf9a
children e4606eae8ea5
comparison
equal deleted inserted replaced
7493:8cdc86327149 7494:4de4b19b6be6
18 import org.dive4elements.artifacts.DataProvider; 18 import org.dive4elements.artifacts.DataProvider;
19 19
20 import org.dive4elements.artifactdatabase.state.DefaultFacet; 20 import org.dive4elements.artifactdatabase.state.DefaultFacet;
21 21
22 import org.dive4elements.river.artifacts.MainValuesArtifact; 22 import org.dive4elements.river.artifacts.MainValuesArtifact;
23 import org.dive4elements.river.artifacts.math.Linear;
24 import org.dive4elements.river.jfree.RiverAnnotation; 23 import org.dive4elements.river.jfree.RiverAnnotation;
25 import org.dive4elements.river.jfree.StickyAxisAnnotation; 24 import org.dive4elements.river.jfree.StickyAxisAnnotation;
26 25
27 import org.dive4elements.river.exports.DurationCurveGenerator; 26 import org.dive4elements.river.exports.DurationCurveGenerator;
28 import org.dive4elements.river.exports.fixings.FixChartGenerator; 27 import org.dive4elements.river.exports.fixings.FixChartGenerator;
49 this.name = name; 48 this.name = name;
50 this.index = 0; 49 this.index = 0;
51 this.isAtGauge = atGauge; 50 this.isAtGauge = atGauge;
52 } 51 }
53 52
54
55 /** 53 /**
56 * Set the hit-point in Q where a line drawn from the axis would hit the 54 * Set the hit-point in Q where a line drawn from the axis would hit the
57 * curve in WQDay (if hit). 55 * curve in WQDay (if hit).
58 * Employ linear interpolation. 56 * Employ linear interpolation.
59 */ 57 */
60 protected static void setHitPoint(WQDay wqday, StickyAxisAnnotation annotation) { 58 protected static void setHitPoint(WQDay wqday, StickyAxisAnnotation annotation) {
61 59
62 if (wqday.size() == 0) { 60 float q = annotation.getPos();
63 return; 61 Double day = wqday.interpolateDayByQ(q);
62
63 if (day != null) {
64 annotation.setHitPoint(day.floatValue());
64 } 65 }
65 66 else if (logger.isDebugEnabled()) {
66 int idx = 0; 67 logger.debug("StickyAnnotation does not hit wqday curve: " + q);
67 float q = annotation.getPos();
68 boolean qIncreases = wqday.getQ(0) < wqday.getQ(wqday.size()-1);
69 if (qIncreases) {
70 while (idx < wqday.size() && wqday.getQ(idx) < q) {
71 idx++;
72 }
73 }
74 else {
75 idx = wqday.size() -1;
76 while (idx > 0 && wqday.getQ(idx) > q) {
77 idx--;
78 }
79 }
80
81 double day = 0d;
82 int mod = (qIncreases) ? -1 : +1;
83 if (idx != 0 && idx <= wqday.size()-1) {
84 day = Linear.linear(q, wqday.getQ(idx +mod), wqday.getQ(idx),
85 wqday.getDay(idx+mod), wqday.getDay(idx));
86 annotation.setHitPoint((float)day);
87 }
88 else {
89 logger.debug("StickyAnnotation does not hit wqday curve");
90 } 68 }
91 } 69 }
92 70
93 71
94 /** 72 /**

http://dive4elements.wald.intevation.org