旋转变换的理解

Posted WeyneChen

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了旋转变换的理解相关的知识,希望对你有一定的参考价值。

上图将向量(x,y)旋转到\\((x_1,y_1)\\),求旋转矩阵。即已知角度\\(\\theta\\),问题表述为矩阵方程:

\\[\\begin{bmatrix} x_1 \\\\ y_1 \\end{bmatrix} = A* \\begin{bmatrix} x \\\\ y \\end{bmatrix} \\]

求变换矩阵\\(A\\)

方法一

利用平面几何的方法。

\\[\\begin{split} x_1 = {}&cos(\\theta+\\alpha)*r\\\\ = {}&cos(\\theta)*cos(\\alpha)*r - sin(\\theta)*sin(\\alpha)*r\\\\ = {}& cos(\\theta)*x-sin(\\theta)*y \\end{split} \\]

\\[\\begin{split} y_1 = {}&sin(\\theta+\\alpha)*r\\\\ = {}&sin(\\theta)*cos(\\alpha)*r+cos(\\theta)*sin(\\alpha)*r\\\\ = {}&sin(\\theta)*x + cos(\\theta)*y \\end{split} \\]

这个线性方程组写成矩阵形式,可得

\\[A = \\begin{bmatrix} cos(\\theta) & -sin(\\theta)\\\\ sin(\\theta) & cos(\\theta) \\end{bmatrix} \\]

方法二

利用线性变换的方法

\\(R^2\\)中的任意一点(x,y)经过旋转\\(\\theta\\)后变为(x1,y1),求旋转矩阵。

这是一个线性变换,设变换为

\\[T(X) = AX \\]

\\(X\\)为一个\\(R^2\\)的向量,按题意即是求变换矩阵\\(A\\)

\\(I\\)\\(R^2\\)的单位矩阵,\\(e\\)为单位列向量。即:

\\[ I = \\begin{bmatrix} 1&0\\\\ 0&1 \\end{bmatrix} =(e1,e2) \\]

按照直角坐标系理解,e1就是x轴上的(1,0)点,e2就是y轴上的(0,1)点。

\\[X = x*e1 + y*e2 \\]

由于是线性变换,所以

\\[T(X) = T(x*e1 + y*e2) = x*T(e1) + y*T(e2) =\\begin{bmatrix} T(e1)&T(e2) \\end{bmatrix}* \\begin{bmatrix} x\\\\y \\end{bmatrix} \\]

所以

\\[A =\\begin{bmatrix} T(e1)&T(e2) \\end{bmatrix} \\]


\\(T(e)\\)通过平面几何可以很容易求出来。三角形的斜边长度是1,角度是\\(\\theta\\),那么对边是\\(sin(\\theta)\\),即x坐标,邻边是\\(cos(\\theta)\\),即y坐标。

\\[ T(e1) = \\begin{bmatrix} cos(\\theta)\\\\ sin(\\theta) \\end{bmatrix} \\]

同理求得:

\\[ T(e2) = \\begin{bmatrix} -sin(\\theta)\\\\ cos(\\theta) \\end{bmatrix} \\]

因为旋转到x轴的负方向,所以取负值。

所以

\\[ A = \\begin{bmatrix} cos(\\theta)&-sin(\\theta)\\\\ sin(\\theta)&cos(\\theta) \\end{bmatrix} \\]

以上是关于旋转变换的理解的主要内容,如果未能解决你的问题,请参考以下文章

从基变换的角度理解旋转矩阵R

183Java8对图片做顺时针旋转90度逆时针旋转90度旋转180度水平翻转垂直翻转操作。

183Java8对图片做顺时针旋转90度逆时针旋转90度旋转180度水平翻转垂直翻转操作。

Android Matrix 的理解与应用

对 OpenCV 中 getRotationMatrix2D 函数和仿射变换的一点理解

如何理解矩阵相乘的几何意义或现实意义