If you're seeing this message, it means we're having trouble loading external resources on our website.

Se você está atrás de um filtro da Web, certifique-se que os domínios *.kastatic.org e *.kasandbox.org estão desbloqueados.

Conteúdo principal

Transformações múltiplas

Agora que você viu o básico sobre translação, rotação, e escala, vamos abordar o uso de todas elas juntas, e algumas coisas mais complexas pelas quais passamos no começo.

A ordem importa

Quando você faz várias transformações, a ordem faz diferença. Uma rotação seguida por uma translação, seguida por uma escala, não vai dar o mesmo resultado que uma translação seguida por uma rotação, e então por uma escala. Aqui temos um exemplo de programa que demonstra que:
A ordem que você usa depende do efeito desejado. Tenha em mente que você está movendo o papel, não o objeto, e você deve encontrar uma ordem apropriada.

A matriz de transformação

Toda vez que você faz uma rotação, translação, ou escala, a informação necessária para fazer a transformação é guardada em uma tabela de números. Essa tabela, ou matriz, tem apenas algumas linhas e colunas, contudo, através do milagre da matemática, ela contém toda a informação necessária para realizar qualquer série de transformações. E é por isso que as funções pushMatrix() e popMatrix() têm essa palavra em seu nome.
E quanto a parte push e pop dos nomes? Elas vêm de um conceito de computação conhecido como pilha, que trabalha como um distribuidor de bandejas em uma lanchonete. Quando alguém coloca uma bandeja na pilha, seu peso empurra (push) a plataforma para baixo. Quando alguém precisa de uma bandeja, a pessoa a retira do topo da pilha, e as demais bandejas saltam (pop) um pouco para cima, devido ao espaço liberado.
De forma parecida, pushMatrix() coloca o status atual do sistema de coordenadas no topo de uma área de memória, e popMatrix() puxa o status de volta. O exemplo anterior usou pushMatrix() e popMatrix() para garantir que o sistema de coordenadas estava "limpo" antes de cada parte do desenho. Em todos os outros exemplos, as chamadas para essas duas funções não eram realmente necessárias porque não havia transformações subsequentes, mas não há problema algum em salvar e restaurar o status da matriz. Como boa prática, sempre use essas funções quando estiver fazendo alguma transformação.
Há também uma função resetMatrix() que reseta a matriz de volta para seu estado original (a "matriz identidade"), mas as funções de push e pop geralmente são opções melhores.
Quer revisar ou aprender sobre matrizes? Você pode ver Matrizes na Khan Academy, em particular, as Transformadas geométricas com matrizes section.

Esse artigo é ma adaptação de Transformações 2D, de J David Eisenberg, usado sob uma licença Creative Commons Attribution-NonCommercial-ShareAlike.

Quer participar da conversa?

Você entende inglês? Clique aqui para ver mais debates na versão em inglês do site da Khan Academy.