@Override public Scale3D copy() { return new Scale3D( s ); }
@Override public void apply( final double[] source, final double[] target ) { assert source.length >= numDimensions() && target.length >= numDimensions(): "Input dimensions too small."; target[ 0 ] = source[ 0 ] * s[ 0 ]; target[ 1 ] = source[ 1 ] * s[ 1 ]; target[ 2 ] = source[ 2 ] * s[ 2 ]; }
@Override public Scale3D concatenate( final ScaleGet a ) { return preConcatenate( a ); }
public Scale3D( final double... s ) { super( s.clone(), new RealPoint[ s.length ] ); assert s.length == numDimensions(): "Input dimensions do not match or are not 3."; ds[ 0 ] = new RealPoint( s[ 0 ], 0, 0 ); ds[ 1 ] = new RealPoint( 0, s[ 1 ], 0 ); ds[ 2 ] = new RealPoint( 0, 0, s[ 2 ] ); final double[] si = new double[ 3 ]; si[ 0 ] = 1.0 / s[ 0 ]; si[ 1 ] = 1.0 / s[ 1 ]; si[ 2 ] = 1.0 / s[ 2 ]; final RealPoint[] dis = new RealPoint[ 3 ]; dis[ 0 ] = new RealPoint( si[ 0 ], 0, 0 ); dis[ 1 ] = new RealPoint( 0, si[ 1 ], 0 ); dis[ 2 ] = new RealPoint( 0, 0, si[ 2 ] ); inverse = new Scale3D( si, this, dis ); }
@Override public Scale3D preConcatenate( final ScaleGet a ) { set( s[ 0 ] * a.getScale( 0 ), s[ 1 ] * a.getScale( 1 ), s[ 2 ] * a.getScale( 2 ) ); return this; }
public Scale3D( final double sx, final double sy, final double sz ) { super( new double[ 3 ], new RealPoint[ 3 ] ); s[ 0 ] = sx; s[ 1 ] = sy; s[ 2 ] = sz; ds[ 0 ] = new RealPoint( sx, 0, 0 ); ds[ 1 ] = new RealPoint( 0, sy, 0 ); ds[ 2 ] = new RealPoint( 0, 0, sz ); final double[] si = new double[ 3 ]; si[ 0 ] = 1.0 / s[ 0 ]; si[ 1 ] = 1.0 / s[ 1 ]; si[ 2 ] = 1.0 / s[ 2 ]; final RealPoint[] dis = new RealPoint[ 3 ]; dis[ 0 ] = new RealPoint( si[ 0 ], 0, 0 ); dis[ 1 ] = new RealPoint( 0, si[ 1 ], 0 ); dis[ 2 ] = new RealPoint( 0, 0, si[ 2 ] ); inverse = new Scale3D( si, this, dis ); }
@Override public void apply( final float[] source, final float[] target ) { assert source.length >= numDimensions() && target.length >= numDimensions(): "Input dimensions too small."; target[ 0 ] = ( float )( source[ 0 ] * s[ 0 ] ); target[ 1 ] = ( float )( source[ 1 ] * s[ 1 ] ); target[ 2 ] = ( float )( source[ 2 ] * s[ 2 ] ); }
return new Scale3D( scalings );
@Override public double get( final int row, final int column ) { assert row >= 0 && row < numDimensions(): "Dimension index out of bounds."; return row == column ? s[ row ] : 0; }
( bounds.realMax( 1 ) - bounds.realMin( 1 ) ) / viewer.getViewer().getHeight() ); final Scale3D scale = new Scale3D( 1.0/currentScale, 1.0/currentScale, 1.0/currentScale );
protected Scale3D( final double[] s, final Scale3D inverse, final RealPoint[] ds ) { super( s, ds ); assert s.length == numDimensions(): "Input dimensions do not match or are not 3."; this.inverse = inverse; }
@Override public void applyInverse( final double[] source, final double[] target ) { assert source.length >= numDimensions() && target.length >= numDimensions(): "Input dimensions too small."; source[ 0 ] = target[ 0 ] / s[ 0 ]; source[ 1 ] = target[ 1 ] / s[ 1 ]; source[ 2 ] = target[ 2 ] / s[ 2 ]; }
@Override public void applyInverse( final float[] source, final float[] target ) { assert source.length >= numDimensions() && target.length >= numDimensions(): "Input dimensions too small."; source[ 0 ] = ( float )( target[ 0 ] / s[ 0 ] ); source[ 1 ] = ( float )( target[ 1 ] / s[ 1 ] ); source[ 2 ] = ( float )( target[ 2 ] / s[ 2 ] ); }
@Override public void apply( final RealLocalizable source, final RealPositionable target ) { assert source.numDimensions() >= numDimensions() && target.numDimensions() >= numDimensions(): "Input dimensions too small."; target.setPosition( source.getDoublePosition( 0 ) * s[ 0 ], 0 ); target.setPosition( source.getDoublePosition( 1 ) * s[ 1 ], 1 ); target.setPosition( source.getDoublePosition( 2 ) * s[ 2 ], 2 ); }
@Override public void applyInverse( final RealPositionable source, final RealLocalizable target ) { assert source.numDimensions() >= numDimensions() && target.numDimensions() >= numDimensions(): "Input dimensions too small."; source.setPosition( target.getDoublePosition( 0 ) / s[ 0 ], 0 ); source.setPosition( target.getDoublePosition( 1 ) / s[ 1 ], 1 ); source.setPosition( target.getDoublePosition( 2 ) / s[ 2 ], 2 ); }
@Override public void set( final double... s ) { assert s.length == numDimensions(): "Input dimensions do not match or are not 3."; this.s[ 0 ] = s[ 0 ]; this.s[ 1 ] = s[ 1 ]; this.s[ 2 ] = s[ 2 ]; inverse.s[ 0 ] = 1.0 / s[ 0 ]; inverse.s[ 1 ] = 1.0 / s[ 1 ]; inverse.s[ 2 ] = 1.0 / s[ 2 ]; ds[ 0 ].setPosition( s[ 0 ], 0 ); ds[ 1 ].setPosition( s[ 1 ], 1 ); ds[ 2 ].setPosition( s[ 2 ], 2 ); inverse.ds[ 0 ].setPosition( inverse.s[ 0 ], 0 ); inverse.ds[ 1 ].setPosition( inverse.s[ 1 ], 1 ); inverse.ds[ 2 ].setPosition( inverse.s[ 2 ], 2 ); }