summaryrefslogtreecommitdiff
path: root/java/src/org/singinst/uf/math/LinearTransform.java
blob: 42f5a9d493e75705db601f4dbc303890b4a3176c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
package org.singinst.uf.math;

import org.singinst.uf.presenter.LineBounds;

public class LinearTransform extends InvertableFunction {

	private final double scale;
	private final double offset;

	public LinearTransform(LineBounds from, LineBounds to) {
		scale = to.getLength() / from.getLength();
		offset = to.getFirst() - scale * from.getFirst();
		assert apply(from.getFirst()) == to.getFirst();
		assert apply(from.getSecond()) == to.getSecond();
	}

	@Override
	public final double apply(double x) {
		return scale * x + offset;
	}

	@Override
	public double invert(double y) {
		return (y - offset) / scale;
	}

}