java.lang.Object
org.rrd4j.data.Plottable
org.rrd4j.data.LinearInterpolator
All Implemented Interfaces:
IPlottable

public class LinearInterpolatorextends 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
    Description
    static enum 
    A enumeration of interpolation methods
  • Field Summary

    Modifier and Type
    Field
    Description
    (package private) double
    Intercept of the best-fit line, or NaN when regression has not been computed.
    (package private) double
    Slope of the best-fit line, or NaN when regression has not been computed.
    static final int
    Constant used to specify LEFT interpolation.
    static final int
    Constant used to specify LINEAR interpolation (default interpolation method).
    static final int
    Constant used to specify LINEAR REGRESSION as interpolation method.
    static final int
    Constant used to specify RIGHT interpolation.
    Interpolation method
    private int
    Last index used
    private final long[]
    Array of timestamps for the data series
    private final double[]
    Y coordinates of the points being interpolated.
  • Constructor Summary

    Constructors
    Constructor
    Description
    LinearInterpolator(long[] timestamps, double[] values)
    Creates LinearInterpolator from arrays of timestamps and corresponding datasource values.
    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.
  • Method Summary

    Modifier and Type
    Method
    Description
    private void
    Calculate best fit line
    double
    getValue(long timestamp)
    Retrieves datapoint value based on a given timestamp.
    void
    /** Sets interpolation method to be used.
    private void
    Validate the current processing state

    Methods inherited from class Object

    clone, equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Field Details

    • INTERPOLATE_LEFT

      public static final int INTERPOLATE_LEFT
      Constant used to specify LEFT interpolation. See setInterpolationMethod() for explanation.
      See Also:
    • INTERPOLATE_RIGHT

      public static final int INTERPOLATE_RIGHT
      Constant used to specify RIGHT interpolation. See setInterpolationMethod() for explanation.
      See Also:
    • INTERPOLATE_LINEAR

      public static final int INTERPOLATE_LINEAR
      Constant used to specify LINEAR interpolation (default interpolation method). See setInterpolationMethod() for explanation.
      See Also:
    • INTERPOLATE_REGRESSION

      public static final int INTERPOLATE_REGRESSION
      Constant used to specify LINEAR REGRESSION as interpolation method. See setInterpolationMethod() for explanation.
      See Also:
    • lastIndexUsed

      private int lastIndexUsed
      Last index used
    • interpolationMethod

      private LinearInterpolator.Method interpolationMethod
      Interpolation method
    • timestamps

      private final long[] timestamps
      Array of timestamps for the data series
    • values

      private final double[] values
      Y coordinates of the points being interpolated.
    • b0

      double b0
      Intercept of the best-fit line, or NaN when regression has not been computed. Used only if INTERPOLATE_BESTFIT is specified.
    • b1

      double b1
      Slope of the best-fit line, or NaN when regression has not been computed.
  • Constructor Details

    • 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.
    • 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(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.
  • Method Details

    • validate

      private void validate()
      Validate the current processing state
    • 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.
    • calculateBestFitLine

      private void calculateBestFitLine()
      Calculate best fit line
    • 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.