第四章 坐标系相关性(Respect)

4.1 坐标系的重要性

在计算机图形学中,我们同时记录许多不同的坐标系。例如,我们也许对场景中的每一个物体都有一个不同的坐标系与之相关联。我们如何使用和组织这些坐标系的细节在第 5 章中描述。因为有如此多的坐标系,当使用矩阵来定义变换时,我们需要非常小心。

假设我们指定一个点和一个变换矩阵;这并不能完全表示实际的映射。我们必须也指定我们所使用的坐标系。这里有一个简单的例子。假设我们开始于某一点p~\tilde{p}以及矩阵

S=[2000010000100001] \mathbf{S} = \left[ \begin{matrix} 2 & 0 & 0 & 0 \\ 0 & 1 & 0 & 0 \\ 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 1 \end{matrix} \right]

现在我们来确定一个坐标系ft\vec{\mathbf{f}}^t。有了这个向量基,我们想要表示的点可以由对应合适的坐标系向量表示为p~=ftc\tilde{p}=\vec{\mathbf{f}}^t\mathbf{c}。如果我们现在使用上面的矩阵来变换该点,如同第 3 章中描述的,我们得到ftcftSc\vec{\mathbf{f}}^t\mathbf{c}\Rightarrow\vec{\mathbf{f}}^tS\mathbf{c}。在这个情况下,该矩阵的作用是从坐标系ft\vec{\mathbf{f}}^t的原点开始,用缩放系数 2 来变换该点,缩放方向为ft\vec{\mathbf{f}}^t的第一个轴向(xx)。

假设我们重新选择另一个坐标系at\vec{\mathbf{a}}^t,并且假设这个坐标系与原先的坐标系通过矩阵可以建立相关关系at=ftA\vec{\mathbf{a}}^t=\vec{\mathbf{f}}^tA。我们可以用一个新的坐标系向量在新的坐标系内表示原点p~=ftc=atd\tilde{p}=\vec{\mathbf{f}}^t\mathbf{c}=\vec{\mathbf{a}}^t\mathbf{d},其中d=A1c\mathbf{d}=A^{-1}\mathbf{c}

现在如果我们使用SS来对相关于at\vec{\mathbf{a}}^t的点进行变换,我们得到atdatSd\vec{\mathbf{a}}^t\mathbf{d}\Rightarrow\vec{\mathbf{a}}^tS\mathbf{d}。此时,我们对同一个点p~\tilde{p}进行了缩放,但这一次,它是从at\vec{\mathbf{a}}^t的原点,沿着at\vec{\mathbf{a}}^t的第一个轴向(xx)进行缩放。它是一个与之前不同的变换(图4.1)。图 4.2 展示了当使用一个固定的矩阵RR旋转一个点时遇到同样对坐标系的依赖性。

图 4.1: 缩放矩阵SS将点p~\tilde{p}相关于两个不同的坐标系下缩放。得到了两个不同的结果。

图 4.2: 旋转矩阵RR将点p~\tilde{p}相关于两个不同的坐标系下缩放。得到了两个不同的结果。

在这里需要关注的重点是,对点的变换(在本例中是非均匀缩放)在表达式中与变换矩阵左侧的首先出现的坐标系相关。因此我们称之为左侧原则(left-of-rule)。我们将

p~=ftcftSc \tilde{p}=\vec{\mathbf{f}}^t\mathbf{c} \Rightarrow\vec{\mathbf{f}}^tS\mathbf{c}

读作"p~\tilde{p}SS相关于ft\vec{\mathbf{f}}^t进行变换。"我们将

p~=atA1catSA1c \tilde{p} =\vec{\mathbf{a}}^tA^{-1}\mathbf{c} \Rightarrow \vec{\mathbf{a}}^tSA^{-1}\mathbf{c}

读作"p~\tilde{p}SS相关于at\vec{\mathbf{a}}^t进行变换"。

我们可以对坐标系本身的变换也应用同样的逻辑。我们将

ftftS \vec{\mathbf{f}}^t \Rightarrow \vec{\mathbf{f}}^tS

读作"ft\vec{\mathbf{f}}^tSS相关于ft\vec{\mathbf{f}}^t进行变换。"我们将

ft=atA1atSA1 \vec{\mathbf{f}}^t = \vec{\mathbf{a}}^tA^{-1} \Rightarrow \vec{\mathbf{a}}^tSA^{-1}

读作"ft\vec{\mathbf{f}}^tSS相关于at\vec{\mathbf{a}}^t进行变换"。

4.1.1 使用辅助坐标系进行变换

在很多种情况下,我们希望相关于某一辅助坐标系at\vec{\mathbf{a}}^t,以矩阵MM表示的特定方式将一个坐标系ft\vec{\mathbf{f}}^t进行变换。例如,我们或许会使用某一坐标系来对地球进行建模,而后我们希望将地球沿着太阳的坐标系来旋转。

这很容易做到,只要我们知道f\vec{\mathbf{f}}at\vec{\mathbf{a}}^t之间相关的矩阵关系。例如,我们或许知道

at=ftA \vec{\mathbf{a}}^t = \vec{\mathbf{f}}^tA

变换后的矩阵可以被表示为

在等式(4.1)的第一行,我们用at\vec{\mathbf{a}}^t重写了ft\vec{\mathbf{f}}^t。在下一行,我们使用左侧原则对坐标系系统进行了变换;使用了相关于at\vec{\mathbf{a}}^t的矩阵MM。在最后一行,我们简单的重写了表达式,移除了辅助坐标系。

4.2 多重变换

我们可以使用左侧原则来解释一系列多重变换。在这里强调,回想一下,通常,矩阵相乘是不满足互易性的。在随后的 2D 例子中,RR为一个旋转矩阵而TT是一个位移矩阵,其中位移矩阵的作用是沿着第一个轴向位移一个单位,而旋转矩阵的作用是沿着坐标系的原点(图4.3)旋转θ\theta角度。

图 4.3: 两种解释表达式ftTR\vec{\mathbf{f}}^tTR的方法

我们现在可以解释以下变换:

ftftTR \vec{\mathbf{f}}^t \Rightarrow \vec{\mathbf{f}}^tTR

我们将变换分解为两步来看,在第一步中,

ftftT=ft \vec{\mathbf{f}}^t \Rightarrow \vec{\mathbf{f}}^tT = \vec{\mathbf{f}^\prime}^t

它可以被解释为:ft\vec{\mathbf{f}}^t被相关于ft\vec{\mathbf{f}}^tTT变换,我们将结果称为坐标系ft\vec{\mathbf{f}^\prime}^t

在第二步中,

ftTftTR \vec{\mathbf{f}}^tT \Rightarrow \vec{\mathbf{f}}^tTR

或者相等的

ftftR \vec{\mathbf{f}^\prime}^t \Rightarrow \vec{\mathbf{f}^\prime}^tR

它可以被解释为:ft\vec{\mathbf{f}^\prime}^t被相关于ft\vec{\mathbf{f}^\prime}^tRR变换。

我们也可以将整体变换解释为另一种有效的方式。将旋转和位移以另一种顺序来应用。在第一步中,

ftftR=ft \vec{\mathbf{f}}^t \Rightarrow \vec{\mathbf{f}}^tR = \vec{\mathbf{f}^\circ}^t

ft\vec{\mathbf{f}}^t被相关于ft\vec{\mathbf{f}}^tRR变换,我们将结果称为坐标系ft\vec{\mathbf{f}^\circ}^t。在第二步中,

ftRftTR \vec{\mathbf{f}}^tR \Rightarrow \vec{\mathbf{f}}^tTR

ft\vec{\mathbf{f}^\circ}^t被相关于ft\vec{\mathbf{f}}^tTT变换。

这些是对最终整体变换的两种不同的解释。(1)相关于ft\vec{\mathbf{f}}^t位移,之后再相关于一个中介坐标系旋转。(2)相关于ft\vec{\mathbf{f}}^t旋转,再沿着原始的ft\vec{\mathbf{f}}^t位移。有时,使用第一种解释更方便,而有时更适合使用第二种。

这些类型的解释常常总结如下:如果我们从左到右解读变换,那么每个变化都相关于一个新产生的"局部"坐标系。如果我们从右向左解读,那么每个变化都相关于原始的"全局"坐标系。

练习

4.1 使用4.2节中的定义,画出两种不同的草图来表达变换:ftftRT\vec{\mathbf{f}}^t \Rightarrow \vec{\mathbf{f}}^tRT(与图 4.3 比较)。

4.2 假设ft\vec{\mathbf{f}}^t是一个正交坐标系,并且我们进行变换ftftST\vec{\mathbf{f}}^t\Rightarrow\vec{\mathbf{f}}^tST,其中SS是一个以系数 2 进行均匀缩放的矩阵,而TT沿着xx轴位移 1。以ft\vec{\mathbf{f}}^t的原始单位来衡量,则坐标系的远点移动了多远?

4.3 给定两个正交坐标系at\vec{\mathbf{a}}^tbt\vec{\mathbf{b}}^t

距离由正数did_i表示。怎样的矩阵RRTT可以得到bt=atTR\vec{\mathbf{b}}^t=\vec{\mathbf{a}}^tTR?怎样的矩阵RRTT可以得到bt=atRT\vec{\mathbf{b}}^t=\vec{\mathbf{a}}^tRT?(注意:不要使用矩阵TT的三角变换。)

4.4 给定以下 3 个坐标系

假设bt=atN\vec{\mathbf{b}}^t=\vec{\mathbf{a}}^tNct=atM\vec{\mathbf{c}}^t=\vec{\mathbf{a}}^tM。只用NNθ\theta来表示矩阵MM

Last updated

Was this helpful?