Eu tenho um míssil que persegue o comportamento para rastrear (e tentar impactar) seu alvo (estacionário).
Funciona bem desde que você não esteja atingindo o alvo quando lança o míssil. Se você estiver atirando, o míssil tende a orbitar seu alvo.
Corrigi isso acelerando tangencialmente o alvo primeiro , matando o componente tangencial da velocidade primeiro e depois alinhando-o para o alvo.
Então eu acelero em -vT até que vT seja quase 0. Então acelero na direção de vN.
Enquanto isso funciona, estou procurando uma solução mais elegante em que o míssil possa impactar o alvo sem matar explicitamente o componente tangencial primeiro.
steering-behaviors
orbit
bobobobo
fonte
fonte
Respostas:
Parece que o problema é que o míssil está simplesmente apontando para o alvo sem levar em consideração a velocidade atual. Atribua ao seu míssil um ângulo máximo pelo qual o impulso pode se desviar da linha de movimento.
Em cada iteração de orientação, você calcula sua velocidade perpendicular ao alvo. Descobrir o quanto ele deve inclinar o motor para zerar esse componente de sua velocidade e, em seguida, prender ao máximo para que ele possa inclinar o motor.
Durante a primeira parte do vôo, ele se moverá um pouco para a direita da linha reta na figura # 2, mas à medida que voa, o motor zera esse componente e acaba indo direto para o alvo.
Observe que, nesse cenário, haverá apenas um quadro no qual o mecanismo tem uma deflexão de algo diferente de zero ou máximo. Se você estivesse rastreando um alvo em movimento, poderia obter desvios menores a cada ciclo à medida que o alvo se movia.
fonte
Pode não ser a solução elegante que você procura, mas descobri que, se eu desacelerar o míssil, se ele errar, à medida que se aproxima do alvo, ele efetivamente rastreia e vira mais rápido e pode atingir o alvo. Você pode aumentar a taxa de turno do míssil à medida que ele se aproxima, em vez de reduzir a velocidade, mas isso pode dar aos jogadores uma surpresa desagradável.
Isso pode não parecer tão bom, mas certamente impede que os mísseis orbitam e que o inimigo circule o míssil até que o combustível acabe.
Aqui está uma demonstração que eu montei da minha implementação (o terceiro ou quarto míssil demonstra isso, e novamente às 1:05): http://www.youtube.com/watch?v=9uiGMC_nH2w
Você também pode aumentar a precisão do míssil à medida que ele se aproxima do alvo (pois ele tem uma assinatura mais próxima da qual bloquear). Isso é mostrado no vídeo em cerca de um minuto. O círculo vermelho mostra o alvo real do míssil. Isso proporciona uma trajetória caótica de vôo quando a longa distância e, em seguida, se endireita quanto mais se aproxima.
Como eu disse, pode não ser a resposta que você está procurando, mas espero que ajude um pouco.
fonte
Intuição
Aqui está uma maneira: vamos girar seu diagrama.
Agora o foguete é uma bala de canhão !
Física
Possui uma aceleração fixa "para baixo", ou seja, perpendicular ao vetor, do local de disparo até o alvo. Eu desenhei acima como uma linha verde tracejada. Vamos chamar isso de horizonte de referência . (Observe que esse horizonte de referência é constante! O foguete foi disparado de uma posição fixa com uma posição fixa como alvo.)
Sabemos (da wikipedia ) de uma bala de canhão sem resistência aérea, que
d = v^2 * sin(2 * theta) / g
, onded
é a distância horizontal percorrida (distância entre o local de tiro e o alvo)v
é a velocidade com que o projétil foi disparadotheta
é o ângulo em relação ao horizonte em que o projétil foi disparado ( vetor da direção do ângulo de fogo do horizonte de referência )Reorganizando a equação para
g
dág = v^2 * sin(2 * theta) / d
.A constante na equação da bala de canhão
g
, é a aceleração devido à gravidade . Podemos entender isso como aceleração devido à propulsão de foguetes . Tudo bem também - ainda é uma aceleração constante em uma direção constante .O que agora?
Execute essa equação para
g
quando você disparar o foguete. Ele lhe dirá quanto acelerar o foguete perpendicularmente em direção ao horizonte de referência, a fim de atingir o alvo. Como a direção dessa aceleração é constante, uma órbita não se forma.Estrondo.
fonte