CatmullRomSpline
类是一个表示 Catmull-Rom 样条曲线的类,用于在 Cesium 中创建平滑的轨迹。
let points = [Cesium.Cartesian3, ...];
let catmullRomSpline = new Cesium.CatmullRomSpline({
times: [Number, ...],
points,
firstTangent: Cesium.Cartesian3,
lastTangent: Cesium.Cartesian3,
});
times
: 数组类型,表示每个端点的时间戳,时间戳必须单调递增,且长度要和 points
数组对应。points
: 数组类型,表示曲线通过的节点集合,每个节点是一个 Cartesian3
类型的坐标对象。firstTangent
: Cartesian3
类型,表示起点的切向量,默认为第一个节点到第二个节点形成的向量。lastTangent
: Cartesian3
类型,表示终点的切向量,默认为倒数第二个节点到最后一个节点形成的向量。const catmullRomSpline = new Cesium.CatmullRomSpline({
times: [0.0, 1.0, 2.0, 3.0],
points: [
new Cesium.Cartesian3(-1390000.0, 5350000.0, 3220000.0),
new Cesium.Cartesian3(-1370000.0, 5460000.0, 3190000.0),
new Cesium.Cartesian3(-1250000.0, 5600000.0, 3170000.0),
new Cesium.Cartesian3(-1040000.0, 5600000.0, 3240000.0),
],
});
evaluate
let p = catmullRomSpline.evaluate(t);
该方法通过带入参数 t
得到 CatmullRomSpline
曲线上的点。
t
: number
类型,表示时间戳,t 的值必须在 times
数组所描述的时间范围内。p
:Cartesian3
类型,表示该时间戳所在位置上的点的坐标。const p = catmullRomSpline.evaluate(1.5);
times
: Array<number>
类型,表示每个端点的时间戳。points
: Array<Cartesian3>
类型,表示曲线通过的节点集合。firstTangent
: Cartesian3
类型,表示起点的切向量。lastTangent
: Cartesian3
类型,表示终点的切向量。console.log(catmullRomSpline.times);
console.log(catmullRomSpline.points);
CatmullRomSpline
的节点数必须大于等于 4,在节点数小于 4 的情况下该类型的行为是未定义的。CatmullRomSpline
使用的算法是 Catmull-Rom 样条曲线,该算法被广泛应用在计算机图形学和计算机动画领域,因其在保持轨迹平滑性的同时简化了计算过程而备受青睐。CatmullRomSpline
的时间戳必须单调递增,这意味着你不能传递 [1.0, 2.0, 2.5] 的时间戳,但你可以传递 [1.0, 2.0, 3.0],再用传统的步长插值来获取一个类似的效果。