Jump to content
AJBM

[Resolvido] Desenhar Donut

Recommended Posts

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));
	}

Share this post


Link to post
Share on other sites
fabriceleal

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

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.