2016-06-02 18 views
0

Ich muss die Tangente in der gleichen (x, y) -Richtung wie ein 2D-Vektor aus einer gegebenen Normalen berechnen. Hier ist eine Visualisierung:Berechnung der Tangente in einer bestimmten 2D-Richtung

Directed Tangent From Normal Viz

Die rote Ebene mit dem Zyan ray ist die Oberfläche, und es ist normal, der grüne ‚Pfeil‘ stellt die 2D-Richtung und den blauen den Tangens des Normal mit der (x, y) -Richtung des grünen Pfeils. Wenn Sie also von oben (im Objektraum, nicht in der Fläche) auf 2D projizieren, sind Grün und Blau die gleiche Richtung.

Also, wenn das zu abstrakt war, hier ist der Kontext: Ich mache eine GPU-Erosionssimulation und um die Auflösung zu berechnen, brauche ich den 3D-Wassergeschwindigkeitsvektor, um auf die Kollision mit dem Gelände normal zu testen. Aber die Simulation ist in 2D, also habe ich nur einen 2D-Geschwindigkeitsvektor. Das Papier, das ich referenziere, merkt nur, dass das Programm diesen 3D-Vektor aus der Geländeoberflächen-Tangente und dem 2D-Geschwindigkeitsvektor berechnen soll.

Angesichts dieser Informationen, der normalen und der 2D-Vektor, was ist die Mathematik, um die übereinstimmende Tangente zu berechnen?

Antwort

1

Um die Flächentangente zu berechnen, projizieren Sie zuerst den Vektor auf die Normale.

enter image description here

enter image description here

Dann fügen Sie einfach die un-normalisierte Tangente zu erhalten.

enter image description here

die reflektierte Geschwindigkeit wieder aufzubauen, tut

enter image description here

Wo e das Restitutionskoeffizient ist (unter der Annahme Teilchen).

+0

Ok, scheint das Bild oben jetzt zu verstehen. Also, erster Schritt in anderen Worten: d = -dot (v, n), oder? Danach konnte ich nicht ganz folgen ... aber du scheinst meine gewünschte ausgerichtete Tangente zu sein. Das letzte Bit trifft für meinen Fall nicht zu, da ich keine partikelbasierte Simulation verwende, sondern das Flachwassermodell verwende. Um die Kollision "Härte" zu erhalten, verwendet man eine vereinfachte Formel, die folgendermaßen lautet: Länge (-n * u); Ich schätze es trotzdem :) – Seneral

+0

Oh, warte, hab es;) Nicht zu schwer, um dich schließlich zu bekommen :) Vielen Dank, wir freuen uns darauf zu sehen, ob es funktioniert! – Seneral

+0

Achten Sie darauf, 'n' zu normalisieren, sonst werden Ihre Entfernungen falsch sein; vorab berechnen empfehlen Ihnen, diese erste –