机器视觉入门之路(十四,图像旋转原理,c++)

接上节,如果MG直线不围绕原点O旋转,而是围绕(2,2)点旋转,该怎么办?

假定M(3,4),G(5,2),那么直线MG相对(2,2)点坐标是(1,2)和(3,0)

那么,以(2,2)点为原点,M(1,2)和G(3,0)旋转\Theta,利用公式:

\begin{bmatrix} x\\ y \end{bmatrix}=\begin{bmatrix} cos\Theta, sin\Theta \\ -sin\Theta, cos\Theta \end{bmatrix}\begin{bmatrix} x0\\ y0 \end{bmatrix}

就搞定了,要注意的是这是M(1,2)和G(3,0)针对(2,2)旋转\Theta,得到M'G',

M'=\begin{bmatrix} cos\Theta, sin\Theta \\ -sin\Theta, cos\Theta \end{bmatrix}\begin{bmatrix}1\\ 2 \end{bmatrix};G'=\begin{bmatrix} cos\Theta, sin\Theta \\ -sin\Theta, cos\Theta \end{bmatrix}\begin{bmatrix}3\\ 0 \end{bmatrix}

那么M'G'在原点坐标系是多少呢?

对了,加上(2,2)即可,\begin{bmatrix} cos\Theta, sin\Theta \\ -sin\Theta, cos\Theta \end{bmatrix}\begin{bmatrix}1\\ 2 \end{bmatrix}+\begin{bmatrix}2\\ 2 \end{bmatrix}\begin{bmatrix} cos\Theta, sin\Theta \\ -sin\Theta, cos\Theta \end{bmatrix}\begin{bmatrix}3\\ 0 \end{bmatrix}+\begin{bmatrix}2\\ 2 \end{bmatrix}

这就是MG围绕(2,2)点旋转\Theta后的坐标。

所以点(x0,y0)围绕任一点(a,b)旋转\Theta=(x,y)公式如下:

\begin{bmatrix} cos\Theta, sin\Theta \\ -sin\Theta, cos\Theta \end{bmatrix}\begin{bmatrix}x0-a\\ y0-b \end{bmatrix}+\begin{bmatrix}a\\ b \end{bmatrix}=\begin{bmatrix}x\\ y \end{bmatrix}

特殊的是(a,b)=(0,0),\begin{bmatrix} cos\Theta, sin\Theta \\ -sin\Theta, cos\Theta \end{bmatrix}\begin{bmatrix}x0-0\\ y0-0 \end{bmatrix}+\begin{bmatrix}0\\ 0 \end{bmatrix}=\begin{bmatrix}x\\ y \end{bmatrix},即\begin{bmatrix} cos\Theta, sin\Theta \\ -sin\Theta, cos\Theta \end{bmatrix}\begin{bmatrix}x0\\ y0 \end{bmatrix}=\begin{bmatrix}x\\ y \end{bmatrix}

特殊的是(a,b)=(x0,y0),\begin{bmatrix}x0\\ y0 \end{bmatrix}=\begin{bmatrix}x\\ y \end{bmatrix}

\begin{bmatrix}x0\\ y0 \end{bmatrix}=\begin{bmatrix}x\\ y \end{bmatrix}这个是什么意思呢?线段MG,M=(x0,y0),那么就是说,线段MG围绕M旋转。

如上图,G围绕M旋转,C,R也围绕M旋转,那么,矩形mgrc围绕M旋转\Theta,我们就可以搞定。

有没有我们博客里线图像工具设计的感觉?