旋转变换一旋转矩阵.docx

上传人:b****1 文档编号:15246851 上传时间:2023-07-02 格式:DOCX 页数:7 大小:18.41KB
下载 相关 举报
旋转变换一旋转矩阵.docx_第1页
第1页 / 共7页
旋转变换一旋转矩阵.docx_第2页
第2页 / 共7页
旋转变换一旋转矩阵.docx_第3页
第3页 / 共7页
旋转变换一旋转矩阵.docx_第4页
第4页 / 共7页
旋转变换一旋转矩阵.docx_第5页
第5页 / 共7页
旋转变换一旋转矩阵.docx_第6页
第6页 / 共7页
旋转变换一旋转矩阵.docx_第7页
第7页 / 共7页
亲,该文档总共7页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

旋转变换一旋转矩阵.docx

《旋转变换一旋转矩阵.docx》由会员分享,可在线阅读,更多相关《旋转变换一旋转矩阵.docx(7页珍藏版)》请在冰点文库上搜索。

旋转变换一旋转矩阵.docx

旋转变换一旋转矩阵

旋转变换

(一)旋转矩阵

1.简介

计算机图形学中的应用非常广泛的变换是一种称为仿射变

换的特殊变换,在仿射变换中的基本变换包括平移、旋转、

缩放、剪切这几种。

本文以及接下来的几篇文章重点介绍一

下关于旋转的变换,包括二维旋转变换、三维旋转变换以及

它的一些表达方式(旋转矩阵、四元数、欧拉角等)。

2.绕原点二维旋转

首先要明确旋转在二维中是绕着某一个点进行旋转,三维中

是绕着某一个轴进行旋转。

二维旋转中最简单的场景是绕着

坐标原点进行的旋转,如下图所示:

如图所示点v绕原点旋转e角,得到点v'假设v点的坐标是(x,y),那么可以推导得到v'点的坐标(x,y')(设原点

到v的距离是r,原点到v点的向虽与x轴的夹角是)

x=rcosy=rsin

x,=rcos(0+)y,=rsin(0+)

通过三角函数展开得到

x'=rcos0cosrsin0siny'=rsin0cos+rcos0sin

带入x和y表达式得到

x'=xcos0ysin0

y'=xsin0+ycos0

写成矩阵的形式是:

[x'y']=[cos0sin0sin0cos0][xy]

尽管图示中仅仅表示的是旋转一个锐角。

的情形,但是我们

推导中使用的是三角函数的基本定义来计算坐标的,因此当

旋转的角度是任意角度(例如大于180度,导致v'点进入到

第四象限)结论仍然是成立的。

3.绕任意点的二维旋转

绕原点的旋转是二维旋转最基本的情况,当我们需要进行绕

任意点旋转时,我们可以把这种情况转换到绕原点的旋转,

思路如下:

1.首先将旋转点移动到原点处

2.执行如2所描述的绕原点的旋转

3.再将旋转点移回到原来的位置

也就是说在处理绕任意点旋转的情况下需要执行两次平移

的操作。

假设平移的矩阵是T(x,y),也就是说我们需要得到

的坐标v'=T(x,y)*R*T(-x,-y)(我们使用的是列坐标描述点的

坐标,因此是左乘,首先执行T(-x,-y))

在计算机图形学中,为了统一将平移、旋转、缩放等用矩阵

表示,需要引入齐次坐标。

(假设使用2x2的矩阵,是没有

办法描述平移操作的,只有引入3x3矩阵形式,才能统一描

述二维中的平移、旋转、缩放操作。

同理必须使用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=cos0sin00sin0cos00001xy1

从平移和旋转的矩阵可以看出,3x3矩阵的前2x2部分是和

旋转相关的,第三列与平移相关。

有了上面的基础之后,我

们很容易得出二维中绕任意点旋转的旋转矩阵了,只需要把

三个矩阵乘起来即可:

M=100010txty1cos0sin00sin0cos00001100010txty1=cos0sin00sin0cos00(1cos0)tx+tysin0(1cos0)tytxsin01

4.三维基本旋转

我们可以把一个旋转转换为绕基本坐标轴的旋转,因此有必要讨论一下绕三个坐标值x、y、z的旋转。

本文在讨论过程中使用的是类似于OpenGL中定义的右手

坐标系,同时旋转角度的正负也遵循右手坐标系的约定。

如下图所示

4.1绕X轴的旋转

在三维场景中,当一个点P(x,y,z)绕x轴旋转。

角得到点

P'(x,y'由,Z是麝x轴进行的旋转,因此x坐标保持不变,y和z组成的yoz(o是坐标原点)平面上进行的是一个二维的旋转,可以参考上图(y轴类似于二维旋转中的x轴,z轴类似于二维旋转中的y轴),于是有:

x'=xy'=ycos0zsin0z'=ysin0+zcos0

写成(4x4)矩阵的形式x'y'z'1=10000cos0sin000sin0cos000001xyz1

4.2绕Y轴旋转

绕Y轴的旋转和绕X轴的旋转类似,Y坐标保持不变,除Y轴之外,ZOX组成的平面进行一次二维的旋转(Z轴类似于二维旋转的X轴,X轴类似于二维旋转中的Y轴,注意这里

是ZOX,而不是XOZ,观察上图中右手系的图片可以很容易了解到这一点),同样有:

x'=zsin0+xcos0

y=y

z'=zcos0xsin0

写成(4x4)矩阵的形式

x'y'z'1=cos00sin000100sin00cos000001xyz1

4.3绕Z轴旋转

与上面类似,绕Z轴旋转,Z坐标保持不变,xoy组成的平

面内正好进行一次二维旋转(和上面讨论二维旋转的情况完

全一样)

x'y'z'1=cos0sin000sin0cos00000100001xyz1

4.4小结

上面描述了三维变换中绕单一轴旋转的矩阵表达形式,绕三

个轴旋转的矩阵很类似,其中绕y轴旋转的矩阵与绕x和z轴旋转的矩阵略有点不同(主要是三个轴向顺序和书写矩阵的方式不一致导致的,绕三个不同坐标旋转轴以及其他二个

坐标轴组成平面的顺序是:

XYZ(绕x轴)YZX(绕y轴)

ZXY(绕z轴),其中绕y轴旋转,其他两个轴是ZX,这和我们书写矩阵按xyz1

的方式不一致,而导致看起来绕Y轴旋转的矩阵似乎是和其他两个矩阵不一致。

如果我们颠倒写法,将公式写成

z'y'x'1=cos00sin000100sin00cos000001zyx1

的方式,那么这三个旋转矩阵看起来在形式上就统一了,都

[cos0sin0sin0cos0]

这种表现形式了(左上角都是sin9)

5.绕任意轴的三维旋转

绕任意轴的三维旋转可以使用类似于绕任意点的二维旋转一样,将旋转分解为一些列基本的旋转。

绕任意轴旋转如下图所示:

P点绕向Hu旋转。

角,得到点Q,已知P点的坐标和向Hu,如何求Q点的坐标。

我们可以把向虽u进行一些旋转,让它与z轴重合,之后旋转P到Q就作了一次绕Z轴的三维基本旋转,之后我们再执行反向的旋转,将向Hu变回到它原来的方向,也就是说需要进行的操作如下:

1.将旋转轴u绕x轴旋转至xoz平面

2.将旋转轴u绕y轴旋转至于z轴重合

3.绕z轴旋转9角

4.执行步骤2的逆过程

5.执行步骤1的逆过程

原始的旋转轴u如下图所示:

第1、2、3步骤如下图所示:

步骤1将向Hu旋转至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中绕x轴旋转的是一次基本的绕x轴的三维旋转,按

照之前的讨论,旋转矩阵是:

10000cos0sin000sin0cos000001

这里的。

就是图中所小的以角(注意以角度是绕x旋转的正的角度)

从图中我们还可以得到:

cos以=c(b2+c2)V

sin以=b(b2+c2)V

于是旋转矩阵(记作Rx(以))为:

10000c(b2+c2)Vb(b2+c2)V00b(b2+c2)Vc(b2+c2)V00001

在完成步骤1之后,向mu被变换到了r的位置,我们继续步骤2的操作,绕y轴旋转负的6角(注意:

这里的6是负的),经过这次变换之后向mu与z轴完全重合,由于这一

步也是执行的一次绕Y轴的基本旋转,旋转矩阵(记作Ry(6))

为:

cos00sin000100sin00cos000001

使用6替换表达式中的。

,此外根据图中描述,我们可以计

算得到:

cos6=(b2+c2)V(a2+b2+c2)V

sin6=a(a2+b2+c2)V

带入上面的表达式,于是旋转矩阵(记作Ry(6))为:

(b2+c2)V(a2+b2+c2)V0a(a2+b2+c2)V00100a(a2+b2+c2)V

0(b2+c2)V(a2+b2+c2)V00001

在完成前面两个步骤之后,u方向和z轴完全重合,因此执

行旋转。

角,执行的是一次绕z轴的基本三维旋转(记作

R(e),根据之前的讨论,我们可以得到:

cos0sin000sin0cos00000100001

最后两步骤是前面1和2的逆操作,也就是绕Y轴旋转6和绕X轴旋转以,这两个矩阵分别记作Ry(6)和Rx(以)得到它们的方式很简单,只需要将上面步骤1和步骤2中的角度修改成相反数即可,也就是:

Ry(6)=(b2+c2)V(a2+b2+c2)V0a(a2+b2+c2)V00100a(a2+b

2+c2)V0(b2+c2)V(a2+b2+c2)V00001

Rx(以)=10000c(b2+c2)Vb(b2+c2)V00b(b2+c2)Vc(b2+c2)VO0001

最终得到绕任意轴u旋转的旋转矩阵是【因为使用的列向

虽,因此执彳了的是左乘(从右往左)】:

MR=Rx(以)Ry(6)Rz(0)Ry(6)Rx(以)=

(注:

式中的(u,v,w)对应上文中向m(a,b,c),公式我自己笔算过,为了减少编辑公式的时间(使用LaTex编辑太繁琐,因此找了一张公式的图片贴在此处)

如果向虽是经过单位化的(单位向虽),那么有a2+b2+c2=1,

可以简化上述的公式,得到:

参考文献:

WikiRotation(mathematics)

Euler'srotationtheorem

Maths-RotationMatrices

绕任意轴旋转

RotationAboutanArbitraryAxisin3Dimensions

RotationaboutanArbitraryAxis(Line)

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 经管营销 > 经济市场

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

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