我正在尝试使用铯中的两个直角3点来计算航向和俯仰:
getHeading(pointA,pointB){
const transform=Cesium.Transforms.eastNorthUpToFixedFrame(pointA);
const vector2=Cesium.Cartesian3.subtract(pointA,pointB,new Cesium.Cartesian3());
const vector=Cesium.Matrix4.multiplyByPoint(fixedTransform,vector2,new Cesium.Cartesian3());
const direction=Cesium.Cartesian3.normalize(vector,new Cesium.Cartesian3());
const heading=Math.atan2(direction.y,direction.x)-Cesium.Math.PI_OVER_TWO;
return Cesium.Math.toDegrees(Cesium.Math.TWO_PI-Cesium.Math.zeroToTwoPi(heading));
}
但是它不起作用,有人可以给我一些建议吗?谢谢!
答案 0 :(得分:1)
解决方案:
getHeading(pointA:Cesium.Cartesian3,pointB:Cesium.Cartesian3){
const transform=Cesium.Transforms.eastNorthUpToFixedFrame(pointA);
const positionvector=Cesium.Cartesian3.subtract(pointB,pointA,new Cesium.Cartesian3());
const vector=Cesium.Matrix4.multiplyByPointAsVector(Cesium.Matrix4.inverse(transform,new Cesium.Matrix4()),positionvector,new Cesium.Cartesian3());
const direction=Cesium.Cartesian3.normalize(vector,new Cesium.Cartesian3());
//heading
const heading=Math.atan2(direction.y,direction.x)-Cesium.Math.PI_OVER_TWO;
//pitch
const pitch=Cesium.Math.PI_OVER_TWO-Cesium.Math.acosClamped(direction.z);
return Cesium.Math.toDegrees(Cesium.Math.TWO_PI-Cesium.Math.zeroToTwoPi(heading));
}