cesiusm 向某个方向平移指定距离(基础篇)

有时候我们得到一个点,和一个方向,沿着这个方向移动多少米,然后求目标点的坐标。或者知道两个点的连线,然后求距离起点指定距离的点。由于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)




你可能感兴趣的:(cesiusm 向某个方向平移指定距离(基础篇))