HermiteSpline

HermiteSpline

new

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.

Parameters:
Name Type Description
options.times Array 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.
options.points Array The array of Cartesian3 control points.
options.inTangents Array The array of Cartesian3 incoming tangents at each control point.
options.outTangents Array 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 G1 continuous Hermite spline
var spline = new Cesium.HermiteSpline({
    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)
    ],
    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[i]);         // equal to positions[i]
var p1 = spline.evaluate(times[i] + delta); // interpolated value when delta < times[i + 1] - times[i]
See:
Source:

Members

:DeveloperError

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

<readonly> :Array

An array of Cartesian3 incoming tangents at each control point.

<readonly> :Array

An array of Cartesian3 outgoing tangents at each control point.

<readonly> :Array

An array of Cartesian3 control points.

<readonly> :Array

An array of times for the control points.

Methods

Evaluates the curve at a given time.

Parameters:
Name Type Argument Description
time Number The time at which to evaluate the curve.
result Cartesian3 <optional>
The object onto which to store the result.
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.
Returns:
Cartesian3 The modified result parameter or a new instance of the point on the curve at the given time.

<static>

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.

Parameters:
Name Type Description
options.times Array The array of control point times.
options.points Array The array of control points.
options.tangents Array The array of tangents at the control points.
Throws:
Returns:
HermiteSpline A hermite spline.
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);
for (var i = 1; i < tangents.length - 1; ++i) {
    tangents[i] = Cesium.Cartesian3.multiplyByScalar(Cesium.Cartesian3.subtract(points[i + 1], points[i - 1]), 0.5);
}
tangents[tangents.length - 1] = new Cesium.Cartesian3(1165345, 112641, 47281);

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

<static>

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

Parameters:
Name Type Description
options.times Array The array of control point times.
options.points Array The array of control points.
options.firstTangent Cartesian3 The outgoing tangent of the first control point.
Throws:
Returns:
HermiteSpline | LinearSpline A hermite spline or a linear spline if less than 3 control points were given.
Example
// Create a clamped cubic spline above the earth from Philadelphia to Los Angeles.
var spline = new Cesium.HermiteSpline({
    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)
});

<static>

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

Parameters:
Name Type Description
options.times Array The array of control point times.
options.points Array The array of control points.
Throws:
Returns:
HermiteSpline | LinearSpline A hermite spline or a linear spline if less than 3 control points were given.
Example
// Create a natural cubic spline above the earth from Philadelphia to Los Angeles.
var spline = new Cesium.HermiteSpline({
    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)
    ]
});