先附上原文鏈接:
https://www.zybuluo.com/yuyujunjun/note/879480
由于簡書對數(shù)學(xué)公式的兼容性不那么好,還是請移步到原文去看。
比例變換
沿坐標(biāo)軸變換: 乘對應(yīng)對角矩陣即可
沿任意坐標(biāo)變換:
-
首先將其變換到標(biāo)準(zhǔn)坐標(biāo)系中:
乘該坐標(biāo)系的逆矩陣,如果是該坐標(biāo)系正交,則其逆矩陣為其轉(zhuǎn)置矩陣,如何求逆矩陣,詳見我另一篇博客。 乘以對角矩陣施加變換
再乘以該坐標(biāo)系變換回來
旋轉(zhuǎn)變換
對于二維向量:
< x,y >變成 <-y,x> 即可求出其旋轉(zhuǎn)90度的向量,和原始向量構(gòu)成一組基可求的與原始向量成任意角度的新向量。
對于三維向量:
矩陣方法:(假設(shè)向量皆為單位向量)
將原始向量P繞任意軸A旋轉(zhuǎn)任意角度:
- 首先沿著該軸將向量分解為沿軸的分量Y和垂直軸的分量C,因?yàn)槠叫杏谳S的分量在旋轉(zhuǎn)過程中不變,我們只用考慮垂直軸的分量C:
$$Y:(A \cdot P)A $$
$$ C: P - Y $$ - 計(jì)算得到垂直A且包含C的平面,則可以在該平面內(nèi)做二維旋轉(zhuǎn)變換
- 將旋轉(zhuǎn)后的向量加上Y即得到最后結(jié)果
$$P'=Pcos\theta + (A \times P)sin \theta + A(A \cdot P)(1 - cos \theta) $$
四元數(shù)方法:
四元數(shù)介紹:
$q=<w,x,y,z>=w + xi+yj+zk$ 或者 $q=s+\textbf{v}$
$\bar{q}=s-\textbf{v}$
$q_1q_2=s_1s_2-\textbf{$v_1$}\textbf{$v_2$}+s_1\textbf{$v_2$}+s_2\textbf{$v_1$}+\textbf{$v_1$}\textbf{$v_2$}$
旋轉(zhuǎn)相當(dāng)于將原始的一個(gè)角經(jīng)過一個(gè)函數(shù)變換,使之長度、角度、手相性不變。
長度不變:$$length(F(P))=length(P)$$
角度不變:$$F(P_1) \cdot F(P_2) = P_1 \cdot P_2$$
手相性不變:$$F(P_1) \times F(P_2) = F (P_1 \times P_2)$$
對于這樣的F,我們有$F(P)=qPq^{-1}$,其中q為非零的四元數(shù)
$\textbf{note:}$ 任意標(biāo)量a,乘以q,得到的 aq 和 q 執(zhí)行的是相同的旋轉(zhuǎn)操作。
最后結(jié)論:繞A軸進(jìn)行旋轉(zhuǎn),相當(dāng)于$$q=cos\frac{\theta}{2}+Asin\frac{\theta}{2}$$的上述函數(shù)運(yùn)算。
平移操作
將點(diǎn)P從一個(gè)坐標(biāo)系變換到另一個(gè)坐標(biāo)系的表達(dá)式為:$$ P'=MP+T $$
具體操作:
$$F=
\left{
\begin{matrix}
&M&T\
&0&1
\end{matrix}
\right}
$$
將$P$擴(kuò)充為$<P_x,P_y,P_z,1>$
實(shí)際應(yīng)用中:
平移變換中,表示點(diǎn)的向量將會(huì)發(fā)生變化,但是表示方向的向量不變。
所以在進(jìn)行變化過程中,表示點(diǎn)的向量的$w$分量設(shè)為1,但是表示方向向量的$w$分量設(shè)置為0,則可以統(tǒng)一變化。
$\textbf{note:$w$的幾何意義——投影}$
- $\bar{P}=<\frac{x}{w},\frac{y}{w},\frac{z}{w}>$表示P向量與$w=1$平面的交點(diǎn)。
- 給四維向量P乘以任何比例系數(shù),都對應(yīng)三維空間的相同點(diǎn)。
除了點(diǎn)之外的變換
前面已經(jīng)提到對于方向向量的平移該如何變換,旋轉(zhuǎn)和縮放方向向量和普通點(diǎn)的變換類似。
這里講點(diǎn)的切向量和法向量的變換。
切向量
切向量可以通過兩個(gè)頂點(diǎn)向量之間的差獲得,因此可以用變換后的兩個(gè)定點(diǎn)作差得到,在變換過程中,可以用相同矩陣進(jìn)行變化。(如果是4維,應(yīng)向方向向量一樣擴(kuò)充得到)
法向量
變換后的法向量常常指向一個(gè)與變換表面不垂直的方向。
但是切向量和法向量內(nèi)積的值是一定等于0的。已知初始切向量法向量,變換后的切向量,我們可以得到變換后的法向量。
$N\cdot T=N'\cdot T'=(GN)\cdot (MT) =0$
其中M是一般點(diǎn)的變換矩陣,G是我們需要求的法向量的變換矩陣。
$N\cdot T=N^TT$
$(GN)\cdot (MT)=(GN)T(MT)=NTG^TMT=0$
所以只需要$GTM=I$即可,所以$G=(M{-1})^T$,如果M是正交矩陣,則$G=M$。