Holen Sie sich den Wasserflussrichtungsvektor vom Wassernormalenvektor

8

Ich bin festgefahren, ein wichtiges Detail meines Wildwassers zu entwickeln: Es nach unten fließen zu lassen!

In Anbetracht einer typischen 3D-Welt, in der Wasser in Richtung Schwerkraft tendiert g=(0,-1,0), und der Normalen der Wasseroberfläche n=(x,y,z), wie kann ich darauf basierend den Vektor der Wasserflussrichtung berechnen?

Betrachten Sie als Beispiel diesen schlecht gemachten Graphen (allerdings in 2D).

Wasserflussdiagramm

Update: Ich denke über eine sehr vereinfachte Wasseroberfläche nach (Nur ein Flugzeug: Keine Wellen, keine Wellen, kein Druck usw.). Wenn einer dieser Punkte angewendet werden müsste, würde die Antwort von mehr Faktoren als nur dem Normalen abhängen.

Ivelate
quelle

Antworten:

13

Eine Möglichkeit, dies zu tun, wenn Sie einen Winkel von 90 ° wünschen, besteht darin, das Kreuzprodukt aus Normal und Schwerkraft zu finden, es zu normalisieren und es dann erneut mit der Normalen zu kreuzen.

In Ihrem Diagramm erzeugt das erste Kreuz einen Vektor, der in den Bildschirm zeigt, und das zweite Kreuz erzeugt den Flussvektor.

Ein interessanter Nebeneffekt bei der Verwendung von Kreuzprodukten ist, dass der Strömungsvektor umso länger ist, je weiter der Normalvektor von der Vertikalen entfernt ist. Dies könnte für die Strömungsgeschwindigkeit verwendet werden.

Dies setzt voraus, dass Sie ein rechtshändiges Koordinatensystem verwenden. Wenn Ihr System links ist, zeigt der Zwischenvektor stattdessen aus dem Bildschirm, erzeugt aber immer noch das gleiche Ergebnis.

Königszapfen
quelle
Ja, das sieht gut aus. Selbst wenn es so einfach aussieht, wenn es erklärt wird, habe ich ungefähr eine halbe Stunde lang über verschiedene (falsche) Methoden nachgedacht, und ich habe diese komplett verpasst. Vielen Dank!
Ivelate
Dies erzeugt nichts, was im entferntesten dem entspricht, was Sie normalerweise als Strömungsrichtung betrachten würden. Um zu sehen, warum Sie überlegen, wie die Oberflächennormalen eines Flusses auf Ihrer Karte aussehen und wie sie sich in einem Fluss unterscheiden, der von Ost nach West und von West nach Ost fließt (dh nicht).
Jack Aidley
1
Was ist, wenn Normal und Schwerkraft (anti) parallel sind? Ich kann nicht anders, als in dieser Antwort keinen Sinn zu finden. Wie @JackAidley sagte, gibt es unendlich viele mögliche Strömungsrichtungen bei einer normalen.
Margaret Bloom
1
Angesichts des in der Frage dargestellten vereinfachten Modells glaube ich, dass diese Antwort den Vektor ergibt, nach dem sie gesucht haben. @Margaret Wenn die Vektoren (anti) parallel sind, ist der Strömungsvektor (0,0,0), was die erwartete Strömung in einem flachen Gewässer, dh einem Teich / See, wäre
KingPin
@KingPin: Ein Fluss ist auch ein flaches Gewässer, und die meisten Seen fließen in Flüsse.
Jack Aidley
1

Sie können die Fließrichtung des Wassers nicht anhand seiner Oberflächennormalen bestimmen. Sie müssen zusätzliche Daten speichern.

Ein einfacher Ausflug zum Fluss sollte ausreichen, um Sie davon zu überzeugen. Jeder Unterschied in den Oberflächennormalen spiegelt lediglich die Welligkeit der Oberfläche wider. Die Wassermasse fließt weiterhin in die gleiche Richtung. Der zugrunde liegende Grund ist jedoch, dass die Normale eine Ebene definiert und Sie einen Flussvektor benötigen . Ihre Vektoren beziehen sich auf die Form der Oberfläche und nicht auf die Bewegung des Wassers.

Jack Aidley
quelle
1
Es stimmt, du hast recht. Ich habe nur einen sehr vereinfachten Wasserkörper in Betracht gezogen (keine Wellen, keine Wellen, kein Druck usw.), aber im wirklichen Leben wäre diese Berechnung sicherlich nicht so einfach. Ich werde die Frage aktualisieren, um diese Details klar zu machen. Danke für deinen Beitrag!
Ivelate