Mercurial > dive4elements > river
comparison flys-artifacts/src/main/java/de/intevation/flys/utils/DoubleUtil.java @ 5379:61bf64b102bc mapgenfix
Merge with default branch
author | Christian Lins <christian.lins@intevation.de> |
---|---|
date | Fri, 22 Mar 2013 11:25:54 +0100 |
parents | 240ff7aeb6de |
children |
comparison
equal
deleted
inserted
replaced
5175:cfc5540a4eec | 5379:61bf64b102bc |
---|---|
14 /** Private logger. */ | 14 /** Private logger. */ |
15 private static Logger log = Logger.getLogger(DoubleUtil.class); | 15 private static Logger log = Logger.getLogger(DoubleUtil.class); |
16 | 16 |
17 public static final double DEFAULT_STEP_PRECISION = 1e6; | 17 public static final double DEFAULT_STEP_PRECISION = 1e6; |
18 | 18 |
19 /** EPSILON for comparison of double precision values. */ | |
20 public static final double EPSILON = 1e-4; | |
21 | |
19 private DoubleUtil() { | 22 private DoubleUtil() { |
20 } | 23 } |
21 | 24 |
22 public static final double [] explode(double from, double to, double step) { | 25 public static final double [] explode(double from, double to, double step) { |
23 return explode(from, to, step, DEFAULT_STEP_PRECISION); | 26 return explode(from, to, step, DEFAULT_STEP_PRECISION); |
29 | 32 |
30 public static final double round(double x) { | 33 public static final double round(double x) { |
31 return Math.round(x * DEFAULT_STEP_PRECISION)/DEFAULT_STEP_PRECISION; | 34 return Math.round(x * DEFAULT_STEP_PRECISION)/DEFAULT_STEP_PRECISION; |
32 } | 35 } |
33 | 36 |
37 /** | |
38 * Returns array with values from parameter from to to with given step width. | |
39 * from and to are included. | |
40 */ | |
34 public static final double [] explode( | 41 public static final double [] explode( |
35 double from, | 42 double from, |
36 double to, | 43 double to, |
37 double step, | 44 double step, |
38 double precision | 45 double precision |
54 } | 61 } |
55 | 62 |
56 double max = Math.max(from, to); | 63 double max = Math.max(from, to); |
57 | 64 |
58 for (int idx = 0; idx < num; idx++) { | 65 for (int idx = 0; idx < num; idx++) { |
59 if (lower > max) { | 66 if (lower - max > EPSILON) { |
60 return Arrays.copyOfRange(values, 0, idx); | 67 return Arrays.copyOfRange(values, 0, idx); |
61 } | 68 } |
62 | 69 |
63 values[idx] = round(lower, precision); | 70 values[idx] = round(lower, precision); |
64 lower += step; | 71 lower += step; |
175 double from = Double.parseDouble(parts[0].trim()); | 182 double from = Double.parseDouble(parts[0].trim()); |
176 double to = Double.parseDouble(parts[1].trim()); | 183 double to = Double.parseDouble(parts[1].trim()); |
177 | 184 |
178 vs.resetQuick(); | 185 vs.resetQuick(); |
179 | 186 |
180 for (String valueStr: parts[2].split(",")) { | 187 for (String valueStr: parts[3].split(",")) { |
181 vs.add(round(Double.parseDouble(valueStr.trim()))); | 188 vs.add(round(Double.parseDouble(valueStr.trim()))); |
182 } | 189 } |
183 | 190 |
184 callback.newSegment(from, to, vs.toNativeArray()); | 191 callback.newSegment(from, to, vs.toNativeArray()); |
185 } | 192 } |