图片使用了动态线,具体看以下文章
https://everless.app/everless-net-drawing-dynamic-flowing-lines-in-cesium
实现代码
以下是一个用于绘制抛物线的函数,它接受起始点和终点的实体,然后根据这些信息绘制抛物线。
function createParabola(startEntity, endEntity) {
// 从起始点和终点的位置获取Cartographic坐标
var start = Cesium.Cartographic.fromCartesian(startEntity.position.getValue(viewer.clock.currentTime));
var end = Cesium.Cartographic.fromCartesian(endEntity.position.getValue(viewer.clock.currentTime));
// 抛物线的最大高度(单位:米)
var maxHeight = Math.max(start.height, end.height) + 100000;
// 起始点和终点之间的间距
var distance = Cesium.Cartesian3.distance(start, end);
// 计算抛物线的点
var points = [];
for (var i = 0; i <= 1; i += 0.01) {
var position = new Cesium.Cartographic(
Cesium.Math.lerp(start.longitude, end.longitude, i),
Cesium.Math.lerp(start.latitude, end.latitude, i)
);
// 使用二次贝塞尔曲线公式计算高度
var height = Math.pow((1 - i), 2) * start.height + 2 * (1 - i) * i * maxHeight + Math.pow(i, 2) * end.height;
position.height = height;
points.push(Cesium.Cartographic.toCartesian(position));
}
// 创建一条抛物线
viewer.entities.add({
name: '抛物线',
polyline: {
positions: points,
width: 1,
material: new PolylineTrailLinkMaterialProperty('./img/jianbian1.1.png', Cesium.Color.RED, 1000)
}
});
}
材质是可以随意替换的,这里用贝塞尔曲线计算的话会造成落点高度问题,即使用了二次贝塞尔曲线落点也会出现高度问题,目前不清楚是什么原因造成的(数学不好)