【问题标题】:Cesium calculate bearing rotation from 2 positionsCesium从2个位置计算轴承旋转
【发布时间】:2019-01-28 09:09:34
【问题描述】:

我正在向 Cesium 添加一个平面实体,如下所示:

let position = Cesium.Cartesian3.fromDegrees(long, lat, alt)
let planeEntity = this.viewer.entities.add({
  position: position,
  model: {
    uri: './assets/cesium/Cesium_Air.glb',
    minimumPixelSize : 64
  }
});

我实时获取飞机位置,每次到达位置时我都会这样做:

planeEntity.position = Cesium.Cartesian3.fromDegrees(long, lat, alt);

并将飞机移动到该位置。

我想将飞机头旋转到正确的位置(如果飞机向上飞行,头不能停留在左侧)。

如何从 2 个位置计算轴承旋转? (当前位置和下一个位置)?

【问题讨论】:

    标签: javascript cesium


    【解决方案1】:

    我在这里找到了解决方案: [Calculate bearing between 2 points with javascript

     // Converts from degrees to radians.
       toRadians(degrees) {
        return degrees * Math.PI / 180;
      }
    
    // Converts from radians to degrees.
       toDegrees(radians) {
        return radians * 180 / Math.PI;
      }
    
       bearing(startLat, startLng, destLat, destLng){
        startLat = this.toRadians(startLat);
        startLng = this.toRadians(startLng);
        destLat = this.toRadians(destLat);
        destLng = this.toRadians(destLng);
    
        let y = Math.sin(destLng - startLng) * Math.cos(destLat);
        let x = Math.cos(startLat) * Math.sin(destLat) - Math.sin(startLat) * Math.cos(destLat) * Math.cos(destLng - startLng);
        let brng = Math.atan2(y, x);
        let brngDgr = this.toDegrees(brng);
        return (brngDgr + 360) % 360;
      }
    

    【讨论】:

      【解决方案2】:

      基于 larry ckey 回答的铯方式(ES6):

      import * as Cesium from 'cesium';
      
      const calculateBearing = (startPoint, endPoint) => {
        const start = Cesium.Cartographic.fromCartesian(startPoint);
        const end = Cesium.Cartographic.fromCartesian(endPoint);
      
        const y = Math.sin(end.longitude - start.longitude) * Math.cos(end.latitude);
        const x =
          Math.cos(start.latitude) * Math.sin(end.latitude) -
          Math.sin(start.latitude) * Math.cos(end.latitude) *
          Math.cos(end.longitude - start.longitude);
      
        const bearing = Math.atan2(y, x);
        return Cesium.Math.toDegrees(bearing);
      }
      

      【讨论】:

        猜你喜欢
        • 2018-02-13
        • 2015-08-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-10-28
        • 2010-11-06
        相关资源
        最近更新 更多