坐标变换
同一坐標系下的點旋轉變換(如圖1所示)和不同坐標系之間的旋轉變換(如圖2所示),一直困擾著我,它們是兩個不同的概念,但形式上有很相似,以二維空間為例做了下推導,加深理解。
同一坐標系下的點旋轉變換,比較好理解,是在相同的坐標系下做的旋轉變換。如圖3所示,已知逆時針的旋轉角度為θ,我們引入中間變量向量的長度r和水平夾角α,顯而易見地,推導公式如下:
x=rcos(θ+α)=rcos(θ)cos(α)?rsin(θ)sin(α)=x′cos(θ)?x′sin(θ)x=rcos(θ+α)=rcos(θ)cos(α)?rsin(θ)sin(α)=x′cos(θ)?x′sin(θ)
y=rsin(θ+α)=rsin(θ)cos(α)+rcos(θ)sin(α)=x′sin(θ)+x′cos(θ)y=rsin(θ+α)=rsin(θ)cos(α)+rcos(θ)sin(α)=x′sin(θ)+x′cos(θ)?
[xy]=[cos(θ)sin(θ)?sin(θ)cos(θ)][x′y′][xy]=[cos(θ)?sin(θ)sin(θ)cos(θ)][x′y′]
齊次坐標系的表達為:
???xy1???=???cos(θ)sin(θ)0?sin(θ)cos(θ)0001??????x′y′1???[xy1]=[cos(θ)?sin(θ)0sin(θ)cos(θ)0001][x′y′1]
?
不同坐標系之間的旋轉變換,這是透視變換中常用到的,它的作用是將一個點從一個坐標系統映射到另一個坐標系統下,這在將世界坐標系統映射到相機坐標系統中是很有用的。如圖4所示,已知坐標系O'X'Y'相對于OXY坐標系逆時針的旋轉角度為θ,O'X'Y'的坐標原點O'相對于OXY的坐標為(x0,y0),我們引入中間變量向量的長度r和水平夾角α。變換的思路是,先對O'X'Y'坐標系旋轉θ,然后在平移(x0,y0)。推導過程如下:
x=rcos(θ+α)+x0=rcos(θ)cos(α)?rsin(θ)sin(α)=x′cos(θ)?x′sin(θ)+x0x=rcos(θ+α)+x0=rcos(θ)cos(α)?rsin(θ)sin(α)=x′cos(θ)?x′sin(θ)+x0
y=rsin(θ+α)+y0=rsin(θ)cos(α)+rcos(θ)sin(α)=x′sin(θ)+x′cos(θ)+y0y=rsin(θ+α)+y0=rsin(θ)cos(α)+rcos(θ)sin(α)=x′sin(θ)+x′cos(θ)+y0
[xy]=[cos(θ)sin(θ)?sin(θ)cos(θ)][x′y′]+[x0y0][xy]=[cos(θ)?sin(θ)sin(θ)cos(θ)][x′y′]+[x0y0]
?齊次坐標系的表達為:?
[xy]=???cos(θ)sin(θ)0?sin(θ)cos(θ)0x0y01??????x′y′1???[xy]=[cos(θ)?sin(θ)x0sin(θ)cos(θ)y0001][x′y′1]
?注意齊次坐標的作用是把旋轉縮放和平移結合起來,在傳統的歐幾里得空間中是做不到的,需要在投影空間中的齊次坐標系統下完成。
同理可以擴展到三維空間。OXYZ坐標系統可以看作是相機坐標系統,O'X'Y'Z'可以看做世界坐標系統,
?
參考資料:
[1].矩陣的坐標變換(轉)(里面介紹了矩陣的旋轉縮放,還有推導過程,強烈推薦★★★★★)
?
最直觀的理解可以從下圖得到:
總結
- 上一篇: 查询php 输出表格,php输出exce
- 下一篇: C创建临时文件