7.2 Coordenadas homogêneas
A expressão
\[\mathbf{v}'=\mathbf{A}\mathbf{v},\]
onde
\[ \mathbf{v}'=\begin{bmatrix}x'\\y'\\z'\end{bmatrix},\qquad \mathbf{A}=\begin{bmatrix} a_{11} & a_{12} & a_{13} \\ a_{21} & a_{22} & a_{23} \\ a_{31} & a_{32} & a_{33} \end{bmatrix}, \qquad \mathbf{v}=\begin{bmatrix}x\\y\\z\end{bmatrix}, \]
representa uma transformação linear do vetor \(\mathbf{v} \in \mathbb{R}^3\).
Podemos considerar que \(\mathbf{v}\) também representa um ponto no frame padrão do espaço euclidiano tridimensional: é o ponto resultante do deslocamento da origem pelo vetor \(\mathbf{v}\). Com isso podemos aplicar transformações lineares sobre pontos. Entretanto, essa notação não permite diferenciar o que é a representação de um ponto e o que é a representação de um vetor. Além disso, a matriz de transformação linear no \(\mathbb{R}^3\) não é capaz de representar transformações que envolvem deslocamento de pontos. A simples operação
\[\mathbf{p'}=\mathbf{p}+\mathbf{t},\]
onde \(\mathbf{p}\) é um ponto e \(\mathbf{t}\) é um vetor, não pode ser representada como uma matriz de transformação linear na forma
\[ \mathbf{p}'=\mathbf{A}\mathbf{p}\\ \\ \begin{bmatrix}x'\\y'\\z'\end{bmatrix}= \begin{bmatrix} a_{11} & a_{12} & a_{13} \\ a_{21} & a_{22} & a_{23} \\ a_{31} & a_{32} & a_{33} \end{bmatrix} \begin{bmatrix}x\\y\\z\end{bmatrix}. \]
Felizmente, podemos contornar essas dificuldades se representarmos pontos e vetores do \(\mathbb{R}^3\) em um sistema de coordenadas homogêneas no espaço \(\mathbb{R}^4\).
Como vimos na definição de combinação afim (seção 6.2), podemos considerar que é válido multiplicar um escalar \(a\) por um ponto \(P\), de modo que
\[ 0 P = \mathbf{0},\\ 1 P = P. \]
Um ponto \(P=(x,y,z)\) no frame \(\{P_0, \mathbf{v}_1, \mathbf{v}_2, \mathbf{v}_3\}\) é definido unicamente como
\[ P = x\mathbf{v}_1 + y\mathbf{v}_2 + z\mathbf{v}_3 + P_0. \]
Em coordenadas homogêneas, \(P\) pode ser representado pela matriz coluna de coeficientes
\[ \begin{align} \mathbf{p}&=\begin{bmatrix}x\\y\\z\\1\end{bmatrix}, \end{align} \]
uma vez que
\[ \begin{align} P &= x\mathbf{v}_1 + y\mathbf{v}_2 + z\mathbf{v}_3 + P_0\\ &= \begin{bmatrix}x & y & z & 1\end{bmatrix} \begin{bmatrix}\mathbf{v}_1 \\ \mathbf{v}_2 \\ \mathbf{v}_3 \\ P_0\end{bmatrix}. \end{align} \]
De forma semelhante, um vetor \(\mathbf{v}\) no mesmo frame,
\[ \mathbf{v} = x\mathbf{v}_1 + y\mathbf{v}_2 + z\mathbf{v}_3, \]
pode ser definido em coordenadas homogêneas pela matriz coluna de coeficientes
\[ \begin{align} \mathbf{v}&=\begin{bmatrix}x\\y\\z\\0\end{bmatrix}, \end{align} \]
uma vez que
\[ \begin{align} \mathbf{v} &= x\mathbf{v}_1 + y\mathbf{v}_2 + z\mathbf{v}_3\\ &= \begin{bmatrix}x & y & z & 0\end{bmatrix} \begin{bmatrix}\mathbf{v}_1 \\ \mathbf{v}_2 \\ \mathbf{v}_3 \\ P_0\end{bmatrix}. \end{align} \]
Na expressão
\[\mathbf{p}'=\mathbf{A}\mathbf{p},\]
onde
\[ \mathbf{p}'=\begin{bmatrix}x'\\y'\\z'\\w'\end{bmatrix},\qquad \mathbf{A}=\begin{bmatrix} a_{11} & a_{12} & a_{13} & a_{14} \\ a_{21} & a_{22} & a_{23} & a_{24} \\ a_{31} & a_{32} & a_{33} & a_{34} \\ 0 & 0 & 0 & 1 \end{bmatrix}, \qquad \mathbf{p}=\begin{bmatrix}x\\y\\z\\w\end{bmatrix}, \]
a matriz \(\mathbf{A}\) representa uma transformação linear no \(\mathbb{R}^4\) e uma transformação afim no \(\mathbb{R}^3\).
A transformação afim preserva a operação de combinação afim, isto é,
\[ T(aP+(1-a)Q)=aT(P)+(1-a)T(Q) \]
para quaisquer pontos \(P\) e \(Q\), e qualquer escalar \(a \in [0,1]\).
Assim como a transformação linear transforma espaços vetoriais, a transformação afim de um ponto \(\mathbf{p}\) equivale à transformação do frame de \(\mathbf{p}\) em outro frame (frame de \(\mathbf{p}'\)).
Com a matriz de transformação afim, conseguimos representar tanto as transformações de espaços vetoriais quanto as transformações que envolvem deslocamento de pontos.
Como mostra a figura 7.1, a parte \(3 \times 3\) superior de \(\mathbf{A}\) representa uma ou mais transformações lineares em \(\mathbb{R}^3\) (como a rotação, escala e reflexão, abordadas na seção 7.4). A parte \(3 \times 1\) da última coluna (\(\begin{bmatrix}a_{14} & a_{24} & a_{34}\end{bmatrix}^T\)) representa uma translação (deslocamento de ponto).
Agora podemos representar o deslocamento \(\mathbf{p'}=\mathbf{p}+\mathbf{t}\) através de uma operação matricial:
\[ \mathbf{p}'=\mathbf{A}\mathbf{p}\\ \\ \begin{bmatrix}x+t_x\\y+t_y\\z+tz\\1\end{bmatrix}= \begin{bmatrix} 1 & 0 & 0 & t_x \\ 0 & 1 & 0 & t_y \\ 0 & 0 & 1 & t_z \\ 0 & 0 & 0 & 1 \end{bmatrix} \begin{bmatrix}x\\y\\z\\1\end{bmatrix}. \]
Observe como, de fato, os fatores de deslocamento estão na parte \(3 \times 1\) da última coluna.
Em \(\mathbf{p}=\begin{bmatrix}x & y & z & w\end{bmatrix}^T\), a coordenada \(w\) é chamada de coordenada homogênea.
A escolha de fazer \(w=1\) para pontos e \(w=0\) para vetores permite diferenciar, sem ambiguidades, as operações de adição de vetor com vetor, diferença entre pontos, e adição de ponto com vetor:
Na adição de vetor com vetor, o resultado é um vetor (coordenada \(w=0\)):
\[ \begin{align} \mathbf{u}+\mathbf{v}&=\mathbf{w},\\ \\ \begin{bmatrix}u_x\\u_y\\u_z\\0\end{bmatrix}+ \begin{bmatrix}v_x\\v_y\\v_z\\0\end{bmatrix}&= \begin{bmatrix}u_x+v_x\\u_y+v_y\\u_z+v_z\\0\end{bmatrix}. \end{align} \]
Na diferença entre pontos, o resultado é um vetor (coordenada \(w=0\)):
\[ \begin{align} \mathbf{p}-\mathbf{q}&=\mathbf{u},\\ \\ \begin{bmatrix}p_x\\p_y\\p_z\\1\end{bmatrix}- \begin{bmatrix}q_x\\q_y\\q_z\\1\end{bmatrix}&= \begin{bmatrix}p_x-q_x\\p_y-q_y\\p_z-q_z\\0\end{bmatrix}. \end{align} \]
Na adição de ponto com vetor, o resultado é um ponto (coordenada \(w=1\)):
\[ \begin{align} \mathbf{p}+\mathbf{u}&=\mathbf{q},\\ \\ \begin{bmatrix}p_x\\p_y\\p_z\\1\end{bmatrix}+ \begin{bmatrix}u_x\\u_y\\u_z\\0\end{bmatrix}&= \begin{bmatrix}p_x+u_x\\p_y+u_y\\p_z+u_z\\1\end{bmatrix}. \end{align} \]
Coordenadas homogêneas \((x,y,z,w)\) podem ser convertidas de volta para coordenadas cartesianas \((x',y',z')\) do espaço euclidiano 3D através da divisão de \(x\), \(y\), \(z\) por \(w\):
\[ (x', y', z') = \left(\frac{x}{w}, \frac{y}{w}, \frac{z}{w}\right). \]
Assim, um ponto \(\mathbf{p}\) em coordenadas homogêneas,
\[ \mathbf{p}=\begin{bmatrix}x \\ y \\ z \\ 1\end{bmatrix}, \]
corresponde, em coordenadas cartesianas, ao ponto
\[ \mathbf{p}'=\begin{bmatrix}x \\ y \\ z\end{bmatrix}=\begin{bmatrix}x/1 \\ y/1 \\ z/1\end{bmatrix}. \]
Em transformações afins expressas de forma homogênea, o valor de \(w\) será sempre \(0\) ou \(1\). Entretanto, em matrizes de transformação projetiva, \(w\) poderá assumir outros valores.
Transformações projetivas serão abordadas no próximo capítulo. Entretanto, perceba que a divisão por \(w\) faz com que um ponto \((x',y',z')\) do espaço euclidiano 3D corresponda a infinitos pontos no espaço de dimensão extra (4D). Em particular, os pontos \((sx,sy,sz,sw)\), onde \(s \neq 0\) e \(w \neq 0\), correspondem ao mesmo ponto \((x',y',z')\) do espaço euclidiano:
\[ (x', y', z') = \left(\frac{sx}{sw}, \frac{sy}{sw}, \frac{sz}{sw}\right) = \left(\frac{x}{w}, \frac{y}{w}, \frac{z}{w}\right). \]
Em outras palavras, os pontos \((sx,sy,sz,sw)\) do \(\mathbb{R}^4\) são projetados em um mesmo ponto \((x',y',z')\) do \(\mathbb{R}^3\). Esse comportamento será útil para simular o efeito de diminuição do tamanho de objetos em uma projeção perspectiva. Em particular, note que:
- Se um objeto é formado por pontos com coordenada homogênea \(w > 1\), o objeto diminui de tamanho após a conversão para o espaço euclidiano;
- Se um objeto é formado por pontos com coordenadas homogênea \(0 \leq w < 1\), o objeto aumenta de tamanho após a conversão para o espaço euclidiano.