同一座標系下的點旋轉變換(如圖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
x\\
y\end=\begin
cos(\theta) & -sin(\theta) \\
sin(\theta) &cos(\theta) &
\end\begin
x^\\
y^\end\)
齊次座標系的表達為:
\(\begin
x\\
y\\1
\end=\begin
cos(\theta) & -sin(\theta) &0\\
sin(\theta) &cos(\theta) & 0 \\
0&0&1
\end\begin
x^\\
y^\\
1\end\)
不同座標系之間的旋轉變換,這是透視變換中常用到的,它的作用是將乙個點從乙個座標系統對映到另乙個座標系統下,這在將世界座標系統對映到相機座標系統中是很有用的。如圖4所示,已知座標系o'x'y'相對於oxy座標系逆時針的旋轉角度為θ,o'x'y'的座標原點o'相對於oxy的座標為(x0,y0),我們引入中間變數向量的長度r和水平夾角α。變換的思路是,先對o'x'y'座標系旋轉θ,然後在平移(x0,y0)。推導過程如下:
\(x=rcos(\theta+\alpha)+x_=rcos(\theta)cos(\alpha)-rsin(\theta)sin(\alpha)=x^cos(\theta)-x^sin(\theta)+x_\)
\(y=r sin(\theta+\alpha)+y_=rsin(\theta)cos(\alpha)+rcos(\theta)sin(\alpha)=x^sin(\theta)+x^cos(\theta)+y_\)
\(\begin
x\\
y\end=\begin
cos(\theta) & -sin(\theta) \\
sin(\theta) &cos(\theta) &
\end\begin
x^\\
y^\end+\begin
x^\\
y^\end\)
齊次座標系的表達為:
\(\begin
x\\
y\end=\begin
cos(\theta) & -sin(\theta) &x^\\
sin(\theta) &cos(\theta) &y^\\
0&0 &1
\end\begin
x^\\
y^\\
1\end\)
注意齊次座標的作用是把旋轉縮放和平移結合起來,在傳統的歐幾里得空間中是做不到的,需要在投影空間中的齊次座標系統下完成。
同理可以擴充套件到三維空間。oxyz座標系統可以看作是相機座標系統,o'x'y'z'可以看做世界座標系統,
點旋轉和座標系旋轉
同一座標系下的點旋轉變換 如圖1所示 和不同座標系之間的旋轉變換 如圖2所示 一直困擾著我,它們是兩個不同的概念,但形式上有很相似,以二維空間為例做了下推導,加深理解。同一座標系下的點旋轉變換,比較好理解,是在相同的座標系下做的旋轉變換。如圖3所示,已知逆時針的旋轉角度為 我們引入中間變數向量的長度...
座標系的旋轉
1 簡單3維座標系旋轉平移 原始座標系下座標點p1 0,2,1 原始座標系繞自身z軸旋轉 90度變換為新座標系,p1在新座標系下的座標點為p2 2,0,1 得出結論 求原始點在目標座標系下的座標,需要將原始座標系繞自身3軸旋轉與目標座標系軸向重合,得到旋轉矩陣r,求得原始座標系原點在目標座標系下的3...
python旋轉座標系 四元數旋轉座標系
這個問題和 senderle給出的答案真的幫助了我的乙個專案。答案是最小的,涵蓋了乙個人可能需要執行的大多數四元數計算的核心。對於我自己的專案,我發現為所有操作分別使用函式並在每次需要時逐個匯入它們是很乏味的,所以我實現了乙個物件導向的版本。四元數.py import numpy as np fro...