comparison flys-artifacts/src/main/java/de/intevation/flys/utils/DoubleUtil.java @ 1671:da872168a899

Added code to interpolate double values in a sorted array flys-artifacts/trunk@2883 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Sascha L. Teichmann <sascha.teichmann@intevation.de>
date Tue, 04 Oct 2011 15:23:31 +0000
parents 09c1292cf36d
children 0b6dac664bbb
comparison
equal deleted inserted replaced
1670:fc9719cddbc6 1671:da872168a899
1 package de.intevation.flys.utils; 1 package de.intevation.flys.utils;
2 2
3 import java.util.Arrays; 3 import java.util.Arrays;
4
5 import de.intevation.flys.artifacts.math.Linear;
4 6
5 7
6 public class DoubleUtil 8 public class DoubleUtil
7 { 9 {
8 public static final double DEFAULT_STEP_PRECISION = 1e6; 10 public static final double DEFAULT_STEP_PRECISION = 1e6;
51 lower += step; 53 lower += step;
52 } 54 }
53 55
54 return values; 56 return values;
55 } 57 }
58
59 public static final double interpolateSorted(
60 double [] xs,
61 double [] ys,
62 double x
63 ) {
64 int lo = 0, hi = xs.length-1;
65
66 int mid = -1;
67
68 while (lo <= hi) {
69 mid = (lo + hi) >> 1;
70 double mx = xs[mid];
71 if (x < mx) hi = mid - 1;
72 else if (x > mx) lo = mid + 1;
73 else return ys[mid];
74 }
75 if (mid < lo) {
76 return lo >= xs.length
77 ? Double.NaN
78 : Linear.linear(x, xs[mid], xs[mid+1], ys[mid], ys[mid+1]);
79 }
80 return hi < 0
81 ? Double.NaN
82 : Linear.linear(x, xs[mid-1], xs[mid], ys[mid-1], ys[mid]);
83 }
56 } 84 }
57 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 : 85 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org