## Class LinearTransformation

• ```@Beta
@GwtIncompatible
public abstract class LinearTransformation
extends Object```
The representation of a linear transformation between real numbers `x` and `y`. Graphically, this is the specification of a straight line on a plane. The transformation can be expressed as `y = m * x + c` for finite `m` and `c`, unless it is a vertical transformation in which case `x` has a constant value for all `y`. In the non-vertical case, `m` is the slope of the transformation (and a horizontal transformation has zero slope).
Since:
20.0
Author:
Pete Gillin
• ### Nested Class Summary

Nested Classes
Modifier and Type Class and Description
`static class ` `LinearTransformation.LinearTransformationBuilder`
This is an intermediate stage in the construction process.
• ### Constructor Summary

Constructors
Constructor and Description
`LinearTransformation()`
• ### Method Summary

All Methods
Modifier and Type Method and Description
`static LinearTransformation` `forNaN()`
Builds an instance for datasets which contains `Double.NaN`.
`static LinearTransformation` `horizontal(double y)`
Builds an instance representing a horizontal transformation with a constant value of `y`.
`abstract LinearTransformation` `inverse()`
Returns the inverse linear transformation.
`abstract boolean` `isHorizontal()`
Returns whether this is a horizontal transformation.
`abstract boolean` `isVertical()`
Returns whether this is a vertical transformation.
`static LinearTransformation.LinearTransformationBuilder` ```mapping(double x1, double y1)```
Start building an instance which maps `x = x1` to `y = y1`.
`abstract double` `slope()`
Returns the slope of the transformation, i.e.
`abstract double` `transform(double x)`
Returns the `y` corresponding to the given `x`.
`static LinearTransformation` `vertical(double x)`
Builds an instance representing a vertical transformation with a constant value of `x`.
• ### Methods inherited from class java.lang.Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`
• ### Constructor Detail

• #### LinearTransformation

`public LinearTransformation()`
• ### Method Detail

• #### vertical

`public static LinearTransformation vertical(double x)`
Builds an instance representing a vertical transformation with a constant value of `x`. (The inverse of this will be a horizontal transformation.)
• #### horizontal

`public static LinearTransformation horizontal(double y)`
Builds an instance representing a horizontal transformation with a constant value of `y`. (The inverse of this will be a vertical transformation.)
• #### isVertical

`public abstract boolean isVertical()`
Returns whether this is a vertical transformation.
• #### isHorizontal

`public abstract boolean isHorizontal()`
Returns whether this is a horizontal transformation.
• #### slope

`public abstract double slope()`
Returns the slope of the transformation, i.e. the rate of change of `y` with respect to `x`. This must not be called on a vertical transformation (i.e. when `isVertical()` is true).
• #### transform

`public abstract double transform(double x)`
Returns the `y` corresponding to the given `x`. This must not be called on a vertical transformation (i.e. when `isVertical()` is true).
• #### inverse

`public abstract LinearTransformation inverse()`
Returns the inverse linear transformation. The inverse of a horizontal transformation is a vertical transformation, and vice versa. The inverse of the `forNaN()` transformation is itself. In all other cases, the inverse is a transformation such that applying both the original transformation and its inverse to a value gives you the original value give-or-take numerical errors. Calling this method multiple times on the same instance will always return the same instance. Calling this method on the result of calling this method on an instance will always return that original instance.