侧边栏壁纸
  • 累计撰写 21 篇文章
  • 累计创建 6 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

Cesium 插值

南风过境
2023-12-22 / 0 评论 / 0 点赞 / 12 阅读 / 1342 字 / 正在检测是否收录...

前言

之前做过一个基于 Cesium 的演示系统,有个需求是沿给定的一条路线让相机漫游,但由于给的路线数据是不连续的,也就是画出来的路线是不平滑的(如下图),现在需要通过一些办法将给定的路线转成一条相对比较平滑的路线

方法

Cesium API 中有几个计算插值的方法:LinearSpline,CatmullRomSpline,HermiteSpline

这里以CatmullRomSpline 的插值方式为例

const carPositions = [
	Cesium.Cartesian3.fromDegrees(110, 20, 28000), 
    Cesium.Cartesian3.fromDegrees(101, 21, 26000), 
    Cesium.Cartesian3.fromDegrees(102, 19, 26000), 
    Cesium.Cartesian3.fromDegrees(104, 21, 26000), 
    Cesium.Cartesian3.fromDegrees(103, 23, 210000) 
]

const spline = new Cesium.CatmullRomSpline({ 
    points: carPositions, 
    times: [0.0, 0.25, 0.5, 0.75, 1], 
}); 

 // 插值100个点 
const newPositions = []; 
for (let i = 0; i <= 100; i++) { 
  const cartesian3 = spline.evaluate(i / 100); 
  newPositions.push(cartesian3); 
} 
const entity = viewer.entities.add({
  polyline: {
    positions: newPositions
  }
})

viewer.zoomTo(entity)

最终效果

0

评论区