Mercurial > dive4elements > river
view flys-artifacts/src/main/java/de/intevation/flys/artifacts/math/LinearRemap.java @ 444:932a5e3c7fa1
ISSUE-72 Repaired broken XPath expression in MainValuesService to extract start and end kilometer.
flys-artifacts/trunk@1936 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author | Ingo Weinzierl <ingo.weinzierl@intevation.de> |
---|---|
date | Tue, 17 May 2011 11:53:02 +0000 |
parents | 909196be11a0 |
children | 343f248e4c8c |
line wrap: on
line source
package de.intevation.flys.artifacts.math; public class LinearRemap { public static class Segment { protected Segment next; protected double from; protected double to; protected double m; protected double b; public Segment() { } public Segment( double from, double to, double m, double b, Segment next ) { this.from = from; this.to = to; this.m = m; this.b = b; } public double eval(double x) { return m*x + b; } } // class Segment protected Segment head; public LinearRemap() { } public void add( double from, double to, double x1, double y1, double x2, double y2 ) { // y1 = m*x1 + b <=> b = y1 - m*x1 // y2 = m*x2 + b // y2 - y1 = m*(x2 - x1) // m = (y2 - y1)/(x2 - x1) double m, b; if (x2 == x1) { m = 0.0; b = 0.5*(y2 + y1); } else { m = (y2 - y1)/(x2 - x1); b = y1 - m*x1; } head = new Segment(from, to, m, b, head); } public double eval(double pos, double x) { Segment current = head; while (current != null) { if (pos >= current.from && pos <= current.to) { return current.eval(x); } current = current.next; } return Double.NaN; } } // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :