点旋转和坐标系旋转

同一坐标系下的点旋转变换(如图1所示)和不同坐标系之间的旋转变换(如图2所示),一直困扰着我,它们是两个不同的概念,但形式上有很相似,以二维空间为例做了下推导,加深理解。

同一坐标系下的点旋转变换,比较好理解,是在相同的坐标系下做的旋转变换。如图3所示,已知逆时针的旋转角度为θ,我们引入中间变量向量的长度r和水平夹角α,显而易见地,推导公式如下:

\(x=r cos(\theta+\alpha)=rcos(\theta)cos(\alpha)-rsin(\theta)sin(\alpha)=x^{'}cos(\theta)-x^{'}sin(\theta)\)
\(y=r sin(\theta+\alpha)=rsin(\theta)cos(\alpha)+rcos(\theta)sin(\alpha)=x^{'}sin(\theta)+x^{'}cos(\theta)\) 

\(\begin{bmatrix}
x\\
y
\end{bmatrix}=\begin{bmatrix}
cos(\theta) & -sin(\theta) \\
sin(\theta) &cos(\theta) &
\end{bmatrix}\begin{bmatrix}
x^{'}\\
y^{'}
\end{bmatrix}\)

齐次坐标系的表达为:

\(\begin{bmatrix}
x\\
y\\
1
\end{bmatrix}=\begin{bmatrix}
cos(\theta) & -sin(\theta) &0\\
sin(\theta) &cos(\theta) & 0 \\
0&0&1
\end{bmatrix}\begin{bmatrix}
x^{'}\\
y^{'}\\
1
\end{bmatrix}\)

 

不同坐标系之间的旋转变换,这是透视变换中常用到的,它的作用是将一个点从一个坐标系统映射到另一个坐标系统下,这在将世界坐标系统映射到相机坐标系统中是很有用的。如图4所示,已知坐标系O'X'Y'相对于OXY坐标系逆时针的旋转角度为θ,O'X'Y'的坐标原点O'相对于OXY的坐标为(x0,y0),我们引入中间变量向量的长度r和水平夹角α。变换的思路是,先对O'X'Y'坐标系旋转θ,然后在平移(x0,y0)。推导过程如下:

\(x=rcos(\theta+\alpha)+x_{0}=rcos(\theta)cos(\alpha)-rsin(\theta)sin(\alpha)=x^{'}cos(\theta)-x^{'}sin(\theta)+x_{0}\)
\(y=r sin(\theta+\alpha)+y_{0}=rsin(\theta)cos(\alpha)+rcos(\theta)sin(\alpha)=x^{'}sin(\theta)+x^{'}cos(\theta)+y_{0}\)

\(\begin{bmatrix}
x\\
y
\end{bmatrix}=\begin{bmatrix}
cos(\theta) & -sin(\theta) \\
sin(\theta) &cos(\theta) &
\end{bmatrix}\begin{bmatrix}
x^{'}\\
y^{'}
\end{bmatrix}+\begin{bmatrix}
x^{0}\\
y^{0}
\end{bmatrix}\)

 齐次坐标系的表达为: 

\(\begin{bmatrix}
x\\
y
\end{bmatrix}=\begin{bmatrix}
cos(\theta) & -sin(\theta) &x^{0}\\
sin(\theta) &cos(\theta) &y^{0}\\
0&0 &1
\end{bmatrix}\begin{bmatrix}
x^{'}\\
y^{'}\\
1
\end{bmatrix}\)

 注意齐次坐标的作用是把旋转缩放和平移结合起来,在传统的欧几里得空间中是做不到的,需要在投影空间中的齐次坐标系统下完成。

同理可以扩展到三维空间。OXYZ坐标系统可以看作是相机坐标系统,O'X'Y'Z'可以看做世界坐标系统,

 

参考资料:

[1].矩阵的坐标变换(转)(里面介绍了矩阵的旋转缩放,还有推导过程,强烈推荐★★★★★)

posted @ 2015-09-30 22:34  horsetail  阅读(7623)  评论(0编辑  收藏  举报