public class CoordinateTransform
extends java.lang.Object
out_o = sum_i ( a_io * in_i )where in_i are input coordinates,
The optimum coefficients minimize this least squares error:
sum_oj [ sum_i ( a_io * in_ij ) - out_oj ]^2where in_ij is an input array of different coordinates,
Normal equations (indexed by k) are solved independently for each o:
sum_ij ( in_kj * in_ij * a_io ) = sum_j ( in_kj * out_oj )The Hessian is
H = sum_j ( in_kj * in_ij )
and the gradient b = - sum_j ( in_kj * out_oj )
The solution is undamped and may not behave as you want for degenerate solutions.
If the linear transform needs a translation shift, then include a constant as one of the input coordinates.
Constructor and Description |
---|
CoordinateTransform(int dimensionOut,
int dimensionIn)
Constructor sets number of input and output coordinates.
|
Modifier and Type | Method and Description |
---|---|
void |
add(double[] out,
double[] in)
Add an observation of a set of input and output coordinates
You should add enough of these to determine (or overdetermine)
a unique linear mapping.
|
double[] |
get(double[] in)
For a given set of input coordinates,
return the linearly predicted output coordinates.
|
public CoordinateTransform(int dimensionOut, int dimensionIn)
dimensionOut
- Number of output coordinates.dimensionIn
- Number of input coordinates.public void add(double[] out, double[] in)
out
- A set of observed output coordinates
with an unknown linear relationship to input coordinates.in
- A set of observed input coordinates
that should be linearly combined to calculate each of the
output coordinates.
To allow translation, include a constant 1.public double[] get(double[] in)
in
- A set of input coordinates