import { Cartesian3, Entity, Matrix3, Matrix4, Quaternion, HeadingPitchRoll } from '@cesium/engine'; import { PositionType } from '../utils/ParsePosition.ts'; export default class Direction { /** * 计算A点到B点,方向的航向角(已经测试验证) * @param pointA * @param pointB * @returns 获取航向角 (弧度制) */ static getHeading(pointA: PositionType, pointB: PositionType): number; /** * 废弃,日后删除 * 旧方法(某些情况下也有问题) * 计算A点到B点的航向角heading * 使用getHeadingPitchRoll计算HPR,然后得到hpr.heading * @param pointA * @param pointB * @returns 弧度 */ /** * 获取俯仰角 (弧度制) * @param pointA * @param pointB * @returns */ static getPitch(pointA: PositionType, pointB: PositionType): number; /** * 获取A点到B点的翻滚角roll (弧度值) * @param pointA * @param pointB * @returns */ static getRoll(pointA: PositionType, pointB: PositionType): number; /** * 根据航向,获取方向矢量 * @param heading 弧度值 * @param pitch 弧度值 * @param roll 弧度值 * @param isDegree 是否是经纬度,默认false * @returns 一个世界坐标系下的向量 * 上述代码中的direction向量是一个世界坐标系下的向量, * 如果需要将其转换为相机坐标系或其他坐标系下的向量,需要使用不同的转换方法。 */ static getDirctionByHPR(heading: number, pitch: number, roll: number, isDegree?: boolean): Cartesian3; /** * 获取A到B,的旋转矩阵 * @param pointA * @param pointB */ static getRotationMatrix3(pointA: PositionType, pointB: PositionType): Matrix3; /** * 根据AB,获取A 的模型矩阵 * @param pointA * @param pointB * @returns */ static getModelMatrix(pointA: PositionType, pointB: PositionType): Matrix4; /** * 以center为原点,建立局部坐标系(东方向为x轴,北方向为y轴,垂直于地面为z轴), * 得到一个局部坐标到世界坐标转换的变换矩阵 * 计算 将模型添加到某点,其对应的ModelMatrix * @param center 位置点 * @returns */ static getLocalToWorldMatrix(center: PositionType): Matrix4; /** * 求世界坐标到局部坐标的变换矩阵 * 以center为原点,建立局部坐标系 * @param center * @returns */ static getWorldToLocalMatrix(center: PositionType): Matrix4; /** * 由世界坐标worldA,转为局部坐标localA * @param worldToLocalMatrix * @param worldA * @returns */ static getWorldToLocalPostion(worldToLocalMatrix: Matrix4, worldA: PositionType): Cartesian3; /** * 局部坐标localA 转为 世界坐标worldA * @param localMatrix 以center为原点,建立局部坐标系(东方向为x轴,北方向为y轴,垂直于地面为z轴), * @param localA * @returns */ static getLocalToWorldPostion(localMatrix: Matrix4, localA: PositionType): Cartesian3; /** * 根据A B,获取A处的Orientation * @param pointA 点A * @param pointB 点B * @returns */ static getOrientation(pointA: PositionType, pointB: PositionType): Quaternion; /** * 根据A B获取方向角 * @param pointA 点A * @param pointB 点B * @returns */ static getHeadingPitchRoll(pointA: PositionType, pointB: PositionType): HeadingPitchRoll; /** * 新方法 * 计算A到B的航向信息 * @param pointA * @param pointB * @returns */ static getHeadingPitchRoll2(pointA: PositionType, pointB: PositionType): HeadingPitchRoll; /** * 根据航向,获取 Orientation * @param prevPosition 前一个点 * @param heading 默认,弧度值 * @param pitch 默认,弧度值 * @param roll 默认,弧度值 * @param isDegree 是否是经纬度,默认false * @returns */ static getOrientationByHPR(prevPosition: Cartesian3, heading: number, pitch: number, roll: number, isDegree?: boolean): Quaternion; /** * 根据实体方位计算旋转角度(弧度制) * @param targetEntity 实体 * @param viewer Viewer或XViewer * @returns */ static getHeadingPitchRollByEntity(targetEntity: Entity, viewer: any): HeadingPitchRoll; /** * 新(可用的) * 根据实体方位计算旋转角度(弧度制) * @param targetEntity 实体 * @param viewer Viewer或XViewer * @returns */ static getHeadingPitchRollByEntity2(targetEntity: Entity, viewer: any): HeadingPitchRoll; /** * 计算模型在移动过程中的朝向 * 计算模型的朝向四元数,实现模型运动中调整朝向 * @param positionEcf 位置信息 * @param velocityEcf 速度信息 * @returns */ static getEntityMoveOrientation(position: PositionType, velocityEcf: Cartesian3): Quaternion; /** * Cesium航向角转方向角(北基准,逆时针) * @param {Number} heading 航向角(单位:度,0~360) * @returns {Number} 方向角(单位:度,0~360) */ static headingToAzimuth(heading: any): number; /** * 方向角转Cesium航向角(北基准,逆时针) * @param {Number} azimuth 方向角(单位:度,0~360) * @returns {Number} 航向角(单位:度,0~360) */ static azimuthToHeading(azimuth: any): number; /** * 航向角(弧度)转方向角(弧度) * @param {Number} headingRadians 航向角(弧度) * @returns {Number} 方向角(弧度) */ static headingToAzimuthRadians(headingRadians: number): number; /** * 方向角(弧度)转航向角(弧度) * @param {Number} azimuthRadians 方向角(弧度) * @returns {Number} 航向角(弧度) */ static azimuthToHeadingRadians(azimuthRadians: number): number; }