推到 旋转矩阵公式_3D旋转矩阵的推导过程

3D旋转矩阵的推导过程

包含平移的线性变换称作仿射变换,3D中的仿射变换不能用 3 x 3 矩阵表达,必须使用4 x 4矩阵。

一般来说,变换物体相当于以相反的量变换描述这个物体的坐标系。当有多个变换时,则需要以相反的顺序变换相反的量。例如,将物体顺时针旋转20度,扩大200%,等价于将坐标系缩小200%,再逆时针旋转20度。

2D中的旋转

在2D环境中,物体只能绕某个点旋转,因为现在暂不考虑平移。这里我们进一步限制物体,使其只绕原点旋转。2D中绕原点的旋转只有一个参数,角度θ,它描述了旋转量。逆时针旋转经常(不是必须)被认为是正方向,顺时针方向是负方向。图8.5展示了基向量p,q绕原点旋转,得到新的基向量p',q'。

现在我们知道了旋转后基向量的值,就可以以公式8.1的形式构造矩阵如下:

3D中绕坐标轴的旋转

在3D场景中,绕轴旋转而不是点(此时轴指的是旋转所绕的直线,不一定是笛卡尔坐标轴x,y,z)。再次声明,这里暂不考虑平移,所以只讨论旋转轴穿过原点的情况。

绕轴旋转角度θ时,必须知道哪个方向被认为“正”,哪个方向被认为“负”,左手坐标系中定义此方向的规则为左手法则。首先,要明确旋转轴指向哪个方向。当然,旋转轴在理论上是无限延伸的,但我们还是要认为它有正端点和负端点。与笛卡尔坐标轴定义坐标系相同,左手法则是这样的:伸出左手,大拇指向上,其余手指弯曲。大拇指指向旋转轴的正方向,此时,四指弯曲的方向就是旋转的正方向。如图8.6所示。

如果用的是右手坐标系,也有类似的法则,不过是用右手代替左手,如图8.7所示:

图8.8显示了另一种正方向的定义:

最为常见的旋转是绕某坐标轴的简单旋转,让我们从绕x轴旋转开始,如图8.9所示:

求出旋转后的基向量,可以得到矩阵,见公式8.2。

Rotation about the y-axis is similar:

The matrix to rotate about the y-axis:

Finally, rotating about the z-axis:

3D中绕任意轴的旋转

当然也能绕3D中的任意轴旋转。因为这里不考虑平移,可以假设旋转轴通过原点,这种旋转比绕坐标轴的旋转更复杂也更少见。用单位向量n描述旋转轴,和前面一样用θ描述旋转量。

让我们导出绕轴n旋转角度θ的矩阵,也就是说,我们想得到满足下面条件的矩阵 R(n, θ):

vR(n, θ) = v'

v'是向量v绕轴n旋转后的向量。让我们看看能否用v,n和θ表示v'。我们的想法是在垂直于n的平面中解决这个问题,那么这就转换为了一个简单的2D问题。为了做到这一点,将v分解为两个分量:v||和v⊥,分别平行于n和垂直于n,并有v = v|| + v⊥。因为v||平行于n,所以绕n旋转不会影响它。故只要计算出v⊥绕n旋转后的 v⊥',就能得到v' =v|| + v⊥'。为了计算v⊥',我们构造向量v|| ,v⊥和临时向量w,如图8.12所示:

上图展示了以下向量:

(1)v|| 是v平行于n的分量,另一种说法就是v|| 是v在n上的投影,用(v.n)n计算。

(2)v⊥是v垂直于n的分量,因为 v = v|| + v⊥,所以 v⊥=v-v||。v⊥是v投影到垂直于n的平面上的结果。

(3)w是同时垂直于v||和v⊥的向量,它的长度和v⊥的相同。w和v⊥同在垂直于n的平面中,w是v⊥绕n旋转90度的结果,由n x v⊥可以得到。

现在,v'垂直于n的分量可以表示为:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/304349.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ArchiMate - 发布【企业架构语言ArchiMate v0.5.pdf】

在《年度总结和计划:去年4个1,今年5个1》中说过今年我准备在项目组引入1个架构语言(ArchiMate),为了便于大家学习,我把一些内容集成一本电子书,目前发布0.5版本,后续还会不断更新&am…

那些有趣/用的 Python 库

图片处理pip install pillowfrom PIL import Imageimport numpy as npa np.array(Image.open(test.jpg))b [255,255,255] - aim Image.fromarray(b.astype(uint8))im.save(new.jpg)youtube-dl下载国外视频pip install youtube-dl #直接安装youtube-dlpip install -U youtube…

linux系统刷分辨率,Linux下设置其分辨率及刷新率

行频:行频又称为“水平扫描频率”,指电子枪每秒在荧光屏上扫过的水平线的数量,其值等于“场频 垂直分辨率1.04”,单位为KHz(千赫兹)。行频是一个综合分辨率和场频的参数,该值越大,显示器可以提供的分辨率越…

.NET 5 部署在docker上运行

1、创建站点创建一个ASP.NET Core Web应用程序,选中启用Docker支持。自动帮我们创建一个Dockerfile文件。2、编写Dockerfile文件dockerfile是一个文件格式的配置文件,用户可以使用dockerfile来快速构建自定义的镜像。由一行行命令语句组成,并…

python字符串下标越界_Python_字符串

# str1"abcdef" #字符串 str型# int1 1 #整数 int型# float11.3 #浮点数,float型# str2 ABCDEF# #单引号和双引号都可以表示字符串# print(str1,str2)#在某一行按下Ctrl/,就可以进行注释,注释就是程序不执行该行代码,…

爱情三十一课,先信自己

我们每个人一生都在迎接两个问题的考验:其一,我是否值得被爱;其二,我是否可以成功。  如果某人在这两个问题上的自我认识是“值得”和“可以”,无论境遇多遭,都可以获得爱与幸福。如果某人内心里总是觉得…

c语言给坐标求多边形面积,多边形的面积问题

多边形的面积问题设构成多边形的坐标串为(xi,yi)(i1,2,……,n),求此多边形面积A。#include#define N 10float Area(float (*x)[2],int n){float sum0;int i0,j;for(;i{ji1;if(jn)j0;sum(x[j][0]x[i][0])*(x[j][1]-x[i][1]);}sum(1/2)*(fabs(sum));return sum;}main(){int n,i,j…

Nexus:一站式私有仓库管理(NuGet、Maven、npm、Docker)

我们在日常开发中经常需要使用到私有仓库,比如 dotNET 中的 NuGet、Java 中的 Maven、前端的 npm,还有 Docker 镜像,每一个私有仓库各自管理,维护起来比较麻烦,而 Nexus 可以将其统一起来。本文将介绍 Nexus 的安装以及…

python choice添加下拉框_自定义Django Form中choicefield下拉菜单选取数据库内容实例...

工作中遇到的问题,自定义了一个forms.form表单,某项需要作出下拉菜单,下拉菜单中的选项需要从数据库(objectForm models)中提取.form.py为:class objectForm(forms.Form):pre choicefield(lable "工作")最后的解决办法:1.定义一个函数def get_object(re…

Enum使用

http://www.java-cn.com/club/html/40/n-640.html1、 目的简单认为:满足一些需求2、 定义、使用public enum SexEnum {male(1),female(0); private final int value; private SexEnum(int value){this.value value;}public int getValue(){return this…

众里寻 Bug 千百度,蓦然回首,它却在隔壁老张处……

程序员与 Bug 是一对矛盾的存在,程序员既要在解决 Bug 中获得成就感,同时也讨厌 Bug 本身的存在。“程序不息,Bug 不止”,程序员在与 Bug 的斗争中,也有很多有趣的事情发生,我们整理了一些程序员在调试 Bug…

linux系统中常见的目录,Linux系统中常见的目录名称以及相应内容

LeetCode: Largest Rectangle in Histogram(直方图最大面积)http://blog.csdn.net/abcbc/article/details/8943485 具体的题目描述为: Given n non-negative integers represent ...自己封装的一个无限滚动 mark 待传import url(http://i.cnblogs.…

Blazor WASM 实现人民币大写转换器

点击上方蓝字关注“汪宇杰博客”导语.NET 5 正式发布已经有一段时间了,其中 Blazor 技术是该版本的亮点之一。作为微软技术的被坑者,年少的我曾经以为 SilverLight 能血虐 Flash,Zune 能团灭 iPod,WP 能吊打 iPhone,UW…

vs2010中svn使用教程_VS2010中使用ankhSVN

给大家介绍一些SVN的入门知识!希望对大家的学习起到作用!关于SVN与CVS的相关知识,大家可以自己去google一下。一、准备SVN是一个开源的版本控制系统,它可以记录所有的文件修改版本。CVS也是一个版本控制系统,可是现在大…

金山安全实验室公布中国互联网六大类钓鱼网站

金山安全实验室公布中国互联网六大类钓鱼网站金山安全实验室研究人员对中国大陆钓鱼网站的普遍特征进行分析,发现以下六个领域最容易被钓鱼网站***:1.QQ十年庆典、QQ抽奖、腾讯活动;2.证券、股票分析、黑庄、理财专家等财经领域;3…

c语言用递归法判断回文字符串,递归方式判断一个字符串是否为回文字符串

/** 递归方式判断一个字符串是否为回文字符串*/public class PartitionTest{public static void main(String[] args) {String str "123456654321";System.out.println("srcString "str);System.out.println("srcString is "(isPartition(str)…

npm 安装less插件_IDEA编译less插件LESS CSS Compiler的安装

2.安装Node.js,下载3.打开idea→settings→plugins 安装:“nodejs”插件,并按以下步骤进行配置:4.打开idea→settings→Languages & Frameworks→Node.js and NPM;在打开的面板中点击右侧“”加号按钮添加需要的“less”组件(…

程序员过关斩将--领导说我的类的职责不单一

“为什么类的职责要单一化?“类的职责单一化很容易吗?首先,我要提醒一下看到这篇文章的同学,我认为保证类(一定是类吗?)的单一职责并不容易软件开发过程中,自古就流传着几大规则&…

从概念到案例,机器学习应该掌握的20个知识点

随着科技的发展,计算机对人类的生产活动和社会活动产生了极为重要的影响,同时以强大的生命力飞速发展着。目前计算机正广泛用于社会各个领域,并朝着微型化、网络化、智能化和巨型化的方向前进。说到智能化,大家最先想到的应该就是…

闲来没事写个记事本玩玩!!!

这两天工作压力大,还好今天见着太阳了,这会儿没事写了个记事本,功能单一,适合练手,可能对新手会有所帮助,贴上来看看吧, 说到实现 记事本,我们应该选择什么样的控件呢,Te…