› IntroduçãoComputação Gráfica • Prof. Pedro Ximenes
Transformações Geométricas 2D — Parte 2
Computação Gráfica — Matrizes Compostas, Transformações Inversas, Reflexão e Cisalhamento
Prof. Pedro Ximenes
Universidade Católica de Pernambuco (UNICAP)
Sumário
Visão Geral
1
Transformações Inversas: O que são, notação matricial ${}^{-1}$, translação, rotação e escala inversas.
2
Transformações 2D Compostas: Ordem das matrizes (pós-multiplicação), associatividade, rotação com ponto arbitrário e escala com ponto fixo.
3
Não-Comutatividade & Exemplo Completo: O caso clássico da Casa 2D e dedução completa da rotação de um quadrado.
4
Outras Transformações 2D: Reflexões no eixo $x$, eixo $y$ e origem; Cisalhamento horizontal ($SH_x$) e vertical ($SH_y$).
5
Resumo & Playground Interativo: Tabela de todas as matrizes $3 \times 3$, sandbox com pilha de operações e referências.
Transformações Inversas — Introdução
1. Transformações Inversas
O que são?
Para cada transformação geométrica básica (translação, rotação, escala) que aprendemos na aula passada, existe uma versão inversa — como se fosse o processo de “desfazer” a operação geométrica aplicada.
A transformação inversa é representada formalmente com o símbolo ${}^{-1}$ na matriz: $M^{-1}$.
Exemplo intuitivo: se você transladou um objeto 2 unidades para a direita ($t_x = +2$), a translação inversa move 2 unidades para a esquerda ($t_x = -2$).
São essenciais e extensamente aplicadas na construção de transformações compostas (o tema central desta aula!).
Resumo das Inversas
Translação inversa: inverte o sinal algébrico de $t_x$ e $t_y$ ($T^{-1}(t_x, t_y) = T(-t_x, -t_y)$).
Rotação inversa: inverte o sinal do ângulo $\theta$ ($R^{-1}(\theta) = R(-\theta)$).
Escala inversa: utiliza o recíproco multiplicativo dos fatores ($1/s_x, 1/s_y$).
Translação Inversa
1. Transformações Inversas
Ideia Geométrica
Para “desfazer” uma translação com $(t_x, t_y)$, basta aplicar uma translação com $(-t_x, -t_y)$.
$\cos(-\theta) = \cos\theta$ \quad (função par, o cosseno não é afetado)
$\sin(-\theta) = -\sin\theta$ \quad (função ímpar, o sinal do seno inverte)
Portanto, ao negativar $\theta$, somente os termos com seno trocam de posição!
Propriedade Fundamental: Transposta!
A matriz de rotação inversa é rigorosamente igual à transposta da matriz de rotação original:
$$R^{-1}(\theta) = R^T(\theta)$$
Compare as duas matrizes e perceba que basta trocar as linhas pelas colunas! Em computação gráfica, matrizes com essa propriedade chamam-se ortogonais.
Escala Inversa
1. Transformações Inversas
Ideia Geométrica
Para “desfazer” uma escala com fatores $(s_x, s_y)$, utilizamos os fatores recíprocos: $(1/s_x, \; 1/s_y)$.
Se a escala direta duplicou o tamanho do objeto ($s_x = 2, \; s_y = 2$):
$$\text{Fatores inversos: } s_x^{-1} = \frac{1}{2} = 0{,}5, \quad s_y^{-1} = \frac{1}{2} = 0{,}5$$
Multiplicando as matrizes direta e inversa:
$$S(2, 2) \cdot S^{-1}(2, 2) = \begin{pmatrix} 2 & 0 & 0 \\ 0 & 2 & 0 \\ 0 & 0 & 1 \end{pmatrix} \begin{pmatrix} 1/2 & 0 & 0 \\ 0 & 1/2 & 0 \\ 0 & 0 & 1 \end{pmatrix} = \begin{pmatrix} 1 & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & 1 \end{pmatrix} = I$$
O objeto é reduzido à metade e retorna perfeitamente ao seu tamanho original!
Laboratório Interativo — Transformações Inversas
1. Transformações Inversas
2
2
Transformações Compostas — Por quê?
2. Transformações Compostas
Na aula passada, ficaram dois problemas práticos em aberto na formulação padrão:
Problema 1 — Rotação com Ponto Arbitrário
A matriz de rotação básica $R(\theta)$ só funciona quando o centro de rotação está fixo na origem $(0,0)$. Como rotacionar um objeto em torno de seu próprio centro ou de qualquer outro ponto no espaço?
Problema 2 — Escala com Ponto Fixo (Âncora)
A escala básica $S(s_x, s_y)$, além de alterar o tamanho, tem o efeito colateral indesejado de mover o objeto (aproximando ou afastando todos os vértices da origem). Como redimensionar sem tirá-lo do lugar?
Solução: Transformações Compostas!
Ambos os problemas são resolvidos encadeando uma sequência de transformações (translação $\to$ operação geométrica $\to$ translação inversa), combinadas em uma única matriz composta $3 \times 3$. Graças às coordenadas homogêneas, toda a sequência vira apenas multiplicação de matrizes!
Ordem das Matrizes — De Trás para Frente
2. Transformações Compostas
Regra Fundamental de Pós-Multiplicação
Quando temos uma sequência de transformações aplicadas a um ponto $P$, as matrizes são pós-multiplicadas: a primeira operação física a ser aplicada ao objeto é a última matriz (a mais à direita) na equação.
$$M_1 \cdot M_2 \neq M_2 \cdot M_1 \quad \text{(em geral)}$$
Se você trocar a ordem de escrita das matrizes, o resultado geométrico será completamente diferente!
A Multiplicação de Matrizes É Associativa
$$(M_3 \cdot M_2) \cdot M_1 = M_3 \cdot (M_2 \cdot M_1)$$
Você pode pré-multiplicar as matrizes entre si para formar uma matriz única $M$, desde que nunca inverta a posição delas!
Associatividade — Cuidado com a Ordem!
2. Transformações Compostas
Dadas três matrizes $M_3, M_2, M_1$ na ordem correta ($M = M_3 \cdot M_2 \cdot M_1$), você pode efetuar o cálculo de duas maneiras válidas:
Opção A (Esquerda para Direita)
Calcule $R_1 = M_3 \times M_2$
Calcule $M = R_1 \times M_1$
Ambas as multiplicações respeitam a ordem posicional: $M_3$ à esquerda de $M_2$, e $R_1$ à esquerda de $M_1$.
Opção B (Direita para Esquerda)
Calcule $R_2 = M_2 \times M_1$
Calcule $M = M_3 \times R_2$
$M_2$ permanece à esquerda de $M_1$, e $M_3$ permanece rigorosamente à esquerda de $R_2$.
Erros Comuns (O que NUNCA fazer!)
NÃO: $M_2 \times M_3$ (trocou a ordem dos fatores!).
NÃO: $M_1 \times M_2$ (trocou a ordem dos fatores!).
NÃO: $R_2 \times M_3$ (colocou a matriz $M_3$ no lado direito em vez do esquerdo!).
Sequência de Mesma Operação — Translações
2. Transformações Compostas
Composição de Duas Translações
Quando combinamos duas translações consecutivas, o efeito acumulado equivale a somar algebricamente os fatores de deslocamento:
$$T(3, 2) \cdot T(1, 4) = T(1 + 3, \; 4 + 2) = T(4, 6)$$
Transladar por $(1, 4)$ e logo em seguida transladar por $(3, 2)$ é rigorosamente idêntico a transladar diretamente pelo vetor soma $(4, 6)$!
Sequência de Mesma Operação — Rotações
2. Transformações Compostas
Composição de Duas Rotações
Quando combinamos duas rotações sucessivas em torno da mesma origem, o efeito acumulado equivale a somar os ângulos:
$$S(3, 3) \cdot S(2, 2) = S(2 \cdot 3, \; 2 \cdot 3) = S(6, 6)$$
Escalar por $(2,2)$ (duplicar) e depois por $(3,3)$ (triplicar) equivale a escalar diretamente por $(6,6)$ (fator de 6 vezes).
Rotação com Ponto Arbitrário — Os 3 Passos
2. Transformações Compostas
O Problema
Queremos rotacionar um objeto por um ângulo $\theta$ em torno de um ponto pivô $(x_r, y_r)$ que não está na origem.
(a) Posição OriginalObjeto e ponto pivô $(x_r, y_r)$.
(b) Translada à OrigemAplica $T(-x_r, -y_r)$. Pivô vai para $(0,0)$.
(c) Rotação na OrigemAplica $R(\theta)$ com segurança na origem.
(d) Translada de VoltaAplica $T(x_r, y_r)$ restaurando a posição do pivô.
Algoritmo em 3 Passos
1. Mover o pivô para a origem: $T(-x_r, -y_r)$ •
2. Rotacionar pelo ângulo desejado: $R(\theta)$ •
3. Mover o pivô de volta à posição original: $T(x_r, y_r)$.
Rotação com Ponto Arbitrário — Matriz Composta
2. Transformações Compostas
Equação da Matriz Composta (De Trás para Frente!)
$$R(x_r, y_r, \theta) = \underbrace{T(x_r, y_r)}_{\text{3ª operação (volta)}} \;\cdot\; \underbrace{R(\theta)}_{\text{2ª operação (gira)}} \;\cdot\; \underbrace{T(-x_r, -y_r)}_{\text{1ª operação (vai para origem)}}$$
A 1ª operação aplicada ao objeto geométrico ($T(-x_r, -y_r)$) é sempre o último termo à direita na multiplicação matricial.
Laboratório Interativo — Rotação em Torno do Pivô
2. Transformações Compostas
2
2
45°
Escala com Ponto Fixo — Os 4 Passos
2. Transformações Compostas
O Problema da Escala Convencional
A escala básica altera o tamanho, mas afasta ou aproxima o objeto da origem. Queremos escalá-lo sem que ele se mova de sua posição, usando um ponto fixo âncora $(x_f, y_f)$.
(a) Posição OriginalObjeto e ponto fixo âncora $(x_f, y_f)$.
(b) Translada à OrigemAplica $T(-x_f, -y_f)$. Ponto fixo vai para $(0,0)$.
(c) Escala na OrigemAplica $S(s_x, s_y)$ com a âncora na origem.
(d) Translada de VoltaAplica $T(x_f, y_f)$ trazendo a âncora de volta.
Solução em 3 Passos (Idêntica à rotação com pivô!)
1. Mover o ponto fixo para a origem: $T(-x_f, -y_f)$ •
2. Escalar com os fatores desejados: $S(s_x, s_y)$ •
3. Mover o ponto fixo de volta à posição original: $T(x_f, y_f)$.
Observe: a última linha continua sendo estritamente $(0 \;\; 0 \;\; 1)$. Se ao calcular você obtiver qualquer valor diferente na 3ª linha, houve um erro aritmético!
Laboratório Interativo — Escala com Âncora Fixa
2. Transformações Compostas
2
2
1.5
1.5
Multiplicação de Matrizes NÃO é Comutativa
2. Transformações Compostas
Teorema da Não-Comutatividade
No caso geral das transformações geométricas:
$$M_2 \cdot M_1 \neq M_1 \cdot M_2$$
Inverter a ordem física de aplicação das transformações produz resultados finais completamente diferentes no espaço!
Caminho (a): Translação ➔ Rotação
$$M_A = R(45^\circ) \cdot T(t_x, 0)$$
1º: O objeto é transladado para a direita.
2º: O objeto transladado é rotacionado de $45^\circ$ em torno da origem $(0,0)$.
Efeito: O objeto sobe ao longo do arco de circunferência da origem!
Caminho (b): Rotação ➔ Translação
$$M_B = T(t_x, 0) \cdot R(45^\circ)$$
1º: O objeto é rotacionado de $45^\circ$ na sua posição original.
2º: O objeto já rotacionado é transladado horizontalmente para a direita.
Efeito: O objeto permanece na faixa horizontal inferior, apenas inclinado!
Laboratório Interativo — Não-Comutatividade da Casa
2. Transformações Compostas
Visualizar Caminhos:
Exemplo Completo — Rotação de um Quadrado
2. Transformações Compostas
Enunciado do Problema
Considere um quadrado com os quatro vértices:
$$P_1 = (4, 4), \quad P_2 = (6, 4), \quad P_3 = (4, 6), \quad P_4 = (6, 6)$$
Deseja-se rotacionar o quadrado em $\theta = 45^\circ$ utilizando o seu centroide como ponto de rotação.
Cálculo Analítico do Centroide
O centroide é o ponto médio geométrico do quadrado:
$$x_r = \frac{x_{\min} + x_{\max}}{2} = \frac{4 + 6}{2} = \frac{10}{2} = 5$$
$$y_r = \frac{y_{\min} + y_{\max}}{2} = \frac{4 + 6}{2} = \frac{10}{2} = 5$$
Logo, o pivô de rotação é o ponto $(x_r, y_r) = (5, 5)$.
Constantes Trigonométricas Úteis
Para o ângulo de $45^\circ$:
$$\cos 45^\circ = \sin 45^\circ = \frac{\sqrt{2}}{2} \approx 0{,}7071$$
$$-\sin 45^\circ = -\frac{\sqrt{2}}{2} \approx -0{,}7071$$
Objetivo: Montar a sequência $T(5,5) \cdot R(45^\circ) \cdot T(-5,-5)$ e calcular as novas coordenadas de cada um dos quatro vértices.
Exemplo Completo — Montando as Matrizes
2. Transformações Compostas
Montamos individualmente as 3 matrizes $3 \times 3$ em coordenadas homogêneas:
*A coordenada homogênea $w'=1$ em todos os vértices confirma o cálculo.
Exemplo Completo — Resultado Gráfico e Análise
2. Transformações Compostas
Propriedades Geométricas Verificadas
Preservação de distâncias: O comprimento dos lados originais era $L = 2$. No quadrado transformado:
$$L' = \sqrt{(6{,}4142 - 5{,}0000)^2 + (5{,}0000 - 3{,}5858)^2} = \sqrt{1{,}4142^2 + 1{,}4142^2} = \sqrt{2 + 2} = 2{,}00$$
Preservação de ângulos: Os lados continuam perpendiculares ($90^\circ$).
Corpo Rígido: A rotação é uma transformação isométrica (não distorce o objeto).
Eficiência Computacional
A mesma matriz composta $M$ é pré-calculada uma única vez e multiplicada para todos os vértices do modelo, economizando milhares de operações trigonométricas na GPU!
Propriedade Importante no OpenGL / WebGL
2. Transformações Compostas
Pipeline Gráfico e Matrizes Pós-Multiplicadas
As matrizes em APIs gráficas como OpenGL, WebGL e motores modernos (Three.js, Vulkan) são todas pós-multiplicadas pela ordem da pilha de matrizes.
O que isso significa na prática da programação?
No código de shaders ou no pipeline clássico, as funções de transformação devem ser escritas na ordem inversa em que você deseja que elas ocorram fisicamente:
// Para rotacionar em torno de (xr, yr):
// Queremos: 1º Translada(-xr) -> 2º Rotaciona(θ) -> 3º Translada(+xr)
mat4 model = mat4(1.0);
model = translate(model, vec3(xr, yr, 0.0)); // 3ª escrita no código = 3ª aplicada
model = rotate(model, radians(theta), vec3(0,0,1)); // 2ª escrita = 2ª aplicada
model = translate(model, vec3(-xr, -yr, 0.0)); // 1ª escrita no código = 1ª aplicada!
Atenção Redobrada!
A última transformação escrita no código é a primeira a atuar sobre as coordenadas do vértice ($P' = M_3 \cdot M_2 \cdot M_1 \cdot P$). É exatamente a mesma lógica matricial que estudamos nesta aula!
Reflexão — Conceito
3. Outras Transformações 2D
O que é a Reflexão?
A reflexão produz uma imagem “espelhada” do objeto geométrico em relação a um eixo de reflexão (ou ponto de referência). É exatamente o efeito de posicionar um espelho plano sobre a reta escolhida.
Existem três casos fundamentais no plano cartesiano $2D$:
Reflexão em relação ao eixo $x$ ($y = 0$): espelhamento vertical (cima $\leftrightarrow$ baixo).
Reflexão em relação ao eixo $y$ ($x = 0$): espelhamento horizontal (esquerda $\leftrightarrow$ direita).
Reflexão em relação à origem ($x = 0$ e $y = 0$): espelhamento em ambas as direções simultâneas.
Facilidade Algébrica
A reflexão é uma das transformações mais eficientes da computação gráfica: em coordenadas homogêneas, ela não exige senos nem cossenos — basta inverter o sinal algébrico da coordenada perpendicular ao espelho!
Reflexão em Relação ao Eixo $x$ ($y = 0$)
3. Outras Transformações 2D
Equações Algébricas
Refletir em torno do eixo $x$ preserva a posição horizontal $x$ e inverte o sinal da coordenada $y$:
$$x' = x, \qquad y' = -y$$
Lembrem-se da matriz de rotação $R(180^\circ)$:
$$R(180^\circ) = \begin{pmatrix} \cos 180^\circ & -\sin 180^\circ & 0 \\ \sin 180^\circ & \cos 180^\circ & 0 \\ 0 & 0 & 1 \end{pmatrix} = \begin{pmatrix} -1 & 0 & 0 \\ 0 & -1 & 0 \\ 0 & 0 & 1 \end{pmatrix} = F_o$$
Portanto, a reflexão na origem é rigorosamente equivalente a uma rotação de meia-volta ($180^\circ$)!
Laboratório Interativo — Reflexões 2D
3. Outras Transformações 2D
Escolha o Eixo de Espelhamento:
Cisalhamento (Shear) — Conceito
3. Outras Transformações 2D
O que é o Cisalhamento?
O cisalhamento é uma transformação que distorce a forma do objeto ao longo de uma direção preferencial ($x$ ou $y$), deslizando camadas paralelas como um maço de cartas de baralho. Transforma, por exemplo, um retângulo em um paralelogramo mantendo sua área constante!
O fator de cisalhamento é denotado pela sigla $sh$ (da palavra em inglês shear).
Existem dois tipos fundamentais:
Cisalhamento na direção $x$ ($sh_x$): deslocamento horizontal proporcional à coordenada vertical $y$.
Cisalhamento na direção $y$ ($sh_y$): deslocamento vertical proporcional à coordenada horizontal $x$.
Aplicações Práticas
Geração de texto em itálico sintetizado, renderização de sombras projetadas falsas (shadow shear), deformações elásticas de animação e renderização isométrica de jogos 2D.
Cisalhamento na Direção $x$ ($SH_x$)
3. Outras Transformações 2D
Equações de Movimento
A coordenada $y$ não se altera. A coordenada $x$ é deslocada proporcionalmente à altura $y$:
$$x' = x + sh_x \cdot y, \qquad y' = y$$
Todas as matrizes afins $2D$ são quadradas de dimensão $3 \times 3$, com a última linha sempre $(0 \;\; 0 \;\; 1)$ e os pontos representados como vetores coluna homogêneos $(x, \; y, \; 1)^T$. Qualquer sequência complexa de transformações pode ser comprimida em uma única multiplicação matricial!
Playground Completo de Transformações Compostas
Laboratório & Prática
Adicionar Transformação à Pilha:
Ordem de Execução (1ª à última):
Referências Bibliográficas
Material Complementar
Livros-Texto Recomendados
1. Angel, E.; Shreiner, D.Interactive Computer Graphics: A Top-Down Approach with WebGL. 8th edition. Pearson. Capítulo 5 (Geometric Objects and Transformations).
2. Mount, D.CMSC 427 — Computer Graphics Lecture Notes. University of Maryland. Aulas 8 e 9 (Affine Transformations & Compositions).
Material Digital & Dicas de Estudo
1. Material de Introdução à Computação Gráfica — IME-USP. Disponível em: https://panda.ime.usp.br/introcg/static/introcg
2. Dica Prática: Pratique multiplicando matrizes $3 \times 3$ à mão e conferindo os resultados nos simuladores desta página para consolidar o entendimento da ordem de pós-multiplicação!