ImageVerifierCode 换一换
格式:DOCX , 页数:7 ,大小:17.60KB ,
资源ID:30152737      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/30152737.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(旋转变换一旋转矩阵.docx)为本站会员(b****8)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

旋转变换一旋转矩阵.docx

1、旋转变换一旋转矩阵旋转变换(一)旋转矩阵 1. 简介计算机图形学中的应用非常广泛的变换是一种称为仿射变换的特殊变换,在仿射变换中的基本变换包括平移、旋转、缩放、剪切这几种。本文以及接下来的几篇文章重点介绍一下关于旋转的变换,包括二维旋转变换、三维旋转变换以及它的一些表达方式(旋转矩阵、四元数、欧拉角等)。2. 绕原点二维旋转首先要明确旋转在二维中是绕着某一个点进行旋转,三维中是绕着某一个轴进行旋转。二维旋转中最简单的场景是绕着坐标原点进行的旋转,如下图所示:如图所示点v 绕 原点旋转 角,得到点v,假设 v点的坐标是(x, y) ,那么可以推导得到 v点的坐标(x, y)(设原点到v的距离是r

2、,原点到v点的向量与x轴的夹角是 ) x=rcosy=rsin x=rcos(+)y=rsin(+) 通过三角函数展开得到 x=rcoscosrsinsin y=rsincos+rcossin 带入x和y表达式得到 x=xcosysin y=xsin+ycos 写成矩阵的形式是: xy=cossinsincosxy 尽管图示中仅仅表示的是旋转一个锐角的情形,但是我们推导中使用的是三角函数的基本定义来计算坐标的,因此当旋转的角度是任意角度(例如大于180度,导致v点进入到第四象限)结论仍然是成立的。3. 绕任意点的二维旋转绕原点的旋转是二维旋转最基本的情况,当我们需要进行绕任意点旋转时,我们可以

3、把这种情况转换到绕原点的旋转,思路如下: 1. 首先将旋转点移动到原点处 2. 执行如2所描述的绕原点的旋转 3. 再将旋转点移回到原来的位置也就是说在处理绕任意点旋转的情况下需要执行两次平移的操作。假设平移的矩阵是T(x,y),也就是说我们需要得到的坐标 v=T(x,y)*R*T(-x,-y)(我们使用的是列坐标描述点的坐标,因此是左乘,首先执行T(-x,-y))在计算机图形学中,为了统一将平移、旋转、缩放等用矩阵表示,需要引入齐次坐标。(假设使用2x2的矩阵,是没有办法描述平移操作的,只有引入3x3矩阵形式,才能统一描述二维中的平移、旋转、缩放操作。同理必须使用4x4的矩阵才能统一描述三维

4、的变换)。对于二维平移,如下图所示,P点经过x和y方向的平移到P点,可以得到:x=x+txy=y+ty 由于引入了齐次坐标,在描述二维坐标的时候,使用(x,y,w)的方式(一般w=1),于是可以写成下面矩阵的形式xy1=100010txty1xy1 按矩阵乘法展开,正好得到上面的表达式。也就是说平移矩阵是 100010txty1 如果平移值是(-tx,-ty)那么很明显平移矩阵式 100010txty1 我们可以把2中描述的旋转矩阵也扩展到3x3的方式,变为: xy1=cossin0sincos0001xy1 从平移和旋转的矩阵可以看出,3x3矩阵的前2x2部分是和旋转相关的,第三列与平移相关

5、。有了上面的基础之后,我们很容易得出二维中绕任意点旋转的旋转矩阵了,只需要把三个矩阵乘起来即可:M=100010txty1cossin0sincos0001100010txty1=cossin0sincos0(1cos)tx+tysin(1cos)tytxsin14. 三维基本旋转我们可以把一个旋转转换为绕基本坐标轴的旋转,因此有必要讨论一下绕三个坐标值x、y、z的旋转。 本文在讨论过程中使用的是类似于OpenGL中定义的右手坐标系,同时旋转角度的正负也遵循右手坐标系的约定。如下图所示4.1 绕X轴的旋转在三维场景中,当一个点P(x,y,z)绕x轴旋转角得到点P(x,y,z)。由于是绕x轴进行

6、的旋转,因此x坐标保持不变,y和z组成的yoz(o是坐标原点)平面上进行的是一个二维的旋转,可以参考上图(y轴类似于二维旋转中的x轴,z轴类似于二维旋转中的y轴),于是有: x=x y=ycoszsin z=ysin+zcos 写成(4x4)矩阵的形式 xyz1=10000cossin00sincos00001xyz14.2 绕Y轴旋转绕Y轴的旋转和绕X轴的旋转类似,Y坐标保持不变,除Y轴之外,ZOX组成的平面进行一次二维的旋转(Z轴类似于二维旋转的X轴,X轴类似于二维旋转中的Y轴,注意这里是ZOX,而不是XOZ,观察上图中右手系的图片可以很容易了解到这一点),同样有: x=zsin+xcos

7、 y=y z=zcosxsin 写成(4x4)矩阵的形式 xyz1=cos0sin00100sin0cos00001xyz14.3 绕Z轴旋转与上面类似,绕Z轴旋转,Z坐标保持不变,xoy组成的平面内正好进行一次二维旋转(和上面讨论二维旋转的情况完全一样) xyz1=cossin00sincos0000100001xyz14.4 小结上面描述了三维变换中绕单一轴旋转的矩阵表达形式,绕三个轴旋转的矩阵很类似,其中绕y轴旋转的矩阵与绕x和z轴旋转的矩阵略有点不同(主要是三个轴向顺序和书写矩阵的方式不一致导致的,绕三个不同坐标旋转轴以及其他二个坐标轴组成平面的顺序是: XYZ(绕x轴) YZX(绕y

8、轴) ZXY(绕z轴),其中绕y轴旋转,其他两个轴是ZX,这和我们书写矩阵按 xyz1 的方式不一致,而导致看起来绕Y轴旋转的矩阵似乎是和其他两个矩阵不一致。如果我们颠倒写法,将公式写成 zyx1=cos0sin00100sin0cos00001zyx1 的方式,那么这三个旋转矩阵看起来在形式上就统一了,都是 cossinsincos 这种表现形式了(左上角都是sin)5. 绕任意轴的三维旋转绕任意轴的三维旋转可以使用类似于绕任意点的二维旋转一样,将旋转分解为一些列基本的旋转。绕任意轴旋转如下图所示:P点绕向量u旋转角,得到点Q,已知P点的坐标和向量u,如何求Q点的坐标。 我们可以把向量u进行

9、一些旋转,让它与z轴重合,之后旋转P到Q就作了一次绕Z轴的三维基本旋转,之后我们再执行反向的旋转,将向量u变回到它原来的方向,也就是说需要进行的操作如下: 1. 将旋转轴u绕x轴旋转至xoz平面 2. 将旋转轴u绕y轴旋转至于z轴重合 3. 绕z轴旋转角 4. 执行步骤2的逆过程 5. 执行步骤1的逆过程 原始的旋转轴u如下图所示: 第1、2、3步骤如下图所示: 步骤1将向量u旋转至xoz平面的操作是一个绕x轴的旋转操作,步骤2将向量u旋转到与z轴重合,第1、2步骤的示意图如下: 作点P在yoz平面的投影点q,q的坐标是(0, b, c),原点o与q点的连线oq和z轴的夹角就是u绕x轴旋转的角

10、度。通过这次旋转使得u向量旋转到xoz平面(图中的or向量)【步骤1】 过r点作z轴的垂线,or与z轴的夹角为, 这个角度就是绕Y轴旋转的角度,通过这次旋转使得u向量旋转到与z轴重合【步骤2】步骤1中绕x轴旋转的是一次基本的绕x轴的三维旋转,按照之前的讨论,旋转矩阵是: 10000cossin00sincos00001 这里的就是图中所示的角 (注意角度是绕x旋转的正的角度) 从图中我们还可以得到: cos=c(b2+c2) sin=b(b2+c2) 于是旋转矩阵(记作 Rx()为: 10000c(b2+c2)b(b2+c2)00b(b2+c2)c(b2+c2)00001 在完成步骤1之后,向

11、量u被变换到了r的位置,我们继续步骤2的操作,绕y轴旋转负的角(注意:这里的是负的),经过这次变换之后向量u与z轴完全重合,由于这一步也是执行的一次绕Y轴的基本旋转,旋转矩阵(记作 Ry()为: cos0sin00100sin0cos00001 使用替换表达式中的,此外根据图中描述,我们可以计算得到: cos=(b2+c2)(a2+b2+c2) sin=a(a2+b2+c2) 带入上面的表达式,于是旋转矩阵(记作 Ry()为: (b2+c2)(a2+b2+c2)0a(a2+b2+c2)00100a(a2+b2+c2)0(b2+c2)(a2+b2+c2)00001在完成前面两个步骤之后,u方向和

12、z轴完全重合,因此执行旋转角,执行的是一次绕z轴的基本三维旋转(记作 R(),根据之前的讨论,我们可以得到: cossin00sincos0000100001 最后两步骤是前面1和2的逆操作,也就是绕Y轴旋转 和绕X轴旋转,这两个矩阵分别记作 Ry() 和 Rx(),得到它们的方式很简单,只需要将上面步骤1和步骤2中的角度修改成相反数即可,也就是:Ry()=(b2+c2)(a2+b2+c2)0a(a2+b2+c2)00100a(a2+b2+c2)0(b2+c2)(a2+b2+c2)00001 Rx()=10000c(b2+c2)b(b2+c2)00b(b2+c2)c(b2+c2)00001最终

13、得到 绕任意轴u旋转的旋转矩阵是【因为使用的列向量,因此执行的是左乘(从右往左)】:MR=Rx()Ry()Rz()Ry()Rx()= (注:式中的(u,v,w)对应上文中向量(a,b,c),公式我自己笔算过,为了减少编辑公式的时间(使用LaTex编辑太繁琐,因此找了一张公式的图片贴在此处)如果向量是经过单位化的(单位向量),那么有a2+b2+c2=1,可以简化上述的公式,得到:参考文献:Wiki Rotation (mathematics)Eulers rotation theoremMaths - Rotation Matrices绕任意轴旋转Rotation About an Arbitrary Axis in 3 DimensionsRotation about an Arbitrary Axis (Line)

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1