7.3 Concatenação de transformações
Podemos expressar uma sequência, composição ou concatenação de transformações através de um produto matricial.
Por exemplo, a transformação de um ponto (ou vetor) \(\mathbf{p}\) por \(\mathbf{A}\), e em seguida por \(\mathbf{B}\), e então por \(\mathbf{C}\), pode ser escrita como:
\[\mathbf{p}'=\mathbf{C}(\mathbf{B}(\mathbf{A}\mathbf{p})),\] Como a multiplicação entre matrizes é associativa, podemos remover os parênteses:
\[\mathbf{p}'=\mathbf{C}\mathbf{B}\mathbf{A}\mathbf{p}.\]
Lembre-se que, em geral, o produto matricial não é comutativo:
\[\mathbf{CBA}\neq\mathbf{ABC}.\]
Na expressão \(\mathbf{p}'=\mathbf{C}\mathbf{B}\mathbf{A}\mathbf{p}\), a ordem de aplicação das transformações é determinada pela leitura da direita para a esquerda:
- Em 1º lugar, aplica-se a transformação representada pela matriz \(\mathbf{A}\).
- Em 2º lugar, aplica-se a transformação representada pela matriz \(\mathbf{B}\).
- Por último, a transformação representada pela matriz \(\mathbf{C}\).
Se quisermos ler a ordem das transformações da esquerda para a direita, precisamos antes calcular a transposta da expressão:\[ \begin{align} \mathbf{p}'^T&=(\mathbf{C}\mathbf{B}\mathbf{A}\mathbf{p})^T\\ &=\mathbf{p}^T\mathbf{A}^T\mathbf{B}^T\mathbf{C}^T. \end{align} \]
Observe que, neste caso, \(\mathbf{p}^T\) é uma matriz linha multiplicada à esquerda (pré-multiplicação) da matriz de transformação. Como nossa convenção neste curso é usar representações de pontos e vetores como matrizes coluna multiplicadas à direita (pós-multiplicação), usaremos sempre a expressão original \(\mathbf{p}'=\mathbf{C}\mathbf{B}\mathbf{A}\mathbf{p}\).
No caso geral, se um ponto ou vetor é representado por uma matriz coluna \(\mathbf{p}\), então a expressão
\[\mathbf{p}'=\mathbf{A}_k \mathbf{A}_{k-1}\dots\mathbf{A}_1 \mathbf{p}\]
representa a transformação do ponto/vetor por uma sequência de transformações na ordem
\[\mathbf{A}_1, \mathbf{A}_2, \dots, \mathbf{A}_k.\]
Se for necessário aplicar uma mesma sequência de transformações a diferentes pontos ou vetores, é desejável primeiramente armazenar o resultado da multiplicação das matrizes de transformação em uma única matriz. Por exemplo,
\[ \mathbf{M}=\mathbf{A}_k \mathbf{A}_{k-1}\dots\mathbf{A}_1, \]
onde \(\mathbf{M}\) representa as transformações na ordem \(\mathbf{A}_1, \mathbf{A}_2, \dots, \mathbf{A}_k\) e pode ser utilizada para transformar quantos pontos/vetores forem necessários:
\[ \mathbf{v}_1'=\mathbf{M}\mathbf{v}_1,\\ \mathbf{v}_2'=\mathbf{M}\mathbf{v}_2,\\ \vdots \]
A malha de triângulos de um modelo geométrico pode ser composta por milhares de vértices, e a transformação de um modelo exige a transformação da posição de todos os seus vértices. Assim, a concatenação de transformações em uma única matriz aumenta a eficiência do processamento geométrico.