旋转矩阵 The Rotation Matrix
参考:
http://www.scratchapixel.com/lessons/mathematics-physics-for-computer-graphics/geometry/how-does-matrix-work-part-1
http://www.scratchapixel.com/lessons/mathematics-physics-for-computer-graphics/geometry/how-does-matrix-work-part-2

在scratchapixel的教程中,旋转矩阵是一种能将点或者向量绕某个轴旋转的矩阵,这里说的点和向量,是以自然基(或称为标准基)为基底的。
如上图,Z轴为贯穿屏幕的轴,点P绕Z轴逆时针旋转到Pt,记旋转矩阵为R,则三者的关系是:P • R = Pt
在scratchapixe的l教程中,作者最后试算出了这样的R,但并未做证明,这样的R,由旋转的轴不同,分别有绕X轴旋转的Rx,绕Y轴旋转的Ry,绕Z轴旋转的Rz:

其中Θ是逆时针旋转的角度
假设点P的坐标是(1,0,0),让它绕Z轴顺时针旋转Θ角(弧度单位),那么Pt的坐标是(cos(Θ), sin(Θ), 0),例如Θ是π/2时,Pt的坐标是(0, -1, 0)
假设点P的坐标是(0,1,0),让它绕Z轴顺时针旋转Θ角(弧度单位),那么Pt的坐标是(-sin(Θ), cos(Θ), 0),例如Θ是π/2时,Pt的坐标是(1, 0, 0)
刚好是分别是Rz的前两行,在scratchapixe的l教程中说,“理解矩阵Rz的关键一点,就是其每一行代表了坐标系中的一个轴,整个Rz代表了一组基”
这其实有点难以理解,于是翻出居余马的线性代数,第四章讲向量空间与线性变换,里面有关于基的定义是这样的:
定义:设有序向量组B={ß1, ß2…ßn}是实向量空间Rn的子集,如果B线性无关,则Rn中任一向量α,均可由B线性表示即
α = a1ß1 + a2ß2 + … + anßn
就称B是Rn这个实向量空间中的一组基(或基底),有序数组(a1, a2 … an)是向量α关于基B(或说在基B下)的坐标,记作αB = (a1, a2 … an) 或 αB = (a1, a2 … an) T
可以看到,scratchapixe阐述的角度是如何让一个点或者向量,乘以一个矩阵,移动到同一个坐标系的另外一个位置
而线性代数上,阐述的是同一个点在两组不同的基的坐标,以及两组基之间的过度矩阵怎样计算
而二者的内在联系具体怎样理解,我还要继续学习一下
旋转矩阵 The Rotation Matrix的更多相关文章
- 旋转矩阵(Rotation Matrix)的推导及其应用
向量的平移,比较简单. 缩放也较为简单 矩阵如何进行计算呢?之前的文章中有简介一种方法,把行旋转一下,然后与右侧对应相乘.在谷歌图片搜索旋转矩阵时,看到这张动图,觉得表述的很清晰了. 稍微复杂一点的是 ...
- 3D Computer Grapihcs Using OpenGL - 12 Rotation Matrix
为了证明我们上节渲染出来的是一个立方体而不是一个平面,我们决定将它旋转一定角度,这样我们就需要一个旋转矩阵(也属于ModelTransformMatrix的一部分) 上一节我们的ModelTransf ...
- 三维空间旋转和Three.JS中的实现
三维空间中主要有两种几何变换,一种是位置的变换,位置变换和二维空间的是一样的.假设一点P(X1,Y1,Z1) 移动到Q(X2,Y2,Z2)只要简单的让P点的坐标值加上偏移值就可以了.但是三维空间的旋转 ...
- Three.js 学习笔记(1)--坐标体系和旋转
前言 JavaScript 3D library The aim of the project is to create an easy to use, lightweight, 3D library ...
- cordic
cordic里向量旋转得到新向量,利用的是旋转矩阵 摘自百度百科维基百科 旋转矩阵(Rotation matrix)是在乘以一个向量的时候改变向量的方向但不改变大小的效果的矩阵.旋转矩阵不包括反演,它 ...
- WebGL常用数学公式
1.三角函数 坐标轴采用右手法则,沿Z轴的逆时针方向为正角度,假设原始点为p(x,y,z),a是X轴旋转到点p的角度,r是从原始点到p点的距离.用这两个变量计算出点p的坐标,等式如下: x = rco ...
- UE4 常用数学
转自:https://dawnarc.com/2016/07/mathlinear-algebra%E5%90%91%E9%87%8F%E7%A7%AF%E5%A4%96%E7%A7%AF%E5%8F ...
- PCL点云库:对点云进行变换(Using a matrix to transform a point cloud)
点云数据可以用ASCII码的形式存储在PCD文件中(关于该格式的描述可以参考链接:The PCD (Point Cloud Data) file format).为了生成三维点云数据,在excel中用 ...
- A geometric interpretation of the covariance matrix
A geometric interpretation of the covariance matrix Contents [hide] 1 Introduction 2 Eigendecomposit ...
随机推荐
- 高手进阶,终极内存技术指南——完整/进阶版 II (转)【转】
转自:https://blog.csdn.net/lightseed/article/details/4630170 SDRAM芯片的预充电与刷新操作 预充电 由于SDRAM的寻址具体独占性,所以在进 ...
- python3+selenium入门16-窗口截图
有时候需要把一些浏览器当前窗口截图下来,比如操作抱错的时候.WebDriver类下.get_screenshot_as_file()方法可窗口截图,需要传入一个截图文件名的路径.window要用\\当 ...
- 修改.bashrc文件PATH变量错误导致系统大部分命令失效
修改.bashrc环境变量,在文件最后添加openssl变量, 本来应该写 export PATH=$PATH:/usr/local/openssl/bin 误写成 export PATH=/usr/ ...
- NodeJS+Express+MySQL开发小记(2):服务器部署
http://borninsummer.com/2015/06/17/notes-on-developing-nodejs-webapp/ NodeJS+Express+MySQL开发小记(1)里讲过 ...
- Windows中查看端口占用及关闭对应进程
开始--运行--cmd 进入命令提示符 输入netstat -ano 即可看到所有连接的PID,之后在任务管理器(右键电脑屏幕的状态栏即可找到)中找到这个PID所对应的程序.如果任务管理器中没有PID ...
- 【进阶3-4期】深度解析bind原理、使用场景及模拟实现(转)
这是我在公众号(高级前端进阶)看到的文章,现在做笔记 https://github.com/yygmind/blog/issues/23 bind() bind() 方法会创建一个新函数,当这个新函 ...
- iOS 去除百度地图下方的 logo
UIView *mView = _mapView.subviews.firstObject; for (id logoView in mView.subviews) { if ([logoView ...
- mysql 安装问题三:FATAL ERROR: please install the following Perl modules before executing ./scripts/mysql_install_db: Data::Dumper
解决方法是安装autoconf库,执行命令:yum -y install autoconf 安装完成之后继续执行安装mysql的命令:./scripts/mysql_install_db --user ...
- 利用map和stringstream数据流解题
题目描述 喜闻乐见A+B.读入两个用英文表示的A和B,计算它们的和并输出. 输入 第一行输入一个字符串,表示数字A:第二行输入一个字符串表示数字B.A和B均为正整数. 输出 输出一个正整数n,表示A+ ...
- Python实战二
要求:按照要求完成对文件的增.删.改.查操作. def add(**kwargs): '''新增内容,在指定位置新增''' while True: flag = False with open(&qu ...