Mercurial > dive4elements > river
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 /** |