Konsistente Normalen aus einem 3D-Bezierpfad erhalten

Ich schreibe eine BezierPath-Klasse, die eine Liste von BezierPoints enthält. Jeder BezierPoint hat eine Position, einen InTangent und einen OutTangent:

BezierPath enthält Funktionen zum Abrufen linearer Positionen und Tangenten aus dem Pfad. Mein nächster Schritt ist die Bereitstellung von Funktionen zum Abrufen der Normalen vom Pfad.

Mir ist bewusst, dass jede gegebene Linie in 3D eine unbegrenzte Anzahl von Linien hat, die senkrecht zueinander stehen. Es wird also keine festgelegte Antwort geben.

Mein Ziel ist es, dass der Benutzer Normalen (oder einen Rollwinkel?) An jedem BezierPoint angeben kann, zwischen denen ich interpoliere, um Normalen entlang des Pfades zu erhalten. Mein Problem ist, dass ich nicht weiß, wie ich eine Anfangstangente auswählen soll (wie sollte die Standardtangente lauten?).

Mein erster Versuch, die Anfangstangenten zu ermitteln, ist die Unity3D-MethodeQuaternion.LookRotation:

Quaternion lookAt = Quaternion.LookRotation(tangent);
Vector3 normal = lookAt * Vector3.up;
Handles.DrawLine(position, position + normal * 10.0f);

Daraus ergibt sich Folgendes (grüne Linien sind Tangenten, blaue sind Normalen):

Zum größten Teil scheint dies ein gutes Basisergebnis zu sein, aber es sieht so aus, als gäbe es plötzliche Änderungen in bestimmten Ausrichtungen:

Meine Frage lautet also: Gibt es eine gute Möglichkeit, konsistente Standardnormalen für Linien in 3D zu erhalten?

Danke, Ves

Antworten auf die Frage(1)

Ihre Antwort auf die Frage