teichmann@5831: package org.dive4elements.river.artifacts.model; sascha@2610: teichmann@5831: import org.dive4elements.river.artifacts.math.Linear; sascha@2610: sascha@2610: import java.util.Arrays; sascha@2610: sascha@2610: import java.io.Serializable; sascha@2610: sascha@2610: public class FixingsColumn sascha@2610: implements Serializable sascha@2610: { sascha@2610: protected double [] kms; sascha@2610: protected double [] ws; sascha@2610: sascha@2610: protected QRangeTree qs; sascha@2610: sascha@2610: public FixingsColumn() { sascha@2610: } sascha@2610: sascha@2610: public FixingsColumn( sascha@2619: double [] kms, sascha@2619: double [] ws, sascha@2619: QRangeTree qs sascha@2610: ) { sascha@2619: this.kms = kms; sascha@2619: this.ws = ws; sascha@2619: this.qs = qs; sascha@2610: } sascha@2610: sascha@2615: public boolean getW(double km, double [] w) { sascha@2729: return getW(km, w, 0); sascha@2729: } sascha@2729: sascha@2729: public boolean getW(double km, double [] w, int index) { sascha@2610: sascha@2619: if (kms.length == 0 || km < kms[0] || km > kms[kms.length-1]) { sascha@2729: w[index] = Double.NaN; sascha@2615: return true; sascha@2610: } sascha@2610: sascha@2610: int idx = Arrays.binarySearch(kms, km); sascha@2610: sascha@2615: if (idx >= 0) { sascha@2729: w[index] = ws[idx]; sascha@2615: return true; sascha@2615: } sascha@2610: sascha@2610: idx = -idx - 1; sascha@2610: ingo@2792: w[index] = Linear.linear(km, kms[idx-1], kms[idx], ws[idx-1], ws[idx]); sascha@2615: return false; sascha@2610: } sascha@2610: sascha@2610: public double getQ(double km) { sascha@2610: return qs.findQ(km); sascha@2610: } ingo@2792: ingo@2792: public QRangeTree getQRanges() { ingo@2792: return qs; ingo@2792: } sascha@2610: } sascha@2610: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :