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:
|
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:
Members
-
readonlyinTangents : Array.<Cartesian3>
-
An array of
Cartesian3
incoming tangents at each control point. -
readonlyoutTangents : Array.<Cartesian3>
-
An array of
Cartesian3
outgoing tangents at each control point. -
readonlypoints : Array.<Cartesian3>
-
An array of
Cartesian3
control points. -
An array of times for the control points.
Methods
-
staticCesium.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:
-
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
-
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
-
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) ] });
-
-
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]
, wheret0
is the first element in the arraytimes
andtn
is the last element in the arraytimes
.
-
-
Finds an index
i
intimes
such that the parametertime
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]
, wheret0
is the first element in the arraytimes
andtn
is the last element in the arraytimes
.
-
-
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.