@Override final public AffineTransform3D concatenate( final AffineGet affine ) { assert affine.numSourceDimensions() >= 3: "Only >=3d affine transformations can be concatenated to a 3d affine transformation."; a.concatenate( affine.getRowPackedCopy() ); invert(); updateDs(); inverse.updateDs(); return this; }
@Override final public AffineTransform3D preConcatenate( final AffineGet affine ) { assert affine.numSourceDimensions() == 3: "Only 3d affine transformations can be preconcatenated to a 3d affine transformation."; a.preConcatenate( affine.getRowPackedCopy() ); invert(); updateDs(); inverse.updateDs(); return this; }
public void set( final AffineGet affine ) { assert n == affine.numSourceDimensions(): "Dimensions do not match."; for ( int r = 0; r < n; ++r ) { for ( int c = 0; c < n; ++c ) a.set( r, c, affine.get( r, c ) ); t[ r ] = affine.get( r, n ); } updateDs(); invert(); inverse.updateDs(); }
@Override final public AffineTransform2D preConcatenate( final AffineGet affine ) { assert affine.numSourceDimensions() >= 2: "Only >=2d affine transformations can be pre-concatenated to a 2d affine transformation."; final double am00 = affine.get( 0, 0 ); final double am01 = affine.get( 0, 1 ); final double am02 = affine.get( 0, 2 ); final double am10 = affine.get( 1, 0 ); final double am11 = affine.get( 1, 1 ); final double am12 = affine.get( 1, 2 ); final double a00 = am00 * a.m00 + am01 * a.m10; final double a01 = am00 * a.m01 + am01 * a.m11; final double a02 = am00 * a.m02 + am01 * a.m12 + am02; final double a10 = am10 * a.m00 + am11 * a.m10; final double a11 = am10 * a.m01 + am11 * a.m11; final double a12 = am10 * a.m02 + am11 * a.m12 + am12; a.m00 = a00; a.m01 = a01; a.m02 = a02; a.m10 = a10; a.m11 = a11; a.m12 = a12; invert(); updateDs(); inverse.updateDs(); return this; }
@Override final public AffineTransform2D concatenate( final AffineGet affine ) { assert affine.numSourceDimensions() >= 2: "Only >=2d affine transformations can be concatenated to a 2d affine transformation."; final double am00 = affine.get( 0, 0 ); final double am01 = affine.get( 0, 1 ); final double am02 = affine.get( 0, 2 ); final double am10 = affine.get( 1, 0 ); final double am11 = affine.get( 1, 1 ); final double am12 = affine.get( 1, 2 ); final double a00 = a.m00 * am00 + a.m01 * am10; final double a01 = a.m00 * am01 + a.m01 * am11; final double a02 = a.m00 * am02 + a.m01 * am12 + a.m02; final double a10 = a.m10 * am00 + a.m11 * am10; final double a11 = a.m10 * am01 + a.m11 * am11; final double a12 = a.m10 * am02 + a.m11 * am12 + a.m12; a.m00 = a00; a.m01 = a01; a.m02 = a02; a.m10 = a10; a.m11 = a11; a.m12 = a12; invert(); updateDs(); inverse.updateDs(); return this; }
@Override public AffineTransform concatenate( final AffineGet affine ) { assert affine.numSourceDimensions() == n: "Dimensions do not match."; final Matrix matrix = new Matrix( n, n ); final double[] translation = new double[ n ]; for ( int r = 0; r < n; ++r ) { for ( int c = 0; c < n; ++c ) { double ar = get( r, 0 ) * affine.get( 0, c ); for ( int k = 1; k < n; ++k ) ar += get( r, k ) * affine.get( k, c ); matrix.set( r, c, ar ); } double tr = get( r, n ) + get( r, 0 ) * affine.get( 0, n ); for ( int k = 1; k < n; ++k ) tr += get( r, k ) * affine.get( k, n ); translation[ r ] = tr; } a.setMatrix( 0, n - 1, 0, n - 1, matrix ); System.arraycopy( translation, 0, t, 0, t.length ); updateDs(); invert(); inverse.updateDs(); return this; }
@Override public AffineTransform preConcatenate( final AffineGet affine ) { assert affine.numSourceDimensions() == n: "Dimensions do not match."; final Matrix matrix = new Matrix( n, n ); final double[] translation = new double[ n ]; for ( int r = 0; r < n; ++r ) { for ( int c = 0; c < n; ++c ) { double ar = affine.get( r, 0 ) * get( 0, c ); for ( int k = 1; k < n; ++k ) ar += affine.get( r, k ) * get( k, c ); matrix.set( r, c, ar ); } double tr = affine.get( r, n ) + affine.get( r, 0 ) * get( 0, n ); for ( int k = 1; k < n; ++k ) tr += affine.get( r, k ) * get( k, n ); translation[ r ] = tr; } a.setMatrix( 0, n - 1, 0, n - 1, matrix ); System.arraycopy( translation, 0, t, 0, t.length ); updateDs(); invert(); inverse.updateDs(); return this; }