HermiteSpline

new LSGlobe.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 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 LSGlobe.HermiteSpline({
    times : times,
    points : [
        new LSGlobe.Cartesian3(1235398.0, -4810983.0, 4146266.0),
        new LSGlobe.Cartesian3(1372574.0, -5345182.0, 4606657.0),
        new LSGlobe.Cartesian3(-757983.0, -5542796.0, 4514323.0),
        new LSGlobe.Cartesian3(-2821260.0, -5248423.0, 4021290.0),
        new LSGlobe.Cartesian3(-2539788.0, -4724797.0, 3620093.0)
    ],
    outTangents : [
        new LSGlobe.Cartesian3(1125196, -161816, 270551),
        new LSGlobe.Cartesian3(-996690.5, -365906.5, 184028.5),
        new LSGlobe.Cartesian3(-2096917, 48379.5, -292683.5),
        new LSGlobe.Cartesian3(-890902.5, 408999.5, -447115)
    ],
    inTangents : [
        new LSGlobe.Cartesian3(-1993381, -731813, 368057),
        new LSGlobe.Cartesian3(-4193834, 96759, -585367),
        new LSGlobe.Cartesian3(-1781805, 817999, -894230),
        new LSGlobe.Cartesian3(1165345, 112641, 47281)
    ]
});

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

Members

readonly inTangents : Array.<Cartesian3>

An array of Cartesian3 incoming tangents at each control point.

readonly outTangents : Array.<Cartesian3>

An array of Cartesian3 outgoing tangents at each control point.

readonly points : Array.<Cartesian3>

An array of Cartesian3 control points.

readonly times : Array.<Number>

An array of times for the control points.

Methods

static LSGlobe.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:
var points = [
    new LSGlobe.Cartesian3(1235398.0, -4810983.0, 4146266.0),
    new LSGlobe.Cartesian3(1372574.0, -5345182.0, 4606657.0),
    new LSGlobe.Cartesian3(-757983.0, -5542796.0, 4514323.0),
    new LSGlobe.Cartesian3(-2821260.0, -5248423.0, 4021290.0),
    new LSGlobe.Cartesian3(-2539788.0, -4724797.0, 3620093.0)
];

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

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

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

static LSGlobe.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.
var spline = LSGlobe.HermiteSpline.createNaturalCubic({
    times : [ 0.0, 1.5, 3.0, 4.5, 6.0 ],
    points : [
        new LSGlobe.Cartesian3(1235398.0, -4810983.0, 4146266.0),
        new LSGlobe.Cartesian3(1372574.0, -5345182.0, 4606657.0),
        new LSGlobe.Cartesian3(-757983.0, -5542796.0, 4514323.0),
        new LSGlobe.Cartesian3(-2821260.0, -5248423.0, 4021290.0),
        new LSGlobe.Cartesian3(-2539788.0, -4724797.0, 3620093.0)
    ]
});

clampTime(time)Number

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.

evaluate(time, result)Cartesian3

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.

wrapTime(time)Number

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.