Ferramentas de Usuário

Ferramentas de Site


dev_geral:java:robocode:maximoangulofuga

Ângulo Máximo de Fuga

Ao dispararmos o nosso robô, o Ângulo Máximo de Fuga, é a maior deslocamento do ângulo a partir de zero, onde zero será um disparo directo ao centro do alvo, que poderá atingir o robô inimigo, tendo em atenção a física usada pelo Robocode.

Calcular o AMF

Vamos assumir um triângulo com os lados œ, ß e ø, e os vértices A, B e C, onde A é o vértice oposto a œ, B o vertice oposto a ß e C o vértice oposto a ø. Através das lei do senos sabemos que1):

Lei dos senos

Assumindo que o nosso robô se encontra no vértice A, e que o inimigo se encontra no vértice C, vamos disparar uma bala na direcção do vertice B Sabemos o valor de ß, é a distância, D, do nosso robô ao inimigo, mas não sabemos ø, no entanto, sabemos que será a distância percorrida pela bala e a distância percorrida pelo inimigo em movimento.

Se definirmos œ, ß ø em função do tempo, t, ficamos com:

ß = D ø = Vb * t (Vb, velocidade da bala) œ = Vr * t (Vr, velocidade do robô inimigo)

Através da lei do senos determinamos:

 œ/sin(A) = ø/sin(C)
 Vr * t / sin(A) = Vb * t / sin(C) 
 sin(A) = Vr/Vb * sin(C) 
 A = asin(Vr/Vb * sin(C))

Não sabemos o valor de C, mas podemos estimar o pior caso onde C = π/2(sin(C) = 1), para obter o Ângulo Máximo de Fuga em A, A = arcsin(Vr/Vb * 1) = arcsin (Vr/Vb).

Um robô com velocidade máxima de 8.0, o Ângulo Máximo de Fuga teórico será arcsin(8.0/Vb). De notar que o valor máximo real depende da direcção do inimigo, velocidade e distância à parede.

Com estes cálculos podemos determinar ou alterar a nossa forma de disparar em direcção ao alvo, disparando para onde suspeitamos que o inimigo se esteja a mover e vez de dispararmos para onde ele esteve, podemos determinar o ângulo que engloba o percurso de fuga do nosso alvo e dessa forma, sermos mais precisos no altura de o atingir.

1)
Esta apresentação da lei dos senos não está completa, a lei dos senos diz que os vértices divididos pelos lados opostos são iguais a 2π, vamos ignorar essa componente neste caso.
dev_geral/java/robocode/maximoangulofuga.txt · Última modificação em: 2018/05/14 21:37 (edição externa)