HermiteSpline

厄米样条曲线是三次插值样条曲线。必须为每个控制点定义点、传入切线、传出切线和时间。输出切线是为点[0,n-2]定义的,而输入切线是为点[1,n-1]定义的。例如,在points[i]points[i + 1]之间插入曲线段时,点处的切线分别为outTangents[i]inTangents[i]
new HermiteSpline(options)
Parameters:
options (Object)
Name Description
options.times
Array.<Number>
在每个点上严格递增的、无单位的浮点时间数组。这些值与时钟时间没有任何关系。它们是曲线的参数化。
options.points
Array.<Cartesian3>
Cartesian3控制点数组。
options.inTangents
Array.<Cartesian3>
每个控制点的Cartesian3输入切线数组。
options.outTangents
Array.<Cartesian3>
每个控制点的Cartesian3传出切线数组。
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 bmgl.HermiteSpline({
    times : times,
    points : [
        new bmgl.Cartesian3(1235398.0, -4810983.0, 4146266.0),
        new bmgl.Cartesian3(1372574.0, -5345182.0, 4606657.0),
        new bmgl.Cartesian3(-757983.0, -5542796.0, 4514323.0),
        new bmgl.Cartesian3(-2821260.0, -5248423.0, 4021290.0),
        new bmgl.Cartesian3(-2539788.0, -4724797.0, 3620093.0)
    ],
    outTangents : [
        new bmgl.Cartesian3(1125196, -161816, 270551),
        new bmgl.Cartesian3(-996690.5, -365906.5, 184028.5),
        new bmgl.Cartesian3(-2096917, 48379.5, -292683.5),
        new bmgl.Cartesian3(-890902.5, 408999.5, -447115)
    ],
    inTangents : [
        new bmgl.Cartesian3(-1993381, -731813, 368057),
        new bmgl.Cartesian3(-4193834, 96759, -585367),
        new bmgl.Cartesian3(-1781805, 817999, -894230),
        new bmgl.Cartesian3(1165345, 112641, 47281)
    ]
});

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

Members

(readonly) inTangents : Array.<Cartesian3>

每个控制点的Cartesian3输入切线数组。

(readonly) outTangents : Array.<Cartesian3>

每个控制点的Cartesian3传出切线数组。

(readonly) points : Array.<Cartesian3>

Cartesian3控制点数组。

(readonly) times : Array.<Number>

控制点的时间数组。

Methods

(static) createC1(options) → {HermiteSpline}
在每个控制点的切线相同的情况下创建样条曲线。曲线至少保证在C1级。
Parameters:
options (Object)
Name Description
options.times
Array.<Number>
控制点时间数组。
options.points
Array.<Cartesian3>
控制点数组。
options.tangents
Array.<Cartesian3>
控制点处的切线数组。
Example
var points = [
    new bmgl.Cartesian3(1235398.0, -4810983.0, 4146266.0),
    new bmgl.Cartesian3(1372574.0, -5345182.0, 4606657.0),
    new bmgl.Cartesian3(-757983.0, -5542796.0, 4514323.0),
    new bmgl.Cartesian3(-2821260.0, -5248423.0, 4021290.0),
    new bmgl.Cartesian3(-2539788.0, -4724797.0, 3620093.0)
];

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

var spline = bmgl.HermiteSpline.createC1({
    times : times,
    points : points,
    tangents : tangents
});
Throws
(static) createClampedCubic(options) → {HermiteSpline|LinearSpline}
创建夹紧的三次样条曲线。生成内部控制点的切线,以在C2类中创建曲线。
Parameters:
options (Object)
Name Description
options.times
Array.<Number>
控制点时间数组。
options.points
Array.<Cartesian3>
控制点数组。
options.firstTangent
Cartesian3
第一个控制点的外切线。
options.lastTangent
Cartesian3
最后一个控制点的传入切线。
Example
// Create a clamped cubic spline above the earth from Philadelphia to Los Angeles.
var spline = bmgl.HermiteSpline.createClampedCubic({
    times : [ 0.0, 1.5, 3.0, 4.5, 6.0 ],
    points : [
        new bmgl.Cartesian3(1235398.0, -4810983.0, 4146266.0),
        new bmgl.Cartesian3(1372574.0, -5345182.0, 4606657.0),
        new bmgl.Cartesian3(-757983.0, -5542796.0, 4514323.0),
        new bmgl.Cartesian3(-2821260.0, -5248423.0, 4021290.0),
        new bmgl.Cartesian3(-2539788.0, -4724797.0, 3620093.0)
    ],
    firstTangent : new bmgl.Cartesian3(1125196, -161816, 270551),
    lastTangent : new bmgl.Cartesian3(1165345, 112641, 47281)
});
Throws
(static) createNaturalCubic(options) → {HermiteSpline|LinearSpline}
创建自然三次样条曲线。生成控制点的切线,以在C2类中创建曲线。
Parameters:
options (Object)
Name Description
options.times
Array.<Number>
控制点时间数组。
options.points
Array.<Cartesian3>
控制点数组。
Example
// Create a natural cubic spline above the earth from Philadelphia to Los Angeles.
var spline = bmgl.HermiteSpline.createNaturalCubic({
    times : [ 0.0, 1.5, 3.0, 4.5, 6.0 ],
    points : [
        new bmgl.Cartesian3(1235398.0, -4810983.0, 4146266.0),
        new bmgl.Cartesian3(1372574.0, -5345182.0, 4606657.0),
        new bmgl.Cartesian3(-757983.0, -5542796.0, 4514323.0),
        new bmgl.Cartesian3(-2821260.0, -5248423.0, 4021290.0),
        new bmgl.Cartesian3(-2539788.0, -4724797.0, 3620093.0)
    ]
});
Throws
clampTime(time) → {Number}
将给定的时间钳制到样条曲线所覆盖的周期。
Parameters:
time (Number) 时间。
evaluate(time, result) → {Cartesian3}
在给定时间计算曲线。
Parameters:
time (Number) 评估曲线的时间。
result (Cartesian3) 存储结果的对象。
Throws
  • DeveloperError : 时间必须在[t0, tn]范围内,其中t0是数组times中的第一个元素,tn是数组times中的最后一个元素。
findTimeInterval(time) → {Number}
times中查找索引i,以便参数time在间隔[times[i], times[i + 1]]中。
Parameters:
time (Number) 时间。
Throws
  • DeveloperError : 时间必须在[t0, tn]范围内,其中t0是数组times中的第一个元素,tn是数组times中的最后一个元素。
wrapTime(time) → {Number}
将给定时间包装到样条曲线所覆盖的周期。
Parameters:
time (Number) 时间。