Mercurial > dive4elements > river
comparison flys-artifacts/src/main/java/de/intevation/flys/artifacts/math/Linear.java @ 3318:dbe2f85bf160
merged flys-artifacts/2.8
author | Thomas Arendsen Hein <thomas@intevation.de> |
---|---|
date | Fri, 28 Sep 2012 12:14:35 +0200 |
parents | c09c9e05ecfa |
children | da1969b05292 |
comparison
equal
deleted
inserted
replaced
2987:98c7a46ec5ae | 3318:dbe2f85bf160 |
---|---|
1 package de.intevation.flys.artifacts.math; | |
2 | |
3 public final class Linear | |
4 implements Function | |
5 { | |
6 private double m; | |
7 private double b; | |
8 | |
9 public Linear( | |
10 double x1, double x2, | |
11 double y1, double y2 | |
12 ) { | |
13 // y1 = m*x1 + b | |
14 // y2 = m*x2 + b | |
15 // y2 - y1 = m*(x2 - x1) | |
16 // m = (y2 - y1)/(x2 - x1) # x2 != x1 | |
17 // b = y1 - m*x1 | |
18 | |
19 if (x1 == x2) { | |
20 m = 0; | |
21 b = 0.5*(y1 + y2); | |
22 } | |
23 else { | |
24 m = (y2 - y1)/(x2 - x1); | |
25 b = y1 - m*x1; | |
26 } | |
27 } | |
28 | |
29 public static final double linear( | |
30 double x, | |
31 double x1, double x2, | |
32 double y1, double y2 | |
33 ) { | |
34 // y1 = m*x1 + b | |
35 // y2 = m*x2 + b | |
36 // y2 - y1 = m*(x2 - x1) | |
37 // m = (y2 - y1)/(x2 - x1) # x2 != x1 | |
38 // b = y1 - m*x1 | |
39 | |
40 if (x1 == x2) { | |
41 return 0.5*(y1 + y2); | |
42 } | |
43 double m = (y2 - y1)/(x2 - x1); | |
44 double b = y1 - m*x1; | |
45 return x*m + b; | |
46 } | |
47 | |
48 @Override | |
49 public double value(double x) { | |
50 return m*x + b; | |
51 } | |
52 | |
53 public static final double factor(double x, double p1, double p2) { | |
54 // 0 = m*p1 + b <=> b = -m*p1 | |
55 // 1 = m*p2 + b | |
56 // 1 = m*(p2 - p1) | |
57 // m = 1/(p2 - p1) # p1 != p2 | |
58 // f(x) = x/(p2-p1) - p1/(p2-p1) <=> (x-p1)/(p2-p1) | |
59 | |
60 return p1 == p2 ? 0.0 : (x-p1)/(p2-p1); | |
61 } | |
62 | |
63 public static final double weight(double factor, double a, double b) { | |
64 //return (1.0-factor)*a + factor*b; | |
65 return a + factor*(b-a); | |
66 } | |
67 } | |
68 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 : |