浏览量:1,571

坐标系统的变换

本文主要介绍图形学中坐标系统变换的理论基础。

2016-9-28-21-17-53

图1. 坐标系统的变换

以二维为例,如图1所示。设坐标系统\({{\Gamma }_{1}}\),原点在\({{\theta }_{1}}=\left( 0,0,1 \right)\),两条坐标轴分别为\({{\vec{i}}_{1}}=\left( 1,0,0 \right),{{\vec{j}}_{1}}=\left( 0,1,0 \right)\),点\(P\)在坐标系统\({{\Gamma }_{1}}\)上的坐标为\(\left( {{a}_{1}},{{b}_{1}} \right)\);类似的,点\(P\)在坐标系统\({{\Gamma }_{2}}\)上的坐标为\(\left( {{a}_{2}},{{b}_{2}} \right)\)。设坐标轴\({{\vec{i}}_{1}},{{\vec{j}}_{1}}\),原点\({{\theta }_{1}}\)经过一个矩阵变换\(M\),得到坐标系统\({{\Gamma }_{2}}\)的坐标轴和原点,即有:

\[{\vec i_2} = M \cdot {\vec i_1},{\vec j_2} = M \cdot {\vec j_1},{\theta _2} = M \cdot {\theta _1} \tag{1}\]

那么,坐标\(\left( {{a}_{1}},{{b}_{1}} \right)\)\(\left( {{a}_{2}},{{b}_{2}} \right)\)之间的关系可以表示为(齐次表示,参见文章《齐次表示》):

\[\left( {\begin{array}{*{20}{c}}{{a_1}}\\{{b_1}}\\1\end{array}} \right) = M \cdot \left( {\begin{array}{*{20}{c}}{{a_2}}\\{{b_2}}\\1\end{array}} \right) \tag{2}\]

注意,等式(1)右侧分别为坐标系统\({{\Gamma }_{1}}\)的坐标表示和原点,但是等式(2)的右侧却是坐标系统\({{\Gamma }_{2}}\)的坐标信息,这里简单阐述下推导过程:

1. 由坐标系统\({{\Gamma }_{1}},{{\Gamma }_{2}}\)的坐标表示有:

\[{a_1}{\vec i_1} + {b_1}{\vec j_1} + {\theta _1} = {a_2}{\vec i_2} + {b_2}{\vec j_2} + {\theta _2} \tag{3}\]

2. 把(1)代入(3),可以得到:

\[\left( {\begin{array}{*{20}{c}}{{{\vec i}_1}}&{{{\vec j}_1}}&{{\theta _1}}\end{array}} \right)\left( {\begin{array}{*{20}{c}}{{a_1}}\\{{b_1}}\\1\end{array}} \right) = M\left( {\begin{array}{*{20}{c}}{{{\vec i}_1}}&{{{\vec j}_1}}&{{\theta _1}}\end{array}} \right)\left( {\begin{array}{*{20}{c}}{{a_2}}\\{{b_2}}\\1\end{array}} \right)\]

3. 又\({{\vec{i}}_{1}}=\left( 1,0,0 \right),{{\vec{j}}_{1}}=\left( 0,1,0 \right),{{\theta }_{1}}=\left( 0,0,1 \right)\),易知等式(2)成立。

进一步,我们可以拓展下坐标系统变换的问题,设有\(n\)个连续的坐标系统变换,它们满足条件:

\[{\vec i_n} = {M_{n - 1}} \cdot {\vec i_{n - 1}},{\vec j_n} = {M_{n - 1}} \cdot {\vec j_{n - 1}},{\theta _n} = {M_{n - 1}} \cdot {\theta _{n - 1}}\]

其中,\(n\succ 1,{{\vec{i}}_{1}}=\left( 1,0,0 \right),{{\vec{j}}_{1}}=\left( 0,1,0 \right),{{\theta }_{1}}=\left( 0,0,1 \right)\)

由上述的推导,我们易知:

\[\left( {\begin{array}{*{20}{c}}{{a_1}}\\{{b_1}}\\1\end{array}} \right) = {M_{n - 1}} \cdot {M_{n - 2}} \cdots {M_{n - 1}}\left( {\begin{array}{*{20}{c}}{{a_n}}\\{{b_n}}\\1\end{array}} \right) \tag{4}\]

再进一步,扩展为三维空间下坐标系统的变换,类似的等式也成立,不再赘述。

2016-9-28-21-18-07

图2. 在世界坐标系中的照相机示意图

最后,介绍个图形学中坐标系统变换的实例(这里采用右手坐标系),将坐标由世界坐标系统变换至视点坐标系统,如图2所示,参见《OpenGL原理介绍》。在世界坐标系统下,照相机位于坐标\(eye=\left( ey{{e}_{x}},ey{{e}_{y}},ey{{e}_{z}} \right)\),照相机向着\(\overrightarrow{look}\)方向观察场景,照相机垂直向上的方向为\(\overrightarrow{up}\),因此照相机的配置信息能构造一个视点坐标系统,令\(\overrightarrow{n}=-\overrightarrow{look},\overrightarrow{u}=\overrightarrow{up}\times \overrightarrow{n},\overrightarrow{v}=\overrightarrow{n}\times \overrightarrow{u}\),则该视点坐标系统的三条坐标轴\(x,y,z\)分别对应\(\overrightarrow{u},\overrightarrow{v},\overrightarrow{n}\),原点位于\(eye\)。设空间中有一个点\(P\),它在世界坐标系下的坐标表示为\({{P}_{world}}\),它在视点坐标系统下的坐标表示为\({{P}_{view}}\)。结合等式(1)(2)易知,存在一个\(4\times 4\)的齐次矩阵\(M\),使得:

\[M \cdot \left( {\begin{array}{*{20}{c}}0\\0\\0\\1\end{array}} \right) = \left( {\begin{array}{*{20}{c}}{ey{e_x}}\\{ey{e_y}}\\{ey{e_z}}\\1\end{array}} \right),M \cdot \left( {\begin{array}{*{20}{c}}1\\0\\0\\0\end{array}} \right) = \left( {\begin{array}{*{20}{c}}{{u_x}}\\{{u_y}}\\{{u_z}}\\0\end{array}} \right),M \cdot \left( {\begin{array}{*{20}{c}}0\\1\\0\\0\end{array}} \right) = \left( {\begin{array}{*{20}{c}}{{v_x}}\\{{v_y}}\\{{v_z}}\\0\end{array}} \right),M \cdot \left( {\begin{array}{*{20}{c}}0\\0\\1\\0\end{array}} \right) = \left( {\begin{array}{*{20}{c}}{{n_x}}\\{{n_y}}\\{{n_z}}\\0\end{array}} \right) \tag{5}\]

则有等式:

\[M \cdot {P_{view}} = {P_{world}} \tag{6}\]

由等式(5)且\(\overrightarrow{u}\cdot \overrightarrow{v}=\overrightarrow{v}\cdot \overrightarrow{n}=\overrightarrow{n}\cdot \overrightarrow{u}=0\),可以推导出矩阵\(M\)为:

\[M = \left( {\begin{array}{*{20}{c}}{{u_x}}&{{u_y}}&{{u_z}}&0\\{{v_x}}&{{v_y}}&{{v_z}}&0\\{{n_z}}&{{n_z}}&{{n_z}}&0\\{ey{e_x}}&{ey{e_y}}&{ey{e_z}}&1\end{array}} \right) \tag{7}\]

易知,\({{M}^{-1}}\)为:

\[M = \left( {\begin{array}{*{20}{c}}{{u_x}}&{{v_x}}&{{n_x}}&0\\{{u_y}}&{{v_y}}&{{n_y}}&0\\{{u_z}}&{{v_z}}&{{n_z}}&0\\{ - eye \cdot \overrightarrow u }&{ - eye \cdot \overrightarrow v }&{ - eye \cdot \overrightarrow n }&1\end{array}} \right) \tag{8}\]

spacer

Leave a reply