Mercurial > dive4elements > river
view artifacts/src/main/java/org/dive4elements/river/artifacts/model/fixings/FixingColumnData.java @ 9646:0380717105ba
Implemented alternative fitting strategy for Log-Linear function.
author | Gernot Belger <g.belger@bjoernsen.de> |
---|---|
date | Mon, 02 Dec 2019 17:56:15 +0100 |
parents | 9744ce3c3853 |
children |
line wrap: on
line source
/* Copyright (C) 2011, 2012, 2013 by Bundesanstalt für Gewässerkunde * Software engineering by Intevation GmbH * * This file is Free Software under the GNU AGPL (>=v3) * and comes with ABSOLUTELY NO WARRANTY! Check out the * documentation coming with Dive4Elements River for details. */ package org.dive4elements.river.artifacts.model.fixings; import java.io.Serializable; import java.util.Arrays; import org.dive4elements.river.artifacts.math.Linear; import org.dive4elements.river.artifacts.model.QRangeTree; public class FixingColumnData implements Serializable { private static final long serialVersionUID = 1L; private double[] kms; private double[] ws; private QRangeTree qs; public FixingColumnData() { } public FixingColumnData(final double[] kms, final double[] ws, final QRangeTree qs) { this.kms = kms; this.ws = ws; this.qs = qs; } public boolean getW(final double km, final double[] w) { return getW(km, w, 0); } public boolean getW(final double km, final double[] w, final int index) { if (this.kms.length == 0 || km < this.kms[0] || km > this.kms[this.kms.length - 1]) { w[index] = Double.NaN; return true; } int idx = Arrays.binarySearch(this.kms, km); if (idx >= 0) { w[index] = this.ws[idx]; return true; } idx = -idx - 1; w[index] = Linear.linear(km, this.kms[idx - 1], this.kms[idx], this.ws[idx - 1], this.ws[idx]); return false; } public double getQ(final double km) { return this.qs.findQ(km); } public QRangeTree getQRanges() { return this.qs; } }