Eu tenho um míssil que é disparado de um navio em um ângulo, o míssil então vira em direção ao alvo em um arco com um raio de giro determinado. Como determino o ponto do arco quando preciso começar a girar para que o míssil esteja indo direto para o alvo?
EDITAR
O que preciso fazer antes de lançar os mísseis é calcular e traçar as rotas de vôo. Assim, no exemplo em anexo, o veículo de lançamento tem uma posição de 90 graus e os alvos estão por trás dela. Ambos os mísseis são lançados em uma posição relativa de -45 graus ou + 45 graus em relação à posição do veículo lançador. Os mísseis inicialmente se voltam para o alvo com um raio de viragem conhecido. Eu tenho que calcular o ponto em que a curva leva o míssil para a direção em que ele se volta para atacar diretamente o alvo. Obviamente, se o alvo estiver a 45 graus ou próximo a ele, então não haverá uma curva inicial, o míssil apenas irá direto para o alvo.
Após o lançamento do míssil, o mapa também mostrará o rastreamento de mísseis nesta linha como indicação de sua trajetória de voo.
O que estou fazendo é trabalhar em um simulador que imita o software operacional. Por isso, preciso traçar a trajetória de voo calculada antes de permitir o lançamento do míssil.
Neste exemplo, os alvos estão atrás do veículo de lançamento, mas os caminhos pré-calculados são traçados.
fonte
Respostas:
Minha matemática pode estar um pouco errada, então eu wikied a resposta.
Suponho que você queira fazer o cenário de retorno contínuo - onde o míssil P1 viajando a uma velocidade V1 constantemente tenta se virar em direção ao jogador P2; mas a uma taxa de rotação limitada.
Determine o vetor entre o jogador e o míssil.
Transforme-os em vetores unitários.
Determine o ângulo entre os vetores.
Limite o valor do ângulo entre eles (lembre-se de que suas funções trigonométricas provavelmente funcionam com radianos, portanto tente 0,1 como a taxa de rotação).
Crie o novo vetor de movimento.
EDIT: Este não tem um 'ponto de partida', pois é mais robusto (e é uma implementação mais fácil) para o cenário de retorno contínuo. Você não precisa encontrar um ponto de partida para um círculo - basta limitar a taxa na qual o míssil pode mudar de direção e o resto acontece por causa do fantasma na máquina.
fonte
SIGN
na etapa 4?Eu suponho que você queira mudar a direção, alterando o cabeçalho de lançamento para o alvo, e depois continue direto para o alvo (um problema mais divertido deve ser acertar o alvo ao virar!).
Devo assumir que você é capaz de girar com o mesmo raio de curva em todas as direções (é uma simplificação difícil de ver em mísseis reais).
A solução mais simples é usar o flexão de 90 ° : os arquivos de mísseis até sua trajetória formarem um ângulo reto com o alvo. se você girar exatamente no ponto de 90 °, errará o alvo exatamente pelo raio da curva, porque é necessário levar em consideração a própria curva. A solução é começar a girar exatamente os medidores com "raio de virada" (?) Antes de atingir o ponto de 90 ° e depois formar um arco de (tentar adivinhar) 90 ° para ir direto ao seu alvo.
Essa solução nem sempre é viável, por exemplo, quando você não tem visibilidade no caminho de 90 ° (edifícios ou outros obstáculos).
A boa notícia é que a solução funciona para todos os ângulos (e não apenas para os míticos 90 °). O truque é levar em consideração o espaço necessário para iniciar a rotação antes.
Quanto antes? É por isso que o material a 90 ° é a solução mais simples ...
Digamos que você alcance a visibilidade ou o melhor rumo do alvo quando o caminho de tiro formar um ângulo de θ °, então você deve antecipar a curva:
... onde secante é o recíproco do cosseno. A prova é trivial e é deixada ao leitor.
Sério, a fórmula vem de uma construção geométrica simples.
Linha preta é o caminho de tiro, enquanto a fina linha preta é o mesmo caminho movido em direção ao alvo, transformando unidades de raio; o mesmo para os vermelhos que são o caminho de destino.
Os segmentos verdes estão virando_radius de comprimento, então você deve ver que:
AB é a tangente de 90 ° - θ °
BC é o secante.
As duas linhas verdes que vêm do ponto de virada têm o raio de viragem de comprimento e são perpendiculares aos dois caminhos; significando que o raio de virada está correto e o arco é tangente aos dois caminhos (como deveria ser se você fizer uma curva sob restrições físicas).
Deixe-me saber se você encontrar algum erro.
EDITAR:
O desenho que você postou mostra que existem várias opções de caminho, mesmo com atirador e alvo fixos, como você pode ver aqui:
Depois que o alvo for escolhido, você poderá aplicar o que eu disse acima com os ângulos adequados.
fonte
Eu implementaria um "comportamento de direção" para o míssil. O míssil possui: Uma velocidade (um número), uma posição (um vetor) e uma rotação (atual). A cada atualização do seu jogo / a cada quadro, a rotação do míssil é alterada um pouco (em direção ao alvo). Em seguida, o míssil é movido para frente de acordo com sua rotação atual e velocidade atual.
Funciona para 2D e 3D obviamente, já que a única diferença é uma dimensão adicional.
Outra possibilidade seria calcular o caminho do míssil antes de destruí-lo. Procure curvas bezier ou spline .
fonte
Sinto que você está resolvendo o problema errado aqui. Um míssil do mundo real não vai se preocupar com para onde se virar, simplesmente vai virar até apontar para o alvo. O único cálculo para onde envolvido é quando começar a trazer os controles de volta ao ponto morto, pois um míssil do mundo real não pode mudar instantaneamente sua taxa de turno. Esse cálculo levará apenas a velocidade do ar indicada como um valor de entrada e eu acho que seria pré-calculado.
fonte
Eu acho que o algoritmo mais simples seguiria apenas duas regras:
Se o alvo atual estiver mais próximo do míssil do que o diâmetro de giro, continue em frente. Isso evita que o míssil orbite alvos próximos em vez de realmente atingi-los.
Caso contrário, vire em direção ao alvo até que você esteja apontando para ele.
Para calcular o ponto em que a curva termina em 2D:
No ponto em que você deseja iniciar o giro, o centro do círculo de giro está localizado em uma direção perpendicular ao rumo atual, a uma distância do raio de giro. Observe que existem dois desses pontos - você provavelmente quer o mais próximo do seu alvo. Calcule essa posição e chame-a de P.
Agora você pode construir um triângulo retângulo com o ângulo reto na tangente e dois pontos conhecidos - P e seu destino. Isso permite calcular a distância da tangente ao seu ponto alvo com Pitágoras. Chame de D.
Agora você precisa calcular a interseção de um círculo de raio D no seu destino com o seu círculo giratório. Você obterá duas soluções, que são os dois pontos tangentes naquele círculo em que o míssil parava de girar (um para cada direção de deslocamento ao redor do círculo). Escolha o ponto que está na frente do míssil - essa é a sua resposta.
fonte