2D二維旋轉變換,座標旋轉變換矩陣是如何推導而來?三維旋轉變換矩陣與二維旋轉變換有什麼聯繫?

推薦開源項目:簡單的SLAM與機器人教程與編程實踐-github

我們在做幾何變換的時候經常需要把某個座標系上的所有點都進行一個旋轉,這個操作就叫做剛體旋轉(所有的點相對位置不變的發生旋轉)。下圖是一個典型的二維座標系下剛體旋轉。我們把藍色的座標系旋轉了θ\theta度,新座標系就是紅色的座標系。我們現在已知一個點相對紅色那個座標系的座標(xred,yred)(x_{red},y_{red}),和已知旋轉角度θ\theta,然後我們想求得該點相對於藍色那個座標系的座標(xblue,yblue)(x_{blue},y_{blue})
在這裏插入圖片描述

這個其實很簡單我們利用高中學的三角幾何就可以輕鬆解決。從上圖可以發現不變量是黑色的那個線段的長度。而這個長度我們是可以根據黑色點相對紅色座標系下的座標(xred,yred)(x_{red},y_{red})算出來的。黑色線段長度爲r=xred2+yred2r=\sqrt {x_{red}^2+y_{red}^2}.
然後我們可以根據紫色那個三角形計算出黑色點相對藍色座標系下的座標(xblue,yblue)(x_{blue},y_{blue})
根據高中學的三角幾何我們可以知道:
xblue=rcos(α+θ)yblue=rsin(α+θ)x_{blue}=r*cos(\alpha+\theta)\\ y_{blue}=r*sin(\alpha+\theta)
現在這個α\alpha我們是不知道的。但是我們能找到一個關於它的線索。
xred=rcos(α)yred=rsin(α)x_{red}=r*cos(\alpha)\\ y_{red}=r*sin(\alpha)

爲了用上這個線索我們需要對下面這個式子進行展開。
xblue=rcos(α+θ)=r(cos(α)cos(θ)sin(α)sin(θ))=xredcos(θ)yredsin(θ)yblue=rsin(α+θ)=r(sin(α)cos(θ)+cos(α)sin(θ))=yredcos(θ)+xredsin(θ)x_{blue}=r*cos(\alpha+\theta)=r*(cos(\alpha)*cos(\theta)-sin(\alpha)*sin(\theta))=x_{red}*cos(\theta)-y_{red}*sin(\theta)\\ y_{blue}=r*sin(\alpha+\theta)=r*(sin(\alpha)*cos(\theta)+cos(\alpha)*sin(\theta))=y_{red}*cos(\theta)+x_{red}*sin(\theta)

所以我們把上面那個式子總結成向量相乘的方式那就是:
xblue=[cos(θ),sin(θ)][xred,yred]Tx_{blue}=[cos(\theta), -sin(\theta)][x_{red},y_{red}]^T
yblue=[sin(θ),cos(θ)][xred,yred]Ty_{blue}=[sin(\theta), cos(\theta)][x_{red},y_{red}]^T
然後可以進一步整理成矩陣相乘的形式:
[cos(θ)sin(θ)sin(θ)cos(θ)]\begin{bmatrix} cos(\theta)& -sin(\theta) \\ sin(\theta) & cos(\theta) \end{bmatrix}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章