有時(shí)候我們得到一個(gè)點(diǎn)弹惦,和一個(gè)方向,沿著這個(gè)方向移動(dòng)多少米悄但,然后求目標(biāo)點(diǎn)的坐標(biāo)棠隐。或者知道兩個(gè)點(diǎn)的連線算墨,然后求距離起點(diǎn)指定距離的點(diǎn)宵荒。由于Cesium使用的世界直接坐標(biāo)系是以地球中心為原點(diǎn)汁雷,計(jì)算距離的單位為米净嘀,所以需要朝那個(gè)方向平移多少距離,可以使用 原點(diǎn)坐標(biāo)向量+k(移動(dòng)的距離侠讯,單位為米)*單位向量(起點(diǎn)到終點(diǎn)的方向的單位向量)= 目標(biāo)點(diǎn)位置
可以使用下面的方法進(jìn)行計(jì)算挖藏。
/**
???*?@description:?給定兩個(gè)點(diǎn),求根據(jù)平移距離在兩個(gè)點(diǎn)連線得到目標(biāo)點(diǎn)
???*?@param?{Cartesian3}?start?原點(diǎn)
???*?@param?{Cartesian3}?end?終點(diǎn)
???*?@param?{Number}?offset?平移距離厢漩,單位米
???*?@return?{Cartesian3}?目標(biāo)點(diǎn)
???*/
? function translateByDistanceSalar(start,?end,?offset)?{
????//先求模長(zhǎng)
????let?sub?=?Cesium.Cartesian3.subtract(end,?start,?new?Cesium.Cartesian3());
????let?length?=?Cesium.Cartesian3.magnitude(sub);
????//根據(jù)偏移量求偏移向量
????let?scalerNormalize?=?Cesium.Cartesian3.multiplyByScalar(
??????sub,
??????offset?/?length,
??????new?Cesium.Cartesian3()
????);
????//將起點(diǎn)向量加偏移向量
????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);//求距離起點(diǎn)10米的兩點(diǎn)連線上的點(diǎn)的位置
console.log(?tagert)
??/**
???*?@description:?根據(jù)一個(gè)原點(diǎn)膜眠,向一個(gè)方向上平移多少米后,求得另一個(gè)點(diǎn)的坐標(biāo)
???*?@param?{Cartesian3}?start?原點(diǎn)
???*?@param?{Cartesian3}?direction?起點(diǎn)指向終點(diǎn)的方向
???*?@param?{Number}?offset?平移距離溜嗜,單位米
???*?@return?{Cartesian3}?目標(biāo)點(diǎn)
???*/
?function translateByDirection(start,?direction,?offset)?{
????let?normalize?=?Cesium.Cartesian3.normalize(
??????direction,
??????new?Cesium.Cartesian3()
????);
????//根據(jù)偏移量求偏移向量
????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);//求距離起點(diǎn)10米的兩點(diǎn)連線上的點(diǎn)的位置
console.log( tagert)