在Cesium的使用过程中,常常需要计算模型在移动过程中的朝向,除了可以利用位置信息让Cesium自动计算之外,还可以通过一些矩阵变换的方法控制模型的朝向,本篇文章笔者记录了自己计算模型朝向信息的方法,欢迎交流~

大致思路是先根据模型的速度信息、位置信息,建立模型本体坐标系,进而获取站心坐标系到模型坐标系的旋转矩阵,根据这个旋转矩阵获取欧拉角,最后再用模型的当前位置和欧拉角获得朝向四元数。
这里有两点需要说明:

  1. Cesium中的欧拉角(hpr)是对于站心坐标系而言的,使用Transforms.headingPitchRollQuaternion(position,hpr)这个方法,默认就是根据在地固坐标系下的当前位置信息和站心坐标系下的当前欧拉角(hpr)计算朝向四元数。
  2. 站心坐标系是东北天坐标系,在极点附近会发生180度的偏转,所以如果使用固定的欧拉角(hpr)在极点附近是会发生旋转现象的! 之所以先计算站心坐标系到模型坐标系的旋转矩阵,就是为了计算站心坐标系到模型坐标系中的偏移量,避免直接使用站心坐标系而发生的旋转现象

具体代码如下:

getQuaternion(positionEcf, velocityEcf) {// 1、计算站心到模型坐标系的旋转平移矩阵// 速度归一化let normal =  Cartesian3.normalize(velocityEcf, new  Cartesian3());// 计算模型坐标系的旋转矩阵let satRotationMatrix =  Transforms.rotationMatrixFromPositionVelocity(positionEcf, normal,  Ellipsoid.WGS84);// 模型坐标系到地固坐标系旋转平移矩阵let m =  Matrix4.fromRotationTranslation(satRotationMatrix, positionEcf);// 站心坐标系(东北天坐标系)到地固坐标系旋转平移矩阵var m1 =  Transforms.eastNorthUpToFixedFrame(positionEcf,  Ellipsoid.WGS84, new  Matrix4());// 站心到模型坐标系的旋转平移矩阵let m3 =  Matrix4.multiply( Matrix4.inverse(m1, new Matrix4()), m, new Matrix4());// 2、模型姿态旋转矩阵(根据实际需要)let h1 = 0, p1 = 0, r1 = 0;let postureHpr = new  HeadingPitchRoll( Math.toRadians(h1),  Math.toRadians(p1),  Math.toRadians(r1));let postureMatrix =  Matrix3.fromHeadingPitchRoll(postureHpr);// 3、模型朝向旋转矩阵let h2 = 0, p2 = -180, r2 = 0;let sHpr = new  HeadingPitchRoll( Math.toRadians(h2),  Math.toRadians(p2),  Math.toRadians(r2));let sMatrix =  Matrix3.fromHeadingPitchRoll(sensorHpr);// 4、最终的旋转矩阵let mat3 =  Matrix4.getMatrix3(m3, new  Matrix3());let finalMatrix =  Matrix3.multiply(mat3,postureMatrix,new  Matrix3());let finalMatrix1 =  Matrix3.multiply(finalMatrix, sMatrix, new  Matrix3())let quaternion1 =  Quaternion.fromRotationMatrix(finalMatrix1);let hpr =  HeadingPitchRoll.fromQuaternion(quaternion1);let q2 =  Transforms.headingPitchRollQuaternion(positionEcf,hpr);return q2;}

上文中使用Transforms.rotationMatrixFromPositionVelocity(positionEcf, normal, Ellipsoid.WGS84)计算模型坐标系的旋转矩阵,这是cesium自带的方法,我在另一篇博文里有分析它的源码
对rotationMatrixFromPositionVelocity方法的理解

综上,可以实现模型在运动过程中的调整朝向,欢迎交流~

【Cesium】计算模型的朝向四元数,实现模型运动中调整朝向相关推荐

  1. R语言使用yardstick包的conf_mat函数计算多分类(Multiclass)模型的混淆矩阵、并使用summary函数基于混淆矩阵输出分类模型评估的其它详细指标(kappa、npv等13个)

    R语言使用yardstick包的conf_mat函数计算多分类(Multiclass)模型的混淆矩阵(confusion matrix).并使用summary函数基于混淆矩阵输出分类模型评估的其它详细 ...

  2. R语言偏相关或者部分相关性系数计算实战:使用psych包计算(Partial Correlation)偏相关系数、拟合回归模型使用两个回归模型的残差计算偏相关性系数

    R语言偏相关或者部分相关性系数计算实战:使用psych包计算(Partial Correlation)偏相关系数.拟合回归模型使用两个回归模型的残差计算偏相关性系数 目录

  3. R语言glmnet拟合lasso回归模型实战:lasso回归模型的模型系数及可视化、lasso回归模型分类评估计算(混淆矩阵、accuracy、Deviance)

    R语言glmnet拟合lasso回归模型实战:lasso回归模型的模型系数(lasso regression coefficients)及可视化.lasso回归模型分类评估计算(混淆矩阵.accura ...

  4. R语言glm拟合logistic回归模型:模型评估(计算模型拟合的统计显著性)、模型评估(赤信息AIC指标计算)

    R语言glm拟合logistic回归模型:模型评估(计算模型拟合的统计显著性).模型评估(赤信息AIC指标计算) 目录

  5. R语言Box-Cox变换实战(Box-Cox Transformation):将非正态分布数据转换为正态分布数据、计算最佳λ、变换后构建模型

    R语言Box-Cox变换实战(Box-Cox Transformation):将非正态分布数据转换为正态分布数据.计算最佳λ.变换后构建模型 目录

  6. TensorFlow零基础入门指南——计算模型、数据模型、运行模型!

    点上方蓝字计算机视觉联盟获取更多干货 在右上方 ··· 设为星标 ★,与你不见不散 正文一共:4110,预计阅读时间:11分钟 本篇文章主要介绍TensorFlow的基本概念,包含TensorFlow ...

  7. cesium 使用entities、primitives添加的模型并且改变模型颜色

    entities方式绘制模型:[线条] var gltf = viewer.entities.add({guid: crossguid,name: 'gltf',polyline: {width: 1 ...

  8. 分类模型-评估指标(2):ROC曲线、 AUC值(ROC曲线下的面积)【只能用于二分类模型的评价】【不受类别数量不平衡的影响;不受阈值取值的影响】【AUC的计算方式:统计所有正负样本对中的正序对】

    评价二值分类器的指标很多,比如precision.recall.F1 score.P-R曲线等.但这些指标或多或少只能反映模型在某一方面的性能.相比而言,ROC曲线则有很多优点,经常作为评估二值分类器 ...

  9. 湍流参数计算c语言,常用的湍流模型

    原文作者:Shawn Wasserman,ENGINEERING.com网站仿真编辑. 1 为正确的湍流模型使用正确的CFD模型 一个虚构的故事.海森堡说"当我遇到上帝的时候,我会问他两个问 ...

最新文章

  1. html5 FileReader初识
  2. Angular2 组件通信
  3. 学习Python3:201701030
  4. MySQL模糊查询—between and关键字
  5. CasperJS基于PhantomJS抓取页面
  6. 虚虚实实,亦假亦真的 ValueTuple,绝对能眩晕你
  7. 汇编:实现日历星期数查询工具
  8. win7如何添加终端服务器,Windows7系统超级终端的添加方法 win7如何添加超级终端...
  9. Adobe illustrator 排版后图形导出 - 连载 3
  10. 关于django内置的ModelForm小记
  11. Spring : Spring 事务控制 设置手动回滚 TransactionAspectSupport
  12. python 与栈 入门
  13. KeyMob聚合致力于为广大开发者及广告聚合服务
  14. ADL之UI初预览 AJAX 开发
  15. 赛题解读 | 如何基于 Flink + AI 解决疫情防控难题?
  16. RabbitMQ死信队列应用场景之模拟未支付订单自动取消
  17. en55032最新标准下载_欧盟多媒体设备CE认证将使用新标准EN55032
  18. 科学计算机复杂公式计算公式,超级公式计算器
  19. Excel 10个高级办公技巧
  20. NetworkX使用手册

热门文章

  1. Markdown详细教程
  2. 如何将多个文本文档合并到一个文档中?
  3. SSL2811 2017年10月30日提高组T2 摘Galo(树形dp)
  4. 西湖大学正式开学! 120名博士新生入校,每月补助5000多元
  5. 建立大学生职业成长规划4个步骤
  6. window下python安装包问题小结
  7. Dhrystone简介
  8. Mycat生产实践---数据迁移与扩容实践
  9. ICCV 2021 | 视觉Transformer中的相对位置编码
  10. MCUXpresso开发NXP RT1060(3)——移植LVGL到NXP RT1060