// Transform_7p.java
// seven parameter transformation with differential rotation angles

public class Transform_7p
{
/*
 * X1, Y1, Z1 - starting cartesian co-ordinates
 * X2, Y2, Z2 - ending cartesian co-ordinates
 *
 * rX, rY, rZ - rotation angles of 3 dimensions in radians
 * tX, tY, tZ - translations of 3 dimensions
 * u - scale factor
 *
 */

public double X1, Y1, Z1;
public double X2, Y2, Z2;
protected double rX, rY, rZ, tX, tY, tZ, u;   // the 7-parameters

public Transform_7p(double p1, double p2, double p3,
                         double p4, double p5, double p6,
                         double p7)
{
   tX = p1;
   tY = p2;
   tZ = p3;
   rX = p4;
   rY = p5;
   rZ = p6;
   u = p7;
}

public void compute()
{
   X2 = X1 + u * X1 + rZ * Y1 - rY * Z1 + tX;
   Y2 = Y1 - rZ * X1 + u * Y1 + rX * Z1 + tY;
   Z2 = Z1 + rY * X1 - rX * Y1 + u * Z1 + tZ;
}
}  // end of Transform_7p.java
