Come calcolare la svolta verso un missile?


14

Ho un missile che viene sparato da una nave in un angolo, quindi il missile si gira verso il bersaglio in un arco con un determinato raggio di virata. Come faccio a determinare il punto sull'arco quando devo iniziare a girare in modo che il missile si diriga dritto verso il bersaglio?

MODIFICARE

Quello che devo fare prima di lanciare i missili è calcolare e tracciare le rotte di volo. Quindi nell'esempio allegato il veicolo di lancio ha un'intestazione di 90 gradi e gli obiettivi sono dietro di esso. Entrambi i missili vengono lanciati a una direzione relativa di -45 gradi o + 45 gradi rispetto alla rotta del veicolo di lancio. I missili inizialmente ruotano verso il bersaglio con un raggio di virata noto. Devo calcolare il punto in cui il turno porta il missile verso la direzione in cui girerà per attaccare direttamente il bersaglio. Ovviamente se il bersaglio si trova a 45 gradi o meno, allora non vi è alcun turno iniziale il missile va dritto dritto verso il bersaglio.

Dopo il lancio del missile, la mappa mostrerà anche il tracciamento del missile su questa linea come indicazione del suo percorso di volo.

Quello che sto facendo è lavorare su un simulatore che imita il software operativo. Quindi devo tracciare la traiettoria di volo calcolata prima di consentire l'avvio del missile.

Due missili mirati a due bersagli

In questo esempio gli obiettivi sono dietro al veicolo di lancio ma vengono tracciati i percorsi precalcolati.


1
L'intestazione è precalcolata o cambia durante la traiettoria? (come un missile homing?)
Jonathan Connell,

1
Non sarebbe solo quando (x2-x1) ^ 2 + (y2-y1) ^ 2 = r ^ 2, dove (x1, y1) è l'attuale posizione del missile e (x2, y2) è il bersaglio?
Il comunista Duck il

Forse dovresti disegnare quello che vuoi.
aaaaaaaaaaaa,

3
È un problema 2D o 3D?
Steve H,

Se stai cercando qualcosa come un missile homing, puoi farlo senza usare alcuna trigonometria. Vedi questa domanda
BlueRaja - Danny Pflughoeft il

Risposte:


9

La mia matematica potrebbe essere un po 'sbagliata, quindi ho cercato la risposta.

Suppongo che tu voglia fare lo scenario di homing continuo - in cui il missile P1 che viaggia a una velocità V1 cerca costantemente di girare verso il giocatore P2; ma a una velocità di rotazione limitata.

  1. Determina il vettore tra il giocatore e il missile.

    V2 = P2 - P1
  2. Trasformali in vettori di unità.

    V3 = UNIT(V1)
    V4 = UNIT(V2)
  3. Determina l'angolo tra i vettori.

    a = ARCCOS(V3 * V4) (* indicating dot product)
  4. Limita il valore dell'angolo tra di loro (ricorda che le tue funzioni di innesco probabilmente funzionano con i radianti, quindi prova 0,1 come velocità di rotazione).

    a = SIGN(a) * MINIMUM(ABS(a), MaximumTurningRate)
  5. Crea il nuovo vettore di movimento.

    V1 = UNIT(V3.x + SIN(a), V4.y + COS(a)) * MissileSpeed

MODIFICARE: questo non ha un "punto di partenza" in quanto è più robusto (ed è un'implementazione più semplice) per lo scenario in costante homing. Non è necessario trovare un punto di partenza per un cerchio: basta limitare la velocità con cui il missile può cambiare direzione e il resto accade a causa del fantasma nella macchina.


1
Mmm ... se la memoria serve, penso che devi fare un prodotto incrociato per ottenere la direzione dell'angolo. Se fai solo un prodotto punto, conoscerai l'entità dell'angolo ma non la direzione (poiché i prodotti punto possono avere V3 * V4 = V4 * V3, sembra che non ci sia modo di notare la differenza nell'orientamento). Quindi, esegui il prodotto punto, quindi esegui un prodotto incrociato - controllando il segno della coordinata Z - per trovare l'orientamento.
ChrisE,

@ChrisE L'esempio è in 2D (guardando 5.), quindi l'orientamento originale e l'ampiezza dell'angolo dovrebbero essere sufficienti.
Keeblebrox,

Il calcolo dell'angolo tra è corretto, ma non sono sicuro di quale sia la tua intenzione dichiarata con il passaggio 5 O ciò che produce. Il passaggio 5 suppone di aggiungere l'angolo a alla v3 perché non capisco la matematica.
dots

Si suppone che @dlots step 5 aggiunga il nuovo 'angolo di virata limitato' al vettore di movimento corrente - sostanzialmente cambia la direzione del missile.
Jonathan Dickinson,

Che cos'è il SIGNpassaggio 4?
Daniel Kaplan,

2

Suppongo che tu voglia cambiare direzione cambiando la direzione di lancio in quella di destinazione, quindi prosegui dritto verso il bersaglio (un problema più divertente dovrebbe essere quello di colpire il bersaglio quando si gira!).

Devo presumere che tu sia in grado di girare con lo stesso raggio di sterzata in tutte le direzioni (questa è una semplificazione che è difficile da vedere nei missili reali).

La soluzione più semplice è utilizzare la piegatura a 90 ° : i file dei missili fino a quando la loro traiettoria forma un angolo retto con il bersaglio. se giri esattamente a 90 °, mancherai esattamente il bersaglio entro il raggio di virata, perché devi tener conto della svolta stessa. La soluzione è iniziare a girare esattamente metri "raggio di sterzata" (?) Prima di raggiungere il punto di 90 °, quindi girare formando un arco (provare a indovinare) di 90 ° per andare dritto al bersaglio.

Questa soluzione non è sempre possibile, ad esempio quando non si ha la visibilità sul percorso a 90 ° (edifici o altri ostacoli).

La buona notizia è che la soluzione funziona per ogni angolo (non solo per i mitici 90 °), il trucco è quello di tenere conto dello spazio necessario per iniziare a girare prima.

Quanto prima? Ecco perché la roba a 90 ° è la soluzione più semplice ...

Diciamo che raggiungi la visibilità o la migliore direzione del bersaglio quando il percorso di fuoco forma un angolo di θ °, quindi dovresti anticipare la svolta di:

(sec(90° - θ°) + tan(90° - θ°)) * turning_radius

... dove secante è il reciproco del coseno. La prova è banale ed è lasciata al lettore.

Scherzi a parte, la formula deriva da una semplice costruzione geometrica.

Grafico del punto di svolta

La linea nera è la traiettoria di fuoco, mentre la sottile linea nera è la stessa traiettoria spostata verso il bersaglio girando unità di raggio; lo stesso per quelli rossi che sono il percorso target.

I segmenti verdi sono di giro_radio in lunghezza, quindi dovresti vedere che:

AB è la tangente di 90 ° - θ °

AC è la secante.

Entrambe le linee verdi che provengono dalla svolta hanno una lunghezza di giro_radio e sono perpendicolari ai due percorsi; il che significa che il raggio di sterzata è corretto e l'arco è tangente ad entrambi i percorsi (come dovrebbe essere se si effettua una svolta sotto vincoli fisici).

Fammi sapere se vedi qualche errore.

MODIFICARE:

Il disegno che pubblichi mostra che ci sono più scelte per il percorso anche con sparatutto e bersaglio fissi, come puoi vedere qui:

inserisci qui la descrizione dell'immagine

Una volta scelto l'obiettivo, puoi applicare ciò che ho detto sopra con gli angoli corretti.


Si noti che questo non è un sistema di aggiornamento continuo. Dato che l'homing richiede più CPU (molto), questo dovrebbe essere considerato l'approccio giusto per obiettivi fissi o se si desidera implementare un missile "semi-stupido", ovviamente. La traiettoria può essere semplicemente parametrizzata su t suddividendo il percorso in 3 sottotracciati e l'arco può essere approssimato da una curva di Bezier.
FxIII,

1

Metterei in atto un "comportamento di governo" per il missile. Il missile ha: una velocità (un numero), una posizione (un vettore) e una (corrente) rotazione. Ad ogni aggiornamento del tuo gioco / ad ogni fotogramma, la rotazione del missile viene modificata leggermente (verso il bersaglio). Quindi il missile viene spostato in avanti in base alla sua rotazione attuale e alla velocità attuale.

Funziona ovviamente in 2D e 3D, poiché l'unica differenza è una dimensione aggiuntiva.

Un'altra possibilità sarebbe quella di calcolare il percorso del missile prima di infilarlo. Cerca curve o spline di Bezier .


Il problema con l'utilizzo di una spline qui è che sarebbe necessario aggiornare continuamente i punti di controllo se il bersaglio si muove. Un semplice algo di governo qui può essere più economico dal punto di vista computazionale.
ChrisE,

In realtà sto provando a precalcolare il percorso verso l'obiettivo. Quello che sto lavorando è un simulatore per alcune apparecchiature reali e sto cercando di imitare il comportamento delle apparecchiature reali.
Tony,

0

Sento che stai risolvendo il problema sbagliato qui. Un missile del mondo reale non si preoccuperà di dove girare, semplicemente girerà fino a quando non viene puntato sul bersaglio. L'unico calcolo implicito è quando iniziare a riportare i controlli in folle poiché un missile del mondo reale non può cambiare istantaneamente la sua velocità di virata. Tale calcolo prenderà solo la velocità indicata dal missile come valore di input e penso che sarebbe precalcolato.


2
Un missile del mondo reale, in particolare le armi successive, hanno sistemi di guida inerziale o GPS o entrambi, quindi vengono programmati per andare in un'area di ricerca e iniziare a cercare un bersaglio. Guai se un amico è vicino. La programmazione dovrebbe consentire di inviare il missile su un percorso che evita amichevoli e altri ostacoli come masse di terra e astuti innocenti.
Tony,

0

Penso che l'algoritmo più semplice segua solo due regole:

  1. Se il bersaglio attuale è più vicino al missile rispetto al diametro di svolta, continua dritto. Questo evita che i missili orbitino attorno a bersagli vicini invece di raggiungerli effettivamente.

  2. Altrimenti, gira verso il bersaglio fino a quando non lo punti.

Per calcolare il punto in cui termina la svolta in 2D:

  1. Nel punto in cui si desidera iniziare a girare, il centro del cerchio di svolta si trova in una direzione perpendicolare alla direzione corrente a una distanza dal raggio di sterzata. Nota che ci sono due di questi punti: probabilmente vuoi quello più vicino al tuo obiettivo. Calcola quella posizione e chiamala P.

  2. Ora puoi costruire un triangolo ad angolo retto con l'angolo retto nella tangente e due punti noti: P e la tua destinazione. Ciò ti consente di calcolare la distanza dalla tangente al punto target con Pitagora. Chiamalo D.

  3. Ora devi calcolare l'intersezione di un cerchio del raggio D nella tua destinazione con il tuo cerchio di svolta. Otterrai due soluzioni che sono i due punti tangenti su quel cerchio in cui il missile smetterebbe di girare (uno per ogni direzione di spostamento attorno al cerchio). Scegli il punto che si trova davanti al missile: questa è la tua risposta.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.