有时候我们得到一个点,和一个方向,沿着这个方向移动多少米,然后求目标点的坐标。或者知道两个点的连线,然后求距离起点指定距离的点。由于Cesium使用的世界直接坐标系是以地球中心为原点,计算距离的单位为米,所以需要朝那个方向平移多少距离,可以使用 原点坐标向量+k(移动的距离,单位为米)*单位向量(起点到终点的方向的单位向量)= 目标点位置
可以使用下面的方法进行计算。
/**
* @description: 给定两个点,求根据平移距离在两个点连线得到目标点
* @param {Cartesian3} start 原点
* @param {Cartesian3} end 终点
* @param {Number} offset 平移距离,单位米
* @return {Cartesian3} 目标点
*/
function translateByDistanceSalar(start, end, offset) {
//先求模长
let sub = Cesium.Cartesian3.subtract(end, start, new Cesium.Cartesian3());
let length = Cesium.Cartesian3.magnitude(sub);
//根据偏移量求偏移向量
let scalerNormalize = Cesium.Cartesian3.multiplyByScalar(
sub,
offset / length,
new Cesium.Cartesian3()
);
//将起点向量加偏移向量
return Cesium.Cartesian3.add(
start,
scalerNormalize,
new Cesium.Cartesian3()
);
}
let start=new Cesium. Cartesian3(1,1,1);
let end=new Cesium. Cartesian3(2,10,11);
let tagert=translateByDistanceSalar(start,end,10);//求距离起点10米的两点连线上的点的位置
console.log( tagert)
/**
* @description: 根据一个原点,向一个方向上平移多少米后,求得另一个点的坐标
* @param {Cartesian3} start 原点
* @param {Cartesian3} direction 起点指向终点的方向
* @param {Number} offset 平移距离,单位米
* @return {Cartesian3} 目标点
*/
function translateByDirection(start, direction, offset) {
let normalize = Cesium.Cartesian3.normalize(
direction,
new Cesium.Cartesian3()
);
//根据偏移量求偏移向量
let scalerNormalize = Cesium.Cartesian3.multiplyByScalar(
normalize,
offset,
new Cesium.Cartesian3()
);
return Cesium.Cartesian3.add(
start,
scalerNormalize,
new Cesium.Cartesian3()
);
}
let start1=new Cesium. Cartesian3(1,1,1);
let end1=new Cesium. Cartesian3(2,10,11);
let direction =Cesium. Cartesian3. subtract(end1,start1,new Cesium. Cartesian3)
let tagert= translateByDirection (start1, direction ,10);//求距离起点10米的两点连线上的点的位置
console.log( tagert)