org.rrd4j.data

## Class LinearInterpolator

- java.lang.Object
- - org.rrd4j.data.Plottable
  - - org.rrd4j.data.LinearInterpolator

- All Implemented Interfaces:
    IPlottable

      public class LinearInterpolator
      extends org.rrd4j.data.Plottable

  Interpolates datasource values from timestamp-value collections.
  Suitable for linear interpolation of time-series data points.

  Interpolation algorithm behavior depends on the method set via `setInterpolationMethod(Method)`. Defaults to linear interpolation. Handles NaN datasource values gracefully.

  Different interpolation methods available: - `INTERPOLATE_LEFT` - Left interpolation - `INTERPOLATE_RIGHT` - Right interpolation - `INTERPOLATE_LINEAR` - Standard linear interpolation

- - ### Nested Class Summary

    Nested Classes
    Modifier and Type | Class and Description
    --- | ---
    `static class` | `LinearInterpolator.Method` A enumeration of interpolation methods

  - ### Field Summary

    Fields
    Modifier and Type | Field and Description
    --- | ---
    `(package private) double` | `b0`
    `(package private) double` | `b1`
    `static int` | `INTERPOLATE_LEFT` constant used to specify LEFT interpolation.
    `static int` | `INTERPOLATE_LINEAR` constant used to specify LINEAR interpolation (default interpolation method).
    `static int` | `INTERPOLATE_REGRESSION` constant used to specify LINEAR REGRESSION as interpolation method.
    `static int` | `INTERPOLATE_RIGHT` constant used to specify RIGHT interpolation.

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `LinearInterpolator(Calendar[] dates, double[] values)` Creates LinearInterpolator from arrays of timestamps and corresponding datasource values.
    `LinearInterpolator(Date[] dates, double[] values)` Creates LinearInterpolator from arrays of timestamps and corresponding datasource values.
    `LinearInterpolator(long[] timestamps, double[] values)` Creates LinearInterpolator from arrays of timestamps and corresponding datasource values.

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method and Description
    --- | ---
    `double` | `getValue(long timestamp)` Retrieves datapoint value based on a given timestamp.
    `void` | `setInterpolationMethod(LinearInterpolator.Method interpolationMethod)` Sets interpolation method to be used.

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### Field Detail

    - #### b0

          double b0

    - #### b1

          double b1

    - #### INTERPOLATE_LEFT

          public static final int INTERPOLATE_LEFT

      constant used to specify LEFT interpolation. See `setInterpolationMethod()` for explanation.
      See Also:
        Constant Field Values

    - #### INTERPOLATE_LINEAR

          public static final int INTERPOLATE_LINEAR

      constant used to specify LINEAR interpolation (default interpolation method). See `setInterpolationMethod()` for explanation.
      See Also:
        Constant Field Values

    - #### INTERPOLATE_REGRESSION

          public static final int INTERPOLATE_REGRESSION

      constant used to specify LINEAR REGRESSION as interpolation method. See `setInterpolationMethod()` for explanation.
      See Also:
        Constant Field Values

    - #### INTERPOLATE_RIGHT

          public static final int INTERPOLATE_RIGHT

      constant used to specify RIGHT interpolation. See `setInterpolationMethod()` for explanation.
      See Also:
        Constant Field Values

  - ### Constructor Detail

    - #### LinearInterpolator

          public LinearInterpolator(Calendar[] dates,
                                    double[] values)

      Creates LinearInterpolator from arrays of timestamps and corresponding datasource values.
      Parameters:
        `dates` - array of GregorianCalendar objects
        `values` - corresponding datasource values
      Throws:
        `IllegalArgumentException` - Thrown if supplied arrays do not contain at least two values, or if timestamps are not ordered, or array lengths are not equal.

    - #### LinearInterpolator

          public LinearInterpolator(Date[] dates,
                                    double[] values)

      Creates LinearInterpolator from arrays of timestamps and corresponding datasource values.
      Parameters:
        `dates` - Array of Date objects
        `values` - corresponding datasource values
      Throws:
        `IllegalArgumentException` - Thrown if supplied arrays do not contain at least two values, or if timestamps are not ordered, or array lengths are not equal.

    - #### LinearInterpolator

          public LinearInterpolator(long[] timestamps,
                                    double[] values)

      Creates LinearInterpolator from arrays of timestamps and corresponding datasource values.
      Parameters:
        `timestamps` - timestamps in seconds
        `values` - corresponding datasource values
      Throws:
        `IllegalArgumentException` - Thrown if supplied arrays do not contain at least two values, or if timestamps are not ordered, or array lengths are not equal.

  - ### Method Detail

    - #### getValue

          public double getValue(long timestamp)

      Retrieves datapoint value based on a given timestamp. Use this method if you only have one series of data in this class.

      Method overridden from the base class. This method will be called by the framework. Call this method only if you need interpolated values in your code.

      Specified by:
        `getValue` in interface `IPlottable`
      Specified by:
        `getValue` in class `org.rrd4j.data.Plottable`
      Parameters:
        `timestamp` - Timestamp in seconds for the datapoint.
      Returns:
        Double value of the datapoint.

    - #### setInterpolationMethod

          public void setInterpolationMethod(LinearInterpolator.Method interpolationMethod)

      Sets interpolation method to be used. Suppose that we have two timestamp/value pairs:
      `(t, 100)` and `(t + 100, 300)`. Here are the results interpolator returns for t + 50 seconds, for various `interpolationMethods`:
      - `LEFT: 100`
      - `RIGHT: 300`
      - `LINEAR: 200`

      If not set, interpolation method defaults to `INTERPOLATE_LINEAR`.

      The fourth available interpolation method is REGRESSION. This method uses simple linear regression to interpolate supplied data with a simple straight line which does not necessarily pass through all data points. The slope of the best-fit line will be chosen so that the total square distance of real data points from from the best-fit line is at minimum.

      The full explanation of this interpolation method can be found here.

      Parameters:
        `interpolationMethod` - a method from `LinearInterpolator.Method`.