# HermiteSpline

#### new Cesium.HermiteSpline(options)
Core/HermiteSpline.js 181

  A Hermite spline is a cubic interpolating spline. Points, incoming tangents, outgoing tangents, and times must be defined for each control point. The outgoing tangents are defined for points [0, n - 2] and the incoming tangents are defined for points [1, n - 1]. For example, when interpolating a segment of the curve between `points[i]` and `points[i + 1]`, the tangents at the points will be `outTangents[i]` and `inTangents[i]`, respectively.

  Name | Type | Description
  --- | --- | ---

  `options`

  Object

  Object with the following properties:

  Name | Type | Description
  --- | --- | ---
  `times` | Array.<Number> | An array of strictly increasing, unit-less, floating-point times at each point. The values are in no way connected to the clock time. They are the parameterization for the curve.
  `points` | Array.<Cartesian3> | The array of `Cartesian3` control points.
  `inTangents` | Array.<Cartesian3> | The array of `Cartesian3` incoming tangents at each control point.
  `outTangents` | Array.<Cartesian3> | The array of `Cartesian3` outgoing tangents at each control point.

  ##### Throws:

  - DeveloperError : points.length must be greater than or equal to 2.
  - DeveloperError : times.length must be equal to points.length.
  - DeveloperError : inTangents and outTangents must have a length equal to points.length - 1.

  ##### Example:

      // Create a G<sup>1</sup> continuous Hermite spline
      var times = [ 0.0, 1.5, 3.0, 4.5, 6.0 ];
      var spline = new Cesium.HermiteSpline({
          times : times,
          points : [
              new Cesium.Cartesian3(1235398.0, -4810983.0, 4146266.0),
              new Cesium.Cartesian3(1372574.0, -5345182.0, 4606657.0),
              new Cesium.Cartesian3(-757983.0, -5542796.0, 4514323.0),
              new Cesium.Cartesian3(-2821260.0, -5248423.0, 4021290.0),
              new Cesium.Cartesian3(-2539788.0, -4724797.0, 3620093.0)
          ],
          outTangents : [
              new Cesium.Cartesian3(1125196, -161816, 270551),
              new Cesium.Cartesian3(-996690.5, -365906.5, 184028.5),
              new Cesium.Cartesian3(-2096917, 48379.5, -292683.5),
              new Cesium.Cartesian3(-890902.5, 408999.5, -447115)
          ],
          inTangents : [
              new Cesium.Cartesian3(-1993381, -731813, 368057),
              new Cesium.Cartesian3(-4193834, 96759, -585367),
              new Cesium.Cartesian3(-1781805, 817999, -894230),
              new Cesium.Cartesian3(1165345, 112641, 47281)
          ]
      });

      var p0 = spline.evaluate(times[0]);

  ##### See:

  - CatmullRomSpline
  - LinearSpline
  - QuaternionSpline

### Members

#### readonlyinTangents : Array.<Cartesian3>
Core/HermiteSpline.js 249

  An array of `Cartesian3` incoming tangents at each control point.

#### readonlyoutTangents : Array.<Cartesian3>
Core/HermiteSpline.js 263

  An array of `Cartesian3` outgoing tangents at each control point.

#### readonlypoints : Array.<Cartesian3>
Core/HermiteSpline.js 235

  An array of `Cartesian3` control points.

#### readonlytimes : Array.<Number>
Core/HermiteSpline.js 221

  An array of times for the control points.

### Methods

#### staticCesium.HermiteSpline.createC1(options) → HermiteSpline
Core/HermiteSpline.js 308

  Creates a spline where the tangents at each control point are the same. The curves are guaranteed to be at least in the class C1.

  Name | Type | Description
  --- | --- | ---

  `options`

  Object

  Object with the following properties:

  Name | Type | Description
  --- | --- | ---
  `times` | Array.<Number> | The array of control point times.
  `points` | Array.<Cartesian3> | The array of control points.
  `tangents` | Array.<Cartesian3> | The array of tangents at the control points.

  ##### Returns:

  A hermite spline.

  ##### Throws:

  - DeveloperError : points, times and tangents are required.
  - DeveloperError : points.length must be greater than or equal to 2.
  - DeveloperError : times, points and tangents must have the same length.

  ##### Example:

      var points = [
          new Cesium.Cartesian3(1235398.0, -4810983.0, 4146266.0),
          new Cesium.Cartesian3(1372574.0, -5345182.0, 4606657.0),
          new Cesium.Cartesian3(-757983.0, -5542796.0, 4514323.0),
          new Cesium.Cartesian3(-2821260.0, -5248423.0, 4021290.0),
          new Cesium.Cartesian3(-2539788.0, -4724797.0, 3620093.0)
      ];

      // Add tangents
      var tangents = new Array(points.length);
      tangents[0] = new Cesium.Cartesian3(1125196, -161816, 270551);
      var temp = new Cesium.Cartesian3();
      for (var i = 1; i < tangents.length - 1; ++i) {
          tangents[i] = Cesium.Cartesian3.multiplyByScalar(Cesium.Cartesian3.subtract(points[i + 1], points[i - 1], temp), 0.5, new Cesium.Cartesian3());
      }
      tangents[tangents.length - 1] = new Cesium.Cartesian3(1165345, 112641, 47281);

      var spline = Cesium.HermiteSpline.createC1({
          times : times,
          points : points,
          tangents : tangents
      });

#### staticCesium.HermiteSpline.createClampedCubic(options) → HermiteSpline|LinearSpline
Core/HermiteSpline.js 431

  Creates a clamped cubic spline. The tangents at the interior control points are generated to create a curve in the class C2.

  Name | Type | Description
  --- | --- | ---

  `options`

  Object

  Object with the following properties:

  Name | Type | Description
  --- | --- | ---
  `times` | Array.<Number> | The array of control point times.
  `points` | Array.<Cartesian3> | The array of control points.
  `firstTangent` | Cartesian3 | The outgoing tangent of the first control point.
  `lastTangent` | Cartesian3 | The incoming tangent of the last control point.

  ##### Returns:

  A hermite spline or a linear spline if less than 3 control points were given.

  ##### Throws:

  - DeveloperError : points, times, firstTangent and lastTangent are required.
  - DeveloperError : points.length must be greater than or equal to 2.
  - DeveloperError : times.length must be equal to points.length.

  ##### Example:

      // Create a clamped cubic spline above the earth from Philadelphia to Los Angeles.
      var spline = Cesium.HermiteSpline.createClampedCubic({
          times : [ 0.0, 1.5, 3.0, 4.5, 6.0 ],
          points : [
              new Cesium.Cartesian3(1235398.0, -4810983.0, 4146266.0),
              new Cesium.Cartesian3(1372574.0, -5345182.0, 4606657.0),
              new Cesium.Cartesian3(-757983.0, -5542796.0, 4514323.0),
              new Cesium.Cartesian3(-2821260.0, -5248423.0, 4021290.0),
              new Cesium.Cartesian3(-2539788.0, -4724797.0, 3620093.0)
          ],
          firstTangent : new Cesium.Cartesian3(1125196, -161816, 270551),
          lastTangent : new Cesium.Cartesian3(1165345, 112641, 47281)
      });

#### staticCesium.HermiteSpline.createNaturalCubic(options) → HermiteSpline|LinearSpline
Core/HermiteSpline.js 364

  Creates a natural cubic spline. The tangents at the control points are generated to create a curve in the class C2.

  Name | Type | Description
  --- | --- | ---

  `options`

  Object

  Object with the following properties:

  Name | Type | Description
  --- | --- | ---
  `times` | Array.<Number> | The array of control point times.
  `points` | Array.<Cartesian3> | The array of control points.

  ##### Returns:

  A hermite spline or a linear spline if less than 3 control points were given.

  ##### Throws:

  - DeveloperError : points and times are required.
  - DeveloperError : points.length must be greater than or equal to 2.
  - DeveloperError : times.length must be equal to points.length.

  ##### Example:

      // Create a natural cubic spline above the earth from Philadelphia to Los Angeles.
      var spline = Cesium.HermiteSpline.createNaturalCubic({
          times : [ 0.0, 1.5, 3.0, 4.5, 6.0 ],
          points : [
              new Cesium.Cartesian3(1235398.0, -4810983.0, 4146266.0),
              new Cesium.Cartesian3(1372574.0, -5345182.0, 4606657.0),
              new Cesium.Cartesian3(-757983.0, -5542796.0, 4514323.0),
              new Cesium.Cartesian3(-2821260.0, -5248423.0, 4021290.0),
              new Cesium.Cartesian3(-2539788.0, -4724797.0, 3620093.0)
          ]
      });

#### evaluate(time, result) → Cartesian3
Core/HermiteSpline.js 504

  Evaluates the curve at a given time.

  Name | Type | Description
  --- | --- | ---
  `time` | Number | The time at which to evaluate the curve.
  `result` | Cartesian3 | optional The object onto which to store the result.

  ##### Returns:

  The modified result parameter or a new instance of the point on the curve at the given time.

  ##### Throws:

  - DeveloperError : time must be in the range `[t0, tn]`, where `t0` is the first element in the array `times` and `tn` is the last element in the array `times`.

#### findTimeInterval(time) → Number
Core/HermiteSpline.js 488

  Finds an index `i` in `times` such that the parameter `time` is in the interval `[times[i], times[i + 1]]`.

  Name | Type | Description
  --- | --- | ---
  `time` | Number | The time.

  ##### Returns:

  The index for the element at the start of the interval.

  ##### Throws:

  - DeveloperError : time must be in the range `[t0, tn]`, where `t0` is the first element in the array `times` and `tn` is the last element in the array `times`.