/** * Initialize the translation with a given vector * * @param translationVector the translation */ public void setTranslation(double... translationVector) { a.m03 = translationVector[0]; a.m13 = translationVector[1]; a.m23 = translationVector[2]; invert(); updateDs(); inverse.updateDs(); }
/** * Translation * * @param translationVector * vector describing the translation * */ public void translate(double... translationVector) { a.m03 += translationVector[0]; a.m13 += translationVector[1]; a.m23 += translationVector[2]; invert(); updateDs(); inverse.updateDs(); }
@Override public void set( final double[][] values ) { assert values.length >= 3 && values[ 0 ].length >= 4 && values[ 1 ].length >= 4 && values[ 2 ].length >= 4: "Input dimensions do not match. A 3d affine matrix is a 3x4 matrix."; a.m00 = values[ 0 ][ 0 ]; a.m01 = values[ 0 ][ 1 ]; a.m02 = values[ 0 ][ 2 ]; a.m03 = values[ 0 ][ 3 ]; a.m10 = values[ 1 ][ 0 ]; a.m11 = values[ 1 ][ 1 ]; a.m12 = values[ 1 ][ 2 ]; a.m13 = values[ 1 ][ 3 ]; a.m20 = values[ 2 ][ 0 ]; a.m21 = values[ 2 ][ 1 ]; a.m22 = values[ 2 ][ 2 ]; a.m23 = values[ 2 ][ 3 ]; updateDs(); invert(); inverse.updateDs(); }
@Override public void set( final double... values ) { assert values.length >= 12: "Input dimensions do not match. A 3d affine matrix is a 3x4 matrix."; a.m00 = values[ 0 ]; a.m01 = values[ 1 ]; a.m02 = values[ 2 ]; a.m03 = values[ 3 ]; a.m10 = values[ 4 ]; a.m11 = values[ 5 ]; a.m12 = values[ 6 ]; a.m13 = values[ 7 ]; a.m20 = values[ 8 ]; a.m21 = values[ 9 ]; a.m22 = values[ 10 ]; a.m23 = values[ 11 ]; updateDs(); invert(); inverse.updateDs(); }
final public AffineTransform3D concatenate( final AffineTransform3D affine ) { a.concatenate( affine.a ); invert(); updateDs(); inverse.updateDs(); return this; }
final public AffineTransform3D preConcatenate( final AffineTransform3D affine ) { a.preConcatenate( affine.a ); invert(); updateDs(); inverse.updateDs(); return this; }
/** * Scale * * @param s * scale factor */ public void scale( final double s ) { a.scale( s ); invert(); updateDs(); inverse.updateDs(); }
a.m23 = m23; invert(); updateDs(); inverse.updateDs();
invert(); inverse.updateDs();
/** * Rotate * * @param axis * 0=x, 1=y, 2=z * @param d * angle in radians */ public void rotate( final int axis, final double d ) { final double dcos = Math.cos( d ); final double dsin = Math.sin( d ); switch ( axis ) { case 0: a.rotateX( dcos, dsin ); break; case 1: a.rotateY( dcos, dsin ); break; default: a.rotateZ( dcos, dsin ); break; } invert(); updateDs(); inverse.updateDs(); }
@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; }
protected AffineTransform3D( final AffineMatrix3D a ) { this.a = a; d0 = new RealPoint( 3 ); d1 = new RealPoint( 3 ); d2 = new RealPoint( 3 ); ds = new RealPoint[] { d0, d1, d2 }; updateDs(); inverse = new AffineTransform3D( this ); invert(); inverse.updateDs(); }