HermiteSpline

new Cesium.HermiteSpline(options)

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 control points.
inTangents Array.<Cartesian3> The array of incoming tangents at each control point.
outTangents Array.<Cartesian3> The array of 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.
  • DeveloperError : inTangents and outTangents must be of the same type as points.
Example:
// Create a G<sup>1</sup> continuous Hermite spline
const times = [ 0.0, 1.5, 3.0, 4.5, 6.0 ];
const 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)
    ]
});

const p0 = spline.evaluate(times[0]);
See:

Members

An array of incoming tangents at each control point.
An array of outgoing tangents at each control point.
An array of control points.

readonly times : Array.<number>

An array of times for the control points.

Methods

static Cesium.HermiteSpline.createC1(options)HermiteSpline

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:
Example:
const 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
const tangents = new Array(points.length);
tangents[0] = new Cesium.Cartesian3(1125196, -161816, 270551);
const temp = new Cesium.Cartesian3();
for (let 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);

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

static Cesium.HermiteSpline.createClampedCubic(options)HermiteSpline|LinearSpline

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.<number> | 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.
  • DeveloperError : firstTangent and lastTangent must be of the same type as points.
Example:
// Create a clamped cubic spline above the earth from Philadelphia to Los Angeles.
const 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)
});

static Cesium.HermiteSpline.createNaturalCubic(options)HermiteSpline|LinearSpline

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:
Example:
// Create a natural cubic spline above the earth from Philadelphia to Los Angeles.
const 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)
    ]
});
Clamps the given time to the period covered by the spline.
Name Type Description
time number The time.
Returns:
The time, clamped to the animation period.
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

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.
Wraps the given time to the period covered by the spline.
Name Type Description
time number The time.
Returns:
The time, wrapped around to the updated animation.
Need help? The fastest way to get answers is from the community and team on the Cesium Forum.