Class ExponentialTransform1D

All Implemented Interfaces:
Serializable, Parameterized, LenientComparable, org.opengis.referencing.operation.MathTransform, org.opengis.referencing.operation.MathTransform1D

final class ExponentialTransform1D extends AbstractMathTransform1D implements Serializable
A one dimensional exponential transform. Input values x are converted into output values y using the following equation:
y = scalebasex
Tip: if a linear transform is applied before this exponential transform, then the equation can be rewritten as: scalebasea + bx = scalebasea⋅(baseb)x It is possible to find back the coefficients of the original linear transform by pre-concatenating a logarithmic transform before the exponential one, as below:

Serialization

Serialized instances of this class are not guaranteed to be compatible with future SIS versions. Serialization should be used only for short term storage or RMI between applications running the same SIS version.
Since:
0.5
Version:
0.5
  • Field Details

    • serialVersionUID

      private static final long serialVersionUID
      Serial number for inter-operability with different versions.
      See Also:
    • base

      final double base
      The base to be raised to a power.
    • lnBase

      final double lnBase
      Natural logarithm of base, used for derivative(double) computation.
    • scale

      final double scale
      The scale value to be multiplied.
      The scale could be handled by a concatenation with LinearTransform1D instead of an explicit field in this class. However, the scalebasex formula is extensively used as a transfer function in grid coverages. Consequently, we keep this explicit field for performance reasons.
    • inverse

      private org.opengis.referencing.operation.MathTransform1D inverse
      The inverse of this transform. Created only when first needed. Serialized in order to avoid rounding error if this transform is actually the one which was created from the inverse.
  • Constructor Details

    • ExponentialTransform1D

      ExponentialTransform1D(LogarithmicTransform1D inverse)
      Constructs a new exponential transform which is the inverse of the supplied logarithmic transform.
    • ExponentialTransform1D

      protected ExponentialTransform1D(double base, double scale)
      Constructs a new exponential transform. This constructor is provided for subclasses only. Instances should be created using the factory method, which may returns optimized implementations for some particular argument values.
      Parameters:
      base - the base to be raised to a power.
      scale - the scale value to be multiplied.
  • Method Details

    • create

      public static org.opengis.referencing.operation.MathTransform1D create(double base, double scale)
      Constructs a new exponential transform which include the given scale factor applied after the exponentiation.
      Parameters:
      base - the base to be raised to a power.
      scale - the scale value to be multiplied.
      Returns:
      the math transform.
    • inverse

      public org.opengis.referencing.operation.MathTransform1D inverse()
      Returns the inverse of this transform.
      Specified by:
      inverse in interface org.opengis.referencing.operation.MathTransform
      Specified by:
      inverse in interface org.opengis.referencing.operation.MathTransform1D
      Overrides:
      inverse in class AbstractMathTransform1D
    • derivative

      public double derivative(double value)
      Gets the derivative of this function at a value.
      Specified by:
      derivative in interface org.opengis.referencing.operation.MathTransform1D
      Specified by:
      derivative in class AbstractMathTransform1D
      Parameters:
      value - the value where to evaluate the derivative.
      Returns:
      the derivative at the specified point.
    • transform

      public double transform(double value)
      Transforms the specified value.
      Specified by:
      transform in interface org.opengis.referencing.operation.MathTransform1D
      Specified by:
      transform in class AbstractMathTransform1D
      Parameters:
      value - the value to transform.
      Returns:
      the transformed value.
    • transform

      public void transform(double[] srcPts, int srcOff, double[] dstPts, int dstOff, int numPts)
      Transforms many positions in a list of coordinate values.
      Specified by:
      transform in interface org.opengis.referencing.operation.MathTransform
      Overrides:
      transform in class AbstractMathTransform
      Parameters:
      srcPts - the array containing the source point coordinates.
      srcOff - the offset to the first point to be transformed in the source array.
      dstPts - the array into which the transformed point coordinates are returned. May be the same than srcPts.
      dstOff - the offset to the location of the first transformed point that is stored in the destination array.
      numPts - the number of point objects to be transformed.
    • transform

      public void transform(float[] srcPts, int srcOff, float[] dstPts, int dstOff, int numPts)
      Transforms many positions in a list of coordinate values.
      Specified by:
      transform in interface org.opengis.referencing.operation.MathTransform
      Overrides:
      transform in class AbstractMathTransform
      Parameters:
      srcPts - the array containing the source point coordinates.
      srcOff - the offset to the first point to be transformed in the source array.
      dstPts - the array into which the transformed point coordinates are returned. May be the same than srcPts.
      dstOff - the offset to the location of the first transformed point that is stored in the destination array.
      numPts - the number of point objects to be transformed.
    • transform

      public void transform(double[] srcPts, int srcOff, float[] dstPts, int dstOff, int numPts)
      Transforms many positions in a list of coordinate values.
      Specified by:
      transform in interface org.opengis.referencing.operation.MathTransform
      Overrides:
      transform in class AbstractMathTransform
      Parameters:
      srcPts - the array containing the source point coordinates.
      srcOff - the offset to the first point to be transformed in the source array.
      dstPts - the array into which the transformed point coordinates are returned.
      dstOff - the offset to the location of the first transformed point that is stored in the destination array.
      numPts - the number of point objects to be transformed.
    • transform

      public void transform(float[] srcPts, int srcOff, double[] dstPts, int dstOff, int numPts)
      Transforms many positions in a list of coordinate values.
      Specified by:
      transform in interface org.opengis.referencing.operation.MathTransform
      Overrides:
      transform in class AbstractMathTransform
      Parameters:
      srcPts - the array containing the source point coordinates.
      srcOff - the offset to the first point to be transformed in the source array.
      dstPts - the array into which the transformed point coordinates are returned.
      dstOff - the offset to the location of the first transformed point that is stored in the destination array.
      numPts - the number of point objects to be transformed.
    • tryConcatenate

      protected org.opengis.referencing.operation.MathTransform tryConcatenate(boolean applyOtherFirst, org.opengis.referencing.operation.MathTransform other, org.opengis.referencing.operation.MathTransformFactory factory) throws org.opengis.util.FactoryException
      Concatenates in an optimized way a MathTransform other to this MathTransform. This implementation can optimize some concatenation with LinearTransform1D and LogarithmicTransform1D.
      Overrides:
      tryConcatenate in class AbstractMathTransform
      Parameters:
      applyOtherFirst - true if the transformation order is other followed by this, or false if the transformation order is this followed by other.
      other - the other math transform to (pre-)concatenate with this transform.
      factory - the factory which is (indirectly) invoking this method, or null if none.
      Returns:
      the combined math transform, or null if no optimized combined transform is available.
      Throws:
      org.opengis.util.FactoryException - if an error occurred while combining the transforms.
      See Also:
    • concatenateLog

      final org.opengis.referencing.operation.MathTransform concatenateLog(LogarithmicTransform1D other, boolean applyOtherFirst)
      Concatenates in an optimized way a LogarithmicTransform1D other to this ExponentialTransform1D.
      Parameters:
      other - the math transform to apply.
      applyOtherFirst - true if the transformation order is other followed by this, or false if the transformation order is this followed by other.
      Returns:
      the combined math transform, or null if no optimized combined transform is available.
    • computeHashCode

      protected int computeHashCode()
      Computes a hash value for this transform. This method is invoked by AbstractMathTransform.hashCode() when first needed.
      Overrides:
      computeHashCode in class AbstractMathTransform
      Returns:
      the hash code value. This value may change between different execution of the Apache SIS library.
    • equals

      public boolean equals(Object object, ComparisonMode mode)
      Compares the specified object with this math transform for equality.
      Specified by:
      equals in interface LenientComparable
      Overrides:
      equals in class AbstractMathTransform
      Parameters:
      object - the object to compare with this transform.
      mode - the strictness level of the comparison. Default to STRICT.
      Returns:
      true if the given object is considered equals to this math transform.
      See Also: