可以根据输入的坐标数组和要求两个点位间距生成均匀的插值点坐标
/**
* 生成均匀随机点坐标
* @param {Array} positions Cartesian3数据[{x:1,y:1,z:1},...]
* @param {Number} number 生成的随机点数
* @returns 返回生成的随机点坐标集合
*/
lerpPosition(positions, number) {
var timeNumber = [];
var lineDiatance = 0;
var everyTime = 0;
var tempDis = 0;
const pointPosition = [];
if (positions.length === 0) return;
for (let i = 0; i < positions.length - 1; ++i) {
lineDiatance += this.Cesium.Cartesian3.distance(
positions[i],
positions[i + 1]
);
}
for (let i = 0; i < positions.length; i++) {
if (i === 0) {
everyTime = 0;
} else {
tempDis += this.Cesium.Cartesian3.distance(
positions[i - 1],
positions[i]
);
everyTime = tempDis / lineDiatance;
}
timeNumber.push(everyTime);
}
var spline = new this.Cesium.LinearSpline({
times: timeNumber,
points: positions
});
for (let i = 0; i <= number; i++) {
var cartesian3 = spline.evaluate(i / number);
pointPosition.push(cartesian3);
// 绘制插值点
var interPoint = this.viewer.entities.add({
position: cartesian3,
point: {
color: this.Cesium.Color.YELLOW,
pixelSize: 6,
disableDepthTestDistance: Number.POSITIVE_INFINITY
}
});
}
return pointPosition;
}