Conteúdo principal
Programação
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?
- Alguém pode me ajudar no Desafio: Escala do sol brilhante? Não consigo passar da terceira etapa(3 votos)
- Só consegui porquê copiei o trecho "translate(width/2 - scaleF*width/2, height/2 - scaleF*height/2);" Não consegui entender a parte matemática, também encontrei dificuldades em linkar a idéia do width & heigth na fórmula, acho que precisaria de um passo extra explicando o funcionamento deste trecho... que pena que não entendi.(2 votos)