Ir para o conteúdo
AJBM

[Resolvido] Desenhar Donut

Mensagens Recomendadas

AJBM

Boas!

Alguém me pode explicar qual a diferença. O valor de w e h não são alterados durante a execução do ciclo.

  AffineTransform at = AffineTransform.getTranslateInstance(w / 2, h / 2);
	for (double deg = 0; deg < 500; deg += 5) {

		at.rotate(Math.toRadians(deg));
		g2.draw(at.createTransformedShape(e));
	}

for (double deg = 0; deg < 500; deg += 5) {
				   AffineTransform at = AffineTransform.getTranslateInstance(w / 2, h / 2);
		at.rotate(Math.toRadians(deg));
		g2.draw(at.createTransformedShape(e));
	}

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
fabriceleal

Se esses dois exemplos dão resultados diferentes é porque provavelmente o at.rotate altera qualquer coisa dentro do at (atributos privados).

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
HappyHippyHippo

a diferença está que no primeiro exemplo estás a incrementar a rotação enquanto no segundo estás constantemente a fazer a mesma rotação para a mesma posição.


IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
AJBM

a diferença está que no primeiro exemplo estás a incrementar a rotação enquanto no segundo estás constantemente a fazer a mesma rotação para a mesma posição.

A incrementar ?

Podes explicar melhor

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
HappyHippyHippo

AffineTransform at = AffineTransform.getTranslateInstance(w / 2, h / 2);
for (double deg = 0; deg < 500; deg += 5) {
 at.rotate(Math.toRadians(deg));
}

// o mesmo que :

at.rotate(Math.toRadians(0));
at.rotate(Math.toRadians(5));  // at{rot_0}.rotate(5)
at.rotate(Math.toRadians(10)); // at{rot_5}.rotate(10)
at.rotate(Math.toRadians(15)); // at{rot_15}.rotate(15)
at.rotate(Math.toRadians(20)); // at{rot_30}.rotate(20)
// ...

enquanto que no segundo exemplo tens :

for (double deg = 0; deg < 500; deg += 5) {
 AffineTransform at = AffineTransform.getTranslateInstance(w / 2, h / 2);
 at.rotate(Math.toRadians(deg));
}

// o mesmo que :

at.rotate(Math.toRadians(0));
at = PosInicial;
at.rotate(Math.toRadians(5));  // at{rot_0}.rotate(5)
at = PosInicial;
at.rotate(Math.toRadians(10)); // at{rot_5}.rotate(10)
at = PosInicial;
at.rotate(Math.toRadians(15)); // at{rot_10}.rotate(15)
at = PosInicial;
at.rotate(Math.toRadians(20)); // at{rot_15}.rotate(20)
// ...

conclusão : coisas diferentes !!!


IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
AJBM

Eu tive fazer debug e pelo que percebi no segundo caso ele faz as rotações sempre em volta do mesmo ponto, pois a variável at e criada de novo a cada iteracao. No primeiro caso não, porque o método rotate altera o valor de algumas do AffineTransform, como a variável at é só criada uma vez antes do ciclo, vai fazer as rotações com valores sempre diferentes . Logo resultados diferentes.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.