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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

旋转变换一旋转矩阵.docx

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

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

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

4、的平移、旋转、缩放操作。同理必须使用 4x4的矩阵才能统一描述三维的变换)。对于二维平移,如下图所示, P点经过x和y方向的平移到P点,可以得到: x,=x+txy,=y+ty由于引入了齐次坐标,在描述二维坐标的时候, 使用(x, y,w)的方式(一般 w=1 ),于是可以写成下面矩阵的形式x y 1=100010txty1xy1按矩阵乘法展开,正好得到上面的表达式。也就是说平移矩阵是100010txty1如果平移值是(-tx, -ty)那么很明显平移矩阵式100010txty1我们可以把2中描述的旋转矩阵也扩展到 3x3的方式,变为:x y 1=cos 0 sin 0 0sin 0 cos

5、0 0001xy1从平移和旋转的矩阵可以看出, 3x3矩阵的前2x2部分是和旋转相关的,第三列与平移相关。有了上面的基础之后,我们很容易得出二维中绕任意点旋转的旋转矩阵了,只需要把三个矩阵乘起来即可:M=100010txty1cos 0 sin 0 0sin 0 cos 0 0001100010txty1=cos 0 sin 0 0sin 0 cos 0 0(1cos 0 )tx+tysin 0 (1cos 0 )tytxsin 0 14.三维基本旋转我们可以把一个旋转转换为绕基本坐标轴的旋转,因此有必 要讨论一下绕三个坐标值 x、y、z的旋转。本文在讨论过程中使用的是类似于 OpenGL中定

6、义的右手坐标系,同时旋转角度的正负也遵循右手坐标系的约定。如 下图所示4.1绕X轴的旋转在三维场景中,当一个点 P(x,y,z)绕x轴旋转。角得到点P (x ,y 由,Z是麝x轴进行的旋转,因此x坐标保持不变, y和z组成的yoz (o是坐标原点)平面上进行的是一个二维 的旋转,可以参考上图(y轴类似于二维旋转中的 x轴,z 轴类似于二维旋转中的 y轴),于是有:x =x y =ycos 0 zsin 0 z =ysin 0 +zcos 0写成(4x4 )矩阵的形式 x y z 1=10000cos 0 sin 0 00sin 0 cos 0 00001xyz14.2绕Y轴旋转绕Y轴的旋转和绕

7、 X轴的旋转类似,Y坐标保持不变,除 Y 轴之外,ZOX组成的平面进行一次二维的旋转(Z轴类似于 二维旋转的X轴,X轴类似于二维旋转中的 Y轴,注意这里是ZOX,而不是XOZ,观察上图中右手系的图片可以很容 易了解到这一点),同样有:x =zsin 0 +xcos 0y =yz =zcos 0 xsin 0写成(4x4 )矩阵的形式x y z 1=cos 0 0sin 0 00100sin 0 0cos 0 00001xyz14.3绕Z轴旋转与上面类似,绕 Z轴旋转,Z坐标保持不变,xoy组成的平面内正好进行一次二维旋转(和上面讨论二维旋转的情况完全一样)x y z 1=cos 0 sin 0

8、 00sin 0 cos 0 0000100001xyz14.4小结上面描述了三维变换中绕单一轴旋转的矩阵表达形式,绕三个轴旋转的矩阵很类似,其中绕 y轴旋转的矩阵与绕x和z 轴旋转的矩阵略有点不同(主要是三个轴向顺序和书写矩阵 的方式不一致导致的,绕三个不同坐标旋转轴以及其他二个坐标轴组成平面的顺序是: XYZ(绕x轴)YZX (绕y轴)ZXY (绕z轴),其中绕y轴旋转,其他两个轴是 ZX,这和 我们书写矩阵按 xyz1的方式不一致,而导致看起来绕Y轴旋转的矩阵似乎是和其 他两个矩阵不一致。如果我们颠倒写法,将公式写成z y x 1=cos 0 0sin 0 00100sin 0 0cos

9、 0 00001zyx1的方式,那么这三个旋转矩阵看起来在形式上就统一了,都是cos 0 sin 0 sin 0 cos 0 这种表现形式了(左上角都是 sin 9 )5.绕任意轴的三维旋转绕任意轴的三维旋转可以使用类似于绕任意点的二维旋转 一样,将旋转分解为一些列基本的旋转。绕任意轴旋转如下 图所示:P点绕向H u旋转。角,得到点Q,已知P点的坐标和向H u,如何求Q点的坐标。我们可以把向虽u进行一些旋转,让它与 z轴重合,之后旋 转P到Q就作了一次绕Z轴的三维基本旋转,之后我们再 执行反向的旋转,将向H u变回到它原来的方向,也就是说 需要进行的操作如下:1.将旋转轴u绕x轴旋转至xoz平

10、面2.将旋转轴u绕y轴旋转至于z轴重合3.绕z轴旋转9角4.执行步骤2的逆过程5.执行步骤1的逆过程原始的旋转轴u如下图所示:第1、2、3步骤如下图所示:步骤1将向H u旋转至xoz平面的操作是一个绕 x轴的旋 转操作,步骤2将向虽u旋转到与z轴重合,第1、2步骤 的示意图如下:作点P在yoz平面的投影点q, q的坐标是(0, b, c),原点 o与q点的连线oq和z轴的夹角就是u绕x轴旋转的角度。通过这次旋转使得 u向虽旋转到xoz平面(图中的or向虽)【步骤1】过r点作z轴的垂线,or与z轴的夹角为6,这个角度就是 绕Y轴旋转的角度,通过这次旋转使得u向虽旋转到与z轴 重合【步骤2】步骤1

11、中绕x轴旋转的是一次基本的绕 x轴的三维旋转,按照之前的讨论,旋转矩阵是:10000cos 0 sin 0 00sin 0 cos 0 00001这里的。就是图中所小的 以角(注意以角度是绕x旋转的 正的角度)从图中我们还可以得到:cos 以=c(b2+c2) Vsin 以=b(b2+c2) V于是旋转矩阵(记作Rx(以)为:10000c(b2+c2) V b(b2+c2) V00b(b2+c2) Vc(b2+c2) V00001在完成步骤1之后,向m u被变换到了 r的位置,我们继续 步骤2的操作,绕y轴旋转负的6角(注意:这里的6是负 的),经过这次变换之后向m u与z轴完全重合,由于这一

12、步也是执行的一次绕 Y轴的基本旋转,旋转矩阵(记作Ry( 6 )为:cos 0 0sin 0 00100sin 0 0cos 0 00001使用6替换表达式中的。,此外根据图中描述,我们可以计算得到:cos 6 =(b2+c2) V (a2+b2+c2) Vsin 6 =a(a2+b2+c2) V带入上面的表达式,于是旋转矩阵 (记作Ry( 6 )为:(b2+c2) V (a2+b2+c2) V 0a(a2+b2+c2) V 00100a(a2+b2+c2) V0(b2+c2) V (a2+b2+c2) V 00001在完成前面两个步骤之后,u方向和z轴完全重合,因此执行旋转。角,执行的是一次

13、绕 z轴的基本三维旋转(记作R( e),根据之前的讨论,我们可以得到:cos 0 sin 0 00sin 0 cos 0 0000100001最后两步骤是前面1和2的逆操作,也就是绕Y轴旋转6和 绕X轴旋转以,这两个矩阵分别记作 Ry( 6 )和Rx(以)得到 它们的方式很简单,只需要将上面步骤1和步骤2中的角度 修改成相反数即可,也就是:Ry( 6 )=(b2+c2) V (a2+b2+c2) V0a(a2+b2+c2) V00100a(a2+b2+c2) V0(b2+c2) V (a2+b2+c2) V00001Rx(以)=10000c(b2+c2) V b(b2+c2) V00b(b2+

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

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2