旋转矩阵 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 ...
随机推荐
- 浅谈Linux下CPU利用率和CPU负载【转】
转自:https://blog.csdn.net/Alisa_xf/article/details/71430406 在Linux/Unix下,CPU利用率(CPU utilization)分为用户态 ...
- 解决:fatal error LNK1104: 无法打开文件“libc.lib”
今天使用VS2017编译比较老的VC++项目,出现了[fatal error LNK1104: 无法打开文件“libc.lib”]的链接器问题,解决方法如下: 项目->属性中->配置属性- ...
- iperf 2.05版本升级到2.0.9
将openwrt trunk 分支上iperf 2.0.9移植到 bb版本上时,编译遇到如下问题: make[6]: Entering directory '/home/hbg/bb/build_d ...
- (常用)configparser,hashlib,hamc模块
configparser模块 #专门解析my.ini这种形式的文件(cnf) import configparser config=configparser.ConfigParser() conf ...
- 在eclipse中安装svn插件
1.下载SVN插件 下载地址:https://github.com/subclipse/subclipse 点击"Files" 2.安装 在eclipse 中点击菜单"w ...
- python学习第41天
# 索引 # 认识mysql中的key # index key 普通索引,能够加速查询,辅助索引 # unique key 唯一 + 索引,辅助索引 # primary key 唯一 + 非空 + 聚 ...
- Java二维码生成与解码
基于google zxing 的Java二维码生成与解码 一.添加Maven依赖(解码时需要上传二维码图片,所以需要依赖文件上传包) <!-- google二维码工具 --> &l ...
- spring aop -包的问题
Caused by: java.lang.NoSuchMethodError: org.springframework.aop.framework.AopProxyUtils.getSingleton ...
- linux之各目录作用
/opt目录 目录用来安装附加软件包,用户调用软件包程序放在目录/opt/package_name/bin下,package_name是安装软件包的名称 /etc目录 是用来放一些核心的配置文件 附各 ...
- py4测试题
1.8<<2等于? 32 2.通过内置函数计算5除以2的余数 print(divmod(5,2))------>1 3.s=[1,"h",2,"e&qu ...