AffineTransform? Pra que serve?

Bem, comprei um livro de Programação de Jogos em Java. Esse livro fala muito de Affine Transform.
Tentando entender o que seria isso, eu fui até o site da Sun procurar, li mas não entendi!

Poderiam me explicar e dar alguns exemplos?

Ela serve para fazer conversões de coordenadas, por exemplo. Serve também para fazer rotações, translações e modificações de escala.

Para dar um exemplo: você sabe que o Java2D só sabe desenhar uma elipse deitada ou em pé, mas não inclinada. Se você setar corretamente as coordenadas com transformações afins, o Java2D consegue desenhar a elipse inclinada, por exemplo. Isso também serve para desenhar texto ou qualquer outra figura inclinada, invertida ou com a escala alterada.

Ah sim, até ai eu entendi. Fazendo algo como…

public void paint(Graphics g){ g2d = (Graphics2D) g; g2d.translate(10, 10); g2d.rotate(Math.toRadians(50)); }

Beleza, agora a próxima dúvida.
Pra que serve esse comando??

public class Blabla extends Applet { AffineTransform at = new AffineTransform(); public void paint(Graphics g){ g2d.setTransform(at); //Esse maldito comando que o livro repete toda hora. } }

Todo Graphics2D tem um AffineTransform associado.

Quando você não mexe nada, esse AffineTransform é uma transformação que não faz nada (ou seja, as coordenadas da tela são iguais às coordenadas que você usa para desenhar.)

Quando você usa

     g2d.translate(10, 10);  
     g2d.rotate(Math.toRadians(50));  

você está mexendo diretamente nesse objeto AffineTransform.

Agora, seu livro diz para pegar um objeto AffineTransform novo (criado do zero), e associar esse AffineTransform ao Graphics2D. A transformação default (essa que você usou com “new AffineTransform”) é uma transformação que não faz nada, mas no livro provavelmente ele vai mexer (com esses métodos “translate”, “rotate” etc.) para fazer os efeitos que você quer.