Package wsh.opt

Class CoordinateTransform


  • public class CoordinateTransform
    extends java.lang.Object
    Find a best linear combination of input coordinates to fit output coordinates. Finds a_io (a with subscripts i and o) to best approximate the linear transform.
     out_o = sum_i ( a_io * in_i )
     
    where in_i are input coordinates,
    out_o are output coordinates,
    i is the index of each input dimension,
    and o is the index of each output dimension.

    The optimum coefficients minimize this least squares error:
     sum_oj [ sum_i ( a_io * in_ij ) - out_oj ]^2
     
    where in_ij is an input array of different coordinates,
    out_oj is an output array of corresponding coordinates,
    and j is the index of pairs of coordinates to be fit in a least-squares sense.

    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 Summary

      Constructors 
      Constructor Description
      CoordinateTransform​(int dimensionOut, int dimensionIn)
      Constructor sets number of input and output coordinates.
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method 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.
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Constructor Detail

      • CoordinateTransform

        public CoordinateTransform​(int dimensionOut,
                                   int dimensionIn)
        Constructor sets number of input and output coordinates.
        Parameters:
        dimensionOut - Number of output coordinates.
        dimensionIn - Number of input coordinates.
    • Method Detail

      • add

        public 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. To allow translation, include a constant 1 as an input coordinate.
        Parameters:
        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.
      • get

        public double[] get​(double[] in)
        For a given set of input coordinates, return the linearly predicted output coordinates.
        Parameters:
        in - A set of input coordinates
        Returns:
        A computed set of output coordinates.