前面在讨论两个不同坐标系之间的转换时都是通过欧拉旋转或者四元素来定义的。今天直接给出方向余弦阵的定义和用途。

方向余弦的定义

方向余弦是指在解析几何里,一个向量的三个方向余弦分别是这向量与三个坐标轴之间的角度的余弦。
如下图中,矢量A与坐标系三个轴i,j,ki,j,ki,j,k的夹角为α,β,γ\alpha,\beta,\gammaα,β,γ,则矢量A的方向余弦就是:
[cos⁡(α),cos⁡(β),cos⁡(γ)][\cos(\alpha),\cos(\beta),\cos(\gamma)][cos(α),cos(β),cos(γ)]

方向余弦矩阵

方向余弦矩阵是由两组不同的标准正交基的基底向量之间的方向余弦所形成的矩阵。方向余弦矩阵可以用来表达一组标准正交基与另一组标准正交基之间的关系。
使用ib,jb,kbi_b,j_b,k_bib​,jb​,kb​表示直角坐标系oxbybzb(b系)ox_by_bz_b(b系)oxb​yb​zb​(b系)的三个坐标轴的基向量,用ii,ji,kii_i,j_i,k_iii​,ji​,ki​表示直角坐标系oxiyizi(i系)ox_iy_iz_i(i系)oxi​yi​zi​(i系)的三个坐标轴的基向量,则ib,jb,kbi_b,j_b,k_bib​,jb​,kb​(单位向量)分别可用ii,ji,kii_i,j_i,k_iii​,ji​,ki​表示:
{ib=(ib⋅ii)ii+(ib⋅ji)ji+(ib⋅ki)kijb=(jb⋅ii)ii+(jb⋅ji)ji+(jb⋅ki)kikb=(kb⋅ii)ii+(kb⋅ji)ji+(kb⋅ki)ki(1)\left\{\begin{matrix} i_b=(i_b\cdot i_i)i_i+(i_b\cdot j_i)j_i+(i_b\cdot k_i)k_i\\ j_b=(j_b\cdot i_i)i_i+(j_b\cdot j_i)j_i+(j_b\cdot k_i)k_i\\ k_b=(k_b\cdot i_i)i_i+(k_b\cdot j_i)j_i+(k_b\cdot k_i)k_i\\ \end{matrix}\right. \qquad(1)⎩⎨⎧​ib​=(ib​⋅ii​)ii​+(ib​⋅ji​)ji​+(ib​⋅ki​)ki​jb​=(jb​⋅ii​)ii​+(jb​⋅ji​)ji​+(jb​⋅ki​)ki​kb​=(kb​⋅ii​)ii​+(kb​⋅ji​)ji​+(kb​⋅ki​)ki​​(1)
上式中,
[(ib⋅ii),(ib⋅ji),(ib⋅ki)][(i_b\cdot i_i),(i_b\cdot j_i),(i_b\cdot k_i)][(ib​⋅ii​),(ib​⋅ji​),(ib​⋅ki​)]为单位矢量ibi_bib​ 在坐标系oxiyiziox_iy_iz_ioxi​yi​zi​的方向余弦;
[(jb⋅ii),(jb⋅ji),(jb⋅ki)][(j_b\cdot i_i),(j_b\cdot j_i),(j_b\cdot k_i)][(jb​⋅ii​),(jb​⋅ji​),(jb​⋅ki​)]为单位矢量jbj_bjb​ 在坐标系oxiyiziox_iy_iz_ioxi​yi​zi​的方向余弦;
[(kb⋅ii),(kb⋅ji),(kb⋅ki)][(k_b\cdot i_i),(k_b\cdot j_i),(k_b\cdot k_i)][(kb​⋅ii​),(kb​⋅ji​),(kb​⋅ki​)]为单位矢量kbk_bkb​ 在坐标系oxiyiziox_iy_iz_ioxi​yi​zi​ 的方向余弦。

将ib,jb,kbi_b,j_b,k_bib​,jb​,kb​分别在坐标系oxiyiziox_iy_iz_ioxi​yi​zi​的方向余弦组成矩阵MMM(注意,按列组成):
M=[ib⋅iijb⋅iikb⋅iiib⋅jijb⋅jikb⋅jiib⋅kijb⋅kikb⋅ki](2)M=\begin{bmatrix} i_b\cdot i_i &j_b\cdot i_i &k_b\cdot i_i\\ i_b\cdot j_i &j_b\cdot j_i &k_b\cdot j_i\\ i_b\cdot k_i &j_b\cdot k_i &k_b\cdot k_i \end{bmatrix} \qquad(2)M=⎣⎡​ib​⋅ii​ib​⋅ji​ib​⋅ki​​jb​⋅ii​jb​⋅ji​jb​⋅ki​​kb​⋅ii​kb​⋅ji​kb​⋅ki​​⎦⎤​(2)
则矩阵MMM即为b系到i系的坐标变换矩阵(推导过程略)。

假设点P在b系中的坐标为[xb,yb,zb]T\begin{bmatrix} x_b,y_b,z_b\end{bmatrix}^{T}[xb​,yb​,zb​​]T,在i系中的坐标为[xi,yi,zi]T\begin{bmatrix} x_i,y_i,z_i\end{bmatrix}^{T}[xi​,yi​,zi​​]T,则两者通过坐标旋转矩阵MMM联系:
[xiyizi]=M⋅[xbybzb](3)\begin{bmatrix} x_i\\y_i \\z_i \end{bmatrix}= M\cdot\begin{bmatrix} x_b \\y_b \\z_b \end{bmatrix} \qquad(3)⎣⎡​xi​yi​zi​​⎦⎤​=M⋅⎣⎡​xb​yb​zb​​⎦⎤​(3)

方向余弦的应用

之前我们通过欧拉旋转或者四元素的方式得到两个坐标系之间的坐标变换矩阵MMM,而现在我们多了一种方法得到MMM。

假设上式中,iii系为原始坐标系,bbb系为相机坐标系,那么我只要知道了相机坐标系(b系)的三个坐标轴的基向量ib,jb,kbi_b,j_b,k_bib​,jb​,kb​在iii系中的坐标(方向余弦,式1),就可以得到坐标变换矩阵MMM(式2)。实际上只要知道两个基向量即可,剩下的用前两个基向量叉乘即可。

Cesium中的相机—方向余弦阵相关推荐

  1. Cesium中的相机—旋转矩阵

    在学习坐标旋转的时候,一不小心就会把坐标系的旋转和矢量的旋转弄错,这里给出详细的两种旋转过程: 两种旋转矩阵的定义 下面仅以绕Z轴旋转为例,给出两种旋转的过程定义. 坐标系旋转,点不变(见下左图) 两 ...

  2. Cesium中的相机—HeadingPitchRoll

    在Cesium中,常常使用HeadingPitchRoll三个角度来定义相机坐标系相对某基准坐标系的方位. 在详细阐述这个概念之前,先阐述在航空飞行中常用的yaw/pitch/roll. 偏航(yaw ...

  3. Cesium中的相机—YawPitchRoll

    原博文地址:https://blog.csdn.net/u011575168/article/details/83097894 以正前方为X轴,以左手坐标系建立O_XYZ坐标系.Yaw.Pitch.R ...

  4. Cesium 中两种添加 model 方法的区别

    概述 Cesium 中包含两种添加 model 的方法,分别为: 通过 viewer.entities.add() 函数添加 通过 viewer.scene.primitives.add() 函数添加 ...

  5. Cesium 中的离屏渲染

    Cesium 中的离屏渲染 本文参考了众多文章,均列在了最后.先感谢各位的分享精神,如觉有冒犯,请与我联系. 部分内容来自个人理解,欢迎指正交流. 为了达到更加真实的渲染效果或其他计算需求,很多时候需 ...

  6. Cesium中自定义材质material

    文章转自: https://blog.csdn.net/weixin_38676065/article/details/126123975 学习参考文章:https://github.com/Anal ...

  7. 对比分析OSG与Cesium中模型LOD的异同

    1. LOD 熟悉渲染的读者可能经常听到LOD(Level Of Detail),也就是用不同的细节层次来表达同一个对象.比如下图中的雕像,从左到右精细度越来越低,最后甚至仅剩一个轮廓,已经看不出人形 ...

  8. Vue集成Cesium之二 —— 相机(Camera)

    上一篇文章初步写了一下 vue 集成 cesium 方法和注意的地方. 最近因为项目中用到的地图资源并不是拿来就能用,需要调整显示的角度.缩放等设置.所以把 cesium 所有的相机(也就是视角)设置 ...

  9. GIS数据处理-cesium中模型位置设置

    GIS数据处理-cesium中模型位置设置 介绍 最近我收到不少人私信询问我,在cesium中加载3dtiles模型后如何调整模型位置,这里我就统一的介绍一下,我是怎么处理的以供大家参考. 常见模型分 ...

  10. cesium中添加建筑白模

    1.在cesium中添加模型依赖于Cesium ion帐户的资产id,在这里创建账户. 2.上传模型(模型文件类型在Cesium ion中有说明,模型的提取办法可在这里查看)到账户中并平铺为3D Ti ...

最新文章

  1. Linux 小知识翻译 - 「文件系统的种类」
  2. CML 2020 | 显式引入对分类标签的描述,如何提高文本分类的效果?
  3. 基于Proxy思想的Android插件框架
  4. windows10下配置环境变量
  5. java后端开发教程_【后端开发】详细讲解JAVA中方法重载概念——简单易懂
  6. Linux CentOS 6.5 + Apache + Mariadb + PHP环境搭建
  7. Linux下memcache的安装和启动(很好)
  8. redis命令 举例
  9. Codeforces Round #409 (rated, Div. 2, based on VK Cup 2017 Round 2)C. Voltage Keepsake
  10. 2017.4.23 一元三次方程求解 思考记录
  11. UIKit框架-高级控件Swift版本: 6.UIAlertView方法/属性详解
  12. index android js,reactjs – React Native项目没有index.ios.js或index.android.js
  13. java的消息机制协议_消息推送机制技术设计
  14. type=file的未选择任何文件修改_Electron应用易“招黑”,轻松被修改并植入后门...
  15. Ubuntu 意外死机 (Linux Crash/Hang)解决
  16. 新仙剑奇侠传完美攻略
  17. 【CSS】笔记4-浮动、切图、学成在线
  18. pythonhello world欢迎某某某同学_【第四章】python基本语法学习与练习题(慕课网习题)...
  19. 抑郁症自我测试皮肤软件,以躯体症状为主的抑郁症患者的交感神经皮肤反应研究...
  20. 2020身高体重标准表儿童_【宝宝身高体重标准表】儿童身高体重标准表2020、2019_身高体重标准表_亲子百科_太平洋亲子网...

热门文章

  1. 《每日一荐月刊》2019-11
  2. asp车辆租赁-汽车租赁管理系统
  3. 波兰表达式和逆波兰表达式
  4. 海外直播公会Tik Tok,蓝海项目官方火热招募中
  5. 迷你世界勒索病毒,你的文件被删了吗?
  6. 【工程师学算法】工程常用算法(二)—— 卡尔曼滤波(Kalman Filter)
  7. kvm虚拟机管理工具列表
  8. 使用J-Link打印日志——SEGGER Real-Time Transfer(RTT)工具的移植使用
  9. RSA非对称加密算法介绍及其简单数学原理
  10. 【python写一个AI对战五子棋游戏】