Algoritmo per calcolare traiettorie dal campo vettoriale

3

Ho un campo vettoriale bidimensionale, cioè, per ogni punto (x, y) I ho un vettore (u, v) , mentre u e v sono funzioni di x e y .

Questo campo vettoriale definisce canonicamente un insieme di traiettorie, cioè un insieme di percorsi che una particella assumerebbe se seguisse il campo vettoriale. Nell'immagine seguente, il campo vettoriale è rappresentato in rosso e vi sono quattro traiettorie parzialmente visibili, rappresentate in rosso scuro:

Hobisognodiunalgoritmochecalcoliefficientementealcunetraiettorieperundatocampovettoriale.Letraiettoriedevonosoddisfareunasortadiminimadensitànelpiano(perognipuntodelpianodobbiamoavereunatraiettoria"vicina"), o qualche altra condizione per ottenere un ragionevole insieme di traiettorie.

Non ho trovato nulla di utile su Google su questo, e Stackexchange non sembra gestire l'argomento.

Prima di iniziare a elaborare un tale algoritmo da solo: Esistono algoritmi noti per questo problema? Qual è il loro nome, per quali parole chiave devo cercare?

    
posta cheeesus 08.09.2012 - 16:57
fonte

3 risposte

4

Ovviamente, hai a che fare con un insieme di equazioni differenziali:

dx / dt = u (x, y)
dy / dt = v (x, y)

Esistono molti algoritmi, che possono effettivamente integrare tali equazioni, ma dipenderanno da u e v (sono lineari o meno, ecc.). Puoi fornire ulteriori informazioni su questo?

In relazione al tuo requisito, è correttamente inteso che vuoi creare più traiettorie "vicine l'una all'altra? O intendi qualcos'altro?

EDIT:

Devo essere stato un po 'confuso quando ho scritto il mio post originale. Ovviamente, le equazioni differenziali sono lineari e la forma attuale di uev è di minore importanza.

In realtà, l'integrazione di queste equazioni è piuttosto semplice. Se la precisione è meno importante, potresti fare una semplice integrazione con Eulero - altrimenti potresti voler esaminare i metodi di Runge-Kutta (per esempio RK4 - quarto ordine Runge-Kutta).

Entrambi questi sono ben noti, quindi non entrerò nei dettagli qui. Fai una ricerca su google o controlla wiki:

metodo di Eulero
Metodi di Runge-Kutta

Credo che raggiungere la densità sia un po 'più difficile. Poiché le equazioni differenziali sono lineari, spostando leggermente le due posizioni iniziali si otterranno traiettorie simili. Ovviamente, è possibile ottenere le traiettorie simili a quelle consentite dalla precisione del computer. Se preferisci che le due traiettorie finiscano in punti simili, puoi semplicemente definire il punto finale e fare l'integrazione inversa.

    
risposta data 09.09.2012 - 10:21
fonte
2

Questo riguarda la soluzione delle equazioni differenziali.

Nel tuo caso f(t) è la posizione della particella nel momento temporale t . f'(t) è la velocità del punto che si sposta lungo questa traiettoria.

Quindi se il campo vettoriale definisce la direzione e l'entità della velocità, allora l'equazione è f'(t)=V(f(t)) .

Per risolvere questa equazione è necessario un punto di partenza. Nei "buoni" luoghi in cui non convergono molte traiettorie da direzioni diverse, è OK avere anche il punto intermedio e risolvere l'equazione in entrambe le direzioni.

Quindi una delle possibili soluzioni per garantire la "densità" è:

  1. prendi il punto casuale
  2. costruisci la traiettoria per essa
  3. trova il punto con la massima distanza dalle traiettorie esistenti
  4. se questa distanza è abbastanza piccola - abbiamo finito
  5. costruisci la traiettoria per questo punto
  6. vai a 3
risposta data 09.09.2012 - 09:56
fonte
1

Algoritmo ingenuo, che si basa su metodi numerici (come dice nilu):

  1. Prendi il punto di partenza come punto corrente
  2. Calcola il vettore in base ai vettori più vicini nel campo e ponderato in base alla distanza del punto corrente su di essi
  3. Calcola un nuovo punto basato sul punto corrente, sul vettore calcolato e su un epsilon, che indica la lunghezza del passo
  4. Ripeti 2 e 3 per ottenere l'elenco dei punti della traiettoria

Il passaggio 2. sarebbe più complicato. La prima cosa che viene in mente è usare lo stesso tipo di matematica della distanza pesata, che è usata in perlin noise . Probabilmente avrebbe bisogno di una messa a punto per ottenere risultati con errori accettabili. Ma puoi fare solo "così tanto" con un campo a bassa densità.

    
risposta data 09.09.2012 - 22:57
fonte

Leggi altre domande sui tag