view flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/FixingsColumn.java @ 2791:c9815016a3bb

Merged revisions 4536 via svnmerge from file:///home/clients/bsh/bsh-generischer-viewer/Material/SVN/flys-artifacts/trunk ........ r4536 | ingo | 2012-05-27 15:35:15 +0200 (So, 27 Mai 2012) | 1 line Added more checks in CrossSectionFactory.isNewst() to prevent IndexOutOfBoundsExceptions. ........ flys-artifacts/tags/2.7@4538 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Ingo Weinzierl <ingo.weinzierl@intevation.de>
date Sun, 27 May 2012 13:39:30 +0000
parents a441be7f1589
children fe987587ebc9
line wrap: on
line source
package de.intevation.flys.artifacts.model;

import de.intevation.flys.artifacts.math.Linear;

import java.util.Arrays;

import java.io.Serializable;

public class FixingsColumn
implements   Serializable
{
    protected double [] kms;
    protected double [] ws;

    protected QRangeTree qs;

    public FixingsColumn() {
    }

    public FixingsColumn(
        double []  kms,
        double []  ws,
        QRangeTree qs
    ) {
        this.kms = kms;
        this.ws  = ws;
        this.qs  = qs;
    }

    public boolean getW(double km, double [] w) {
        return getW(km, w, 0);
    }

    public boolean getW(double km, double [] w, int index) {

        if (kms.length == 0 || km < kms[0] || km > kms[kms.length-1]) {
            w[index] = Double.NaN;
            return true;
        }

        int idx = Arrays.binarySearch(kms, km);

        if (idx >= 0) {
            w[index] = ws[idx];
            return true;
        }

        idx = -idx - 1;

        w[index] = Linear.linear(km, kms[idx], kms[idx+1], ws[idx], ws[idx+1]);
        return false;
    }

    public double getQ(double km) {
        return qs.findQ(km);
    }
}
// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org