## org.jrobin.graph
Class LinearInterpolator

    java.lang.Object
      org.jrobin.graph.Plottable
          org.jrobin.graph.LinearInterpolator

public class LinearInterpolator
extends Plottable

Class used to interpolate datasource values from the collection of (timestamp, values) points. This class is suitable for linear interpolation only.

Interpolation algorithm returns different values based on the value passed to `setInterpolationMethod()`. If not set, interpolation method defaults to standard linear interpolation (`INTERPOLATE_LINEAR`). Interpolation method handles NaN datasource values gracefully.

Pass instances of this class to `RrdGraphDef.datasource()` to provide interpolated datasource values to JRobin grapher.

Field Summary
`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
`LinearInterpolator(java.util.Date[] dates, double[] values)` Creates LinearInterpolator from arrays of timestamps and corresponding datasource values.
`LinearInterpolator(java.util.GregorianCalendar[] 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
`double` `getValue(long timestamp)` Method overriden from the base class.
`void` `setInterpolationMethod(int interpolationMethod)` Sets interpolation method to be used.

Methods inherited from class org.jrobin.graph.Plottable
`getValue, getValue`

Methods inherited from class java.lang.Object
`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

Field Detail

### INTERPOLATE_LEFT

    public static final int INTERPOLATE_LEFT

  constant used to specify LEFT interpolation. 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

### 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

Constructor Detail

### LinearInterpolator

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

  Creates LinearInterpolator from arrays of timestamps and corresponding datasource values.

Parameters:
  `timestamps` - timestamps in seconds
  `values` - corresponding datasource values
Throws:
  `RrdException` - 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(java.util.Date[] dates,
                              double[] values)
                       throws RrdException

  Creates LinearInterpolator from arrays of timestamps and corresponding datasource values.

Parameters:
  `dates` - Array of Date objects
  `values` - corresponding datasource values
Throws:
  `RrdException` - 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(java.util.GregorianCalendar[] dates,
                              double[] values)
                       throws RrdException

  Creates LinearInterpolator from arrays of timestamps and corresponding datasource values.

Parameters:
  `dates` - array of GregorianCalendar objects
  `values` - corresponding datasource values
Throws:
  `RrdException` - 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

### setInterpolationMethod

    public void setInterpolationMethod(int 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`:

  - `INTERPOLATE_LEFT: 100`
  - `INTERPOLATE_RIGHT: 300`
  - `INTERPOLATE_LINEAR: 200`
  If not set, interpolation method defaults to `INTERPOLATE_LINEAR`.

  The fourth available interpolation method is INTERPOLATE_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 inteprolation method can be found here.

  Parameters:
    `interpolationMethod` - Should be `INTERPOLATE_LEFT`, `INTERPOLATE_RIGHT`, `INTERPOLATE_LINEAR` or `INTERPOLATE_REGRESSION`. Any other value will be interpreted as INTERPOLATE_LINEAR (default).

### getValue

    public double getValue(long timestamp)

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

  Overrides:
    `getValue` in class `Plottable`
  Parameters:
    `timestamp` - timestamp in seconds
  Returns:
    inteprolated datasource value