博客转载自:http://www.cnblogs.com/caster99/p/4703033.html

学过矩阵理论或者线性代数的肯定知道正交矩阵(orthogonal matrix)是一个非常好的矩阵,为什么这么说?原因有一下几点:

  1. 正交矩阵每一列都是单位矩阵,并且两两正交。最简单的正交矩阵就是单位阵。
  2. 正交矩阵的逆(inverse)等于正交矩阵的转置(transpose)。同时可以推论出正交矩阵的行列式的值肯定为正负1的
  3. 正交矩阵满足很多矩阵性质,比如可以相似于对角矩阵等等。

以上可以看出正交矩阵是非常特殊的矩阵,而本文题目中的旋转矩阵就是一种正交矩阵!它完美的诠释了正交矩阵的所有特点。

先说一下什么是旋转矩阵?如图1所示,我们假设最开始空间的坐标系XAYAZA就是笛卡尔坐标系,这样我们得到空间A的矩阵VA={XAYAZA}T,其实也可以看做是单位阵E。进过旋转后,空间A的三个坐标系变成了图1中红色的三个坐标系XBYBZB,得到空间B的矩阵VB={XBYBZB}T。我们将两个空间联系起来可以得到VB=RVA,这里R就是我们所说的旋转矩阵。

图1

由于XA={1,0,0}TYA={0,1,0}TZA={0,0,1}T,结合图2可以看出,旋转矩阵R就是由XBYBZB 三个向量组成的。讲到这里,大家应该会发现旋转矩阵R满足第一个条件,因为单位向量无论怎么旋转长度肯定不会变而且向量之间的正交性质也不会变。那么旋转矩阵就是正交阵!不过这还不能说明问题,下面我更进一步利用数学公式进行证明。

图2

进一步讨论之前,我们先说两点数学知识。(1)点乘(dot product)的几何意义:如图3,我们从点乘的公式可以得到α•β相当与β的模乘上αβ上投影的模,所以当|β|=1时,α•β就是指αβ上投影的模。这一点在下面的内容中非常重要。(2)旋转矩阵逆的几何意思:这个比较抽象,不过也好理解。旋转矩阵相当于把一个向量(空间)旋转成新的向量(空间),那么逆可以理解为由新的向量(空间)转回原来的向量(空间)。

图3

接下来就是重点了,我们结合图4进行分析。上面已经说明了,旋转矩阵R就是由XBYBZB 三个向量组成的。我们来看看XBYBZB究竟是什么?由于图中所有的向量均是单位向量,所以XBXA点乘的结果可以看成XBXA上的投影的模,也就是XB在空间A中x轴的分量!!图中中间的位置列出了XB向量中的三个分量分别为XBXA上的投影的模、XBYA上的投影的模和XBZA上的投影的模。这从几何角度很好理解。以此类推,可以得出的旋转矩阵R的表达形式。我们根据图4可以惊喜的发现,矩阵R的第一行就是XAXBYBZB上的投影的模,也就是XAT

图4

这个发现有什么用呢?图5做出解释。根据上面公式可以推出AB的旋转矩阵等于BA的旋转矩阵的转置。根据我们上一段所说的AB的旋转矩阵的逆就是等于BA的旋转矩阵,因此很容易推出R-1等于RT!这满足正交矩阵的第二个条件,又一次证明了旋转矩阵就是正交阵。在平时的工作中,我也测试过所有的旋转矩阵的行列式的值都是为1的,所以旋转矩阵满足正交阵的一切性质,可以说是很完美的矩阵。

图5

现在以三个欧拉角中的RotX为例(其余两个欧拉角以此类推),验证一下以上说的结论。

  首先结合图5的公式,计算出RotX的旋转矩阵Rrotx

  • 由于X轴是垂直于YoZ平面的,所以XAYBZB的点乘结果为0,同时XBYAZA的点乘结果也为0。
  • 由于XAXB都是单位向量,所以XAXB的点乘结果为1。
  • 由于绕x轴旋转,所以我们观察YBZB分别在YAZA上的投影情况,如图6,我已经将坐标标注了。
  • 图6
  • 这样就完成旋转矩阵Rrotx,我们接下来验证一下。
    1. 我们计算每一行每一列的模,都为1;并且任意两个列向量或者任意两个行向量都是正交的。所以满足上文列出的第一个性质。
    2. 我们计算Rrotx的行列式,很简单可以算出为1。这时我们计算一下该矩阵的逆和转置,这里我不写出来了是相等的。所以满足上文列出的第三个性质。
    3. 第三个性质要牵扯到更多的数学知识,在这里就不验证了。

      总结一下:旋转矩阵是一个完美的矩阵——正交矩阵。它的行列式为1,且每个列向量都是单位向量且相互正交,它的逆等于它的转置。

旋转矩阵(Rotate Matrix)的性质分析的更多相关文章

  1. Rotate Matrix by One

    记得有道Amazon的OA题目,好像是给定一个矩阵,让把矩阵的每个元素向右shift一个位置.这道题之前没有好好自己想过.今天正好刷到了rotate matrix,所以正好一块想了. 思路是类似Lee ...

  2. ML01 机器学习后利用混淆矩阵Confusion matrix 进行结果分析

      目标: 快速理解什么是混淆矩阵, 混淆矩阵是用来干嘛的. 首先理解什么是confusion matrix 看定义,在机器学习领域,混淆矩阵(confusion matrix),又称为可能性表格或是 ...

  3. [Leetcode] Template to rotate matrix

    Rotate the image by 90 degrees (clockwise). Given input matrix = [ [1,2,3,4], [5,6,7,8], [9,10,11,12 ...

  4. LeakCanary 与 鹅场Matrix ResourceCanary对比分析

    推荐阅读: 滴滴Booster移动App质量优化框架-学习之旅 一 Android 模块Api化演练 不一样视角的Glide剖析(一) LeakCanary是Square公司基于MAT开源的一个内存泄 ...

  5. BZOJ1802: [Ahoi2009]checker(性质分析 dp)

    题意 题目链接 Sol 一个不太容易发现但是又很显然的性质: 如果有两个相邻的红格子,那么第一问答案为0, 第二问可以推 否则第一问答案为偶数格子上的白格子数,第二问答案为偶数格子上的红格子数 #in ...

  6. CF1168B Good Triple 性质分析_好题

    题意翻译 给出01串s,求数对[l,r]个数,使得能找到至少一对[x,k],使1<=x,k<=|s|且l<=x<x+2k<=r且s[x]=s[x+k]=s[x+2k] 题 ...

  7. 【LeetCode】寻找两个有序数组的中位数【性质分析+二分】

    给定两个大小为 m 和 n 的有序数组 nums1 和 nums2. 请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n)). 你可以假设 nums1 和 nums2 ...

  8. CF1051F The Shortest Statement Dijkstra + 性质分析

    动态询问连通图任意两点间最短路,单次询问. 显然,肯定有一些巧妙地性质(不然你就发明了新的最短路算法了233)有一点很奇怪:边数最多只比点数多 $20$ 个,那么就可以将这个图看作是一个生成树,上面连 ...

  9. BZOJ 1112: [POI2008]砖块Klo Splay + 性质分析

    Code: #include<bits/stdc++.h> using namespace std; #define setIO(s) freopen(s".in",& ...

随机推荐

  1. 炫酷tab栏--第三方开源--NavigationTabStrip

    github下载地址:https://github.com/DevLight-Mobile-Agency/NavigationTabStrip 这个开源项目很强大,只是一个自定义的控件,只有一个类 / ...

  2. GEF入门实例_总结_01_教程、源码、开发环境准备

    一.前言 最近在学Eclipse插件开发,发现了一个比较好的GEF入门教程,并且按照教程上的操作,一步步实现了一个入门Demo,在此感谢作者的贡献. 好记性不如烂笔头,故决定总结一下这段时间的学习心得 ...

  3. PHP用*号替代姓名除第一个字之外的字符

    /* * 作用:用*号替代姓名除第一个字之外的字符 * 参数: * * * 返回值:string */ function starReplace($name, $num = 0) { if ($num ...

  4. python3中zip()函数的用法

    >>>a = [1,2,3] >>> b = [4,5,6] >>> c = [4,5,6,7,8] >>> zipped = ...

  5. uva11078 - Open Credit System(动态维护关键值)

    这道题使用暴力解法O(n*n)会超时,那么用动态维护最大值可以优化到O(n).这种思想非常实用. #include<iostream> #include<cstdio> #in ...

  6. mysql 开发标准规范

    一.表设计 1. 库名.表名.字段名使用小写字母,“_”分割. 2. 库名.表名.字段名不超过12个字符. 3. 库名.表名.字段名见名知意,尽量使用名词而不是动词. 4. 优先使用InnoDB存储引 ...

  7. HihoCoder1449 重复旋律6(后缀自动机)

    描述 小Hi平时的一大兴趣爱好就是演奏钢琴.我们知道一个音乐旋律被表示为一段数构成的数列. 现在小Hi想知道一部作品中所有长度为K的旋律中出现次数最多的旋律的出现次数.但是K不是固定的,小Hi想知道对 ...

  8. kafka集群下线broker节点实践方法(broker topic 迁移)

    [root@es03 ~]# cd /usr/hdp//kafka/bin [root@es03 kafka]# cd bi -bash: cd: bi: No such file or direct ...

  9. CODE FESTIVAL 2017 qual A--C - Palindromic Matrix(模拟所有情况,注意细节)

    个人心得:其实本来这题是有规律的不过当时已经将整个模拟过程都构思出来了,就打算试试,将每个字符和总和用优先队列 装起来,然后枚举每个点,同时进行位置标志,此时需要多少个点的时候拿出最大的和出来,若不满 ...

  10. nginx之 nginx-1.9.7 编译安装、理论简介

    nginx是一个web网站常用的高性能http和反向代理服务器,其具有较好的并发能力,被网易.百度.腾讯.新浪等网站广泛使用. 一. 理论简介 1.首先弄清楚正向代理和反向代理 正向代理:代理客户端, ...