• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

pedrotuga

Normalizar ângulos

1 mensagem neste tópico

Bem.... para o pessoal que ainda não fez o 10º ano isto pode ser uma coisa nova.

Normalizar um ângulo significa assim em termos grosseiros e abusando um pouco da linguagem:

substituir um ângulo por outro 'equivalente' que esteja dentro de limites predefinidos.

Por exemplo, 0º, em termos prácticos é o mesmo que 360º ou 720º.

Se quisermos virar o nosso robot por exemplo para oeste podemos manda-lo virar para a direita segundo um angulo de 270-orientação do nosso robot, (oeste corresponde a 270º).

Se o nosso robot estiver virado por exemplo para os 5º, então vai rodar: 265º para a direita. Isto funciona, mas seria melhor se ele rodasse 95º para a esquerda, poupava-se muito mais tempo. A forma mais facil de conseguir isto é trabalhar com ângulos normalizados entre -180º e 180º em vez de 0-360º. Desta forma evitam-se rotações superiores a 180º.

Olhando para o código fonte do robot sample.tracker que é distribuido com juntamente com o robocode, podem ver uma função que faz exactamente isso:

public double normalRelativeAngle(double angle) {
	if (angle > -180 && angle <= 180) {
		return angle;
	}
	double fixedAngle = angle;

	while (fixedAngle <= -180) {
		fixedAngle += 360;
	}
	while (fixedAngle > 180) {
		fixedAngle -= 360;
	}
	return fixedAngle;
}

Para quem prefere trabalhar em radianos há uma boa noticia: o pacote robocode.utils já trás uma funcção que faz isso mesmo:

Utils.normalRelativeAngle(double angle)

Já agora...Uma implementação alternativa à primeira função....

public double normalRelativeAngle2(double angle){
      return (180/Math.PI)*Utils.normalRelativeAngle(angle);
}

basicamente é isto. Se por aí virem nos tutoriais... normalizao praqui normalização prali... já sabem o que é.

Quaquer duvida ou reparo repondam a esta topico.

0

Partilhar esta mensagem


Link 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