Ottieni il vettore di direzione del flusso d'acqua dal vettore normale dell'acqua


8

Sono bloccato nello sviluppo di un dettaglio importante della mia acqua di gioco: farla scorrere verso il basso!

Considerando un tipico mondo 3D in cui l'acqua tende ad andare verso la gravità g=(0,-1,0)e avendo la normale superficie dell'acqua n=(x,y,z), come posso calcolare, in base a quello, il vettore della direzione del flusso d'acqua?

Ad esempio, considera questo grafico mal fatto (in 2D, però)

Grafico del flusso d'acqua

Aggiornamento: sto prendendo in considerazione una superficie d'acqua molto semplificata (solo un aereo: nessuna increspatura, nessuna onda, nessuna pressione, ecc.). Se fosse necessario applicare una di queste, la risposta dipenderebbe da più fattori oltre al normale.

Risposte:


13

Un modo per farlo, considerando che si desidera un angolo di 90 °, è trovare il prodotto incrociato tra normale e gravità, normalizzarlo, quindi incrociarlo nuovamente con il normale.

Nel diagramma, la prima croce produrrà un vettore che punta sullo schermo e la seconda croce produrrà il vettore di flusso.

Un interessante effetto collaterale dell'utilizzo di prodotti incrociati è che il vettore di flusso sarà più lungo quanto più il vettore normale è lontano dalla verticale, che potrebbe essere utilizzato per la velocità del flusso?

Ciò presuppone che tu stia utilizzando un sistema di coordinate destrorso, se il tuo sistema è di sinistra, il vettore intermedio punterà invece fuori dallo schermo, ma produrrà comunque lo stesso risultato.


Sì, sembra fantastico. Anche se sembra così semplice quando spiegato, ho trascorso circa mezz'ora a pensare a modi diversi (sbagliati) di farlo, e mi mancava completamente questo. Grazie!
Ivelate

Ciò non produrrà nulla che assomigli in remoto a ciò che normalmente si potrebbe pensare come una direzione del flusso. Per capire perché considerare quali sarebbero le normali di superficie di un fiume che scorre attraverso la tua mappa e in che modo differiranno in un fiume che scorre da est a ovest e da ovest a est (cioè non lo sono).
Jack Aidley,

1
Cosa succede se la normale e la gravità sono (anti) parallele? Non posso fare a meno di non trovare alcun senso in questa risposta. Come ha detto @JackAidley, ci sono infinitamente molte direzioni di flusso possibili.
Margaret Bloom,

1
Dato il modello semplificato presentato nella domanda, credo che questa risposta produrrà il vettore che stavano cercando. @Margaret Se i vettori sono (anti) paralleli, il vettore di flusso sarà (0,0,0) che sarebbe il flusso atteso in un corpo idrico piatto, cioè uno stagno / lago
KingPin

@KingPin: un fiume è anche uno specchio d'acqua piatto e la maggior parte dei laghi scorre verso i fiumi.
Jack Aidley,

1

Non è possibile determinare la direzione del flusso d'acqua dalle sue normali alla superficie, è necessario memorizzare ulteriori dati.

Un semplice viaggio per guardare un fiume dovrebbe essere sufficiente per convincerti di questo. Qualsiasi differenza nelle normali alla superficie riflette semplicemente le increspature della superficie, la massa d'acqua continua a fluire nella stessa direzione. Ma la ragione di fondo è perché la normale definisce un piano e hai bisogno di un vettore di flusso. I tuoi vettori riguardano la forma della superficie e non il movimento dell'acqua.


1
Vero, hai ragione. Stavo considerando solo un corpo idrico molto semplificato (senza increspature, senza onde, senza pressione, ecc.), Ma certamente nella vita reale questo calcolo non sarebbe così semplice. Ho intenzione di aggiornare la domanda per chiarire quei dettagli. Grazie per il tuo contributo!
Ivelate
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.