package mikera.transformz.impl;
import mikera.matrixx.AMatrix;
import mikera.matrixx.Matrixx;
import mikera.transformz.AAffineTransform;
import mikera.transformz.ATransform;
import mikera.vectorz.AVector;
/**
* Abstract base class for transforms that produce a constant result.
* @author Mike
*/
public abstract class AConstantTransform extends AAffineTransform {
private final int inputDimensions;
public AAffineTransform inverse() {
throw new UnsupportedOperationException("Cannot get inverse of a constant transform!");
}
AConstantTransform(int inputDimensions) {
this.inputDimensions=inputDimensions;
}
@Override
public boolean isIdentity() {
// constant transform can't be identity!
return false;
}
@Override
public AConstantTransform compose(ATransform trans) {
// constant transforms map everything to the same constant!
return this;
}
@Override
public int inputDimensions() {
return inputDimensions;
}
@Override
public AMatrix getMatrix() {
return Matrixx.createImmutableZeroMatrix(outputDimensions(), inputDimensions());
}
public abstract AVector getConstantValue();
}