Grundlagen des uneinheitlichen rationalen B-Spline (NURBS)


9

Ich versuche, NURBS-Kurven (Oberflächen später!) Zu verstehen, aber ich habe einige Probleme, die Grundlagen des Innenlebens zu verstehen. Könnte mir bitte jemand ein paar Dinge erklären? Da ich aus Bezier-Kurven komme, wäre ein Vergleich zwischen diesen beiden besonders nützlich.

  1. Die "rationale Basisfunktion" ähnelt ein wenig dem Bernstein-Polynom der (rationalen) Bezier-Kurve. Geht der Parameter uauch von 0 auf 1?

  2. Wie kann man einer Kurve "Details hinzufügen"? Ich meine, wenn ich mit Beziers eine kompliziertere Form beschreiben müsste, würde ich einfach mehrere Beziers "zusammennähen". Oder seltener den Grad erhöhen. Ich verstehe, dass ich auch den Grad von NURBS erhöhen und mehrere NURBS-Kurven nebeneinander stellen kann, aber sollte dies so gemacht werden?

  3. Der Wikipedia-Artikel scheint mir zumindest über diesen "Knotenvektor" nicht sehr klar zu sein. Was ist es überhaupt?


Das ist ein bisschen zu viel für eine Frage. Ich kann meinen Einführungsvortrag zu diesem Thema im Wesentlichen in wenigen Stunden zusammenfassen. Es würde zu viel Zeit in Anspruch nehmen, auf die Verwendung von De casteljanu und den Algorithmus von de boor einzugehen.
Joojaa

1
Daher würde ich mir wünschen, dass die Fragen 3, 5 und möglicherweise 6 als separate Fragen abgespalten werden, um die Beantwortung und das Verständnis der Größe der Mahlzeiten zu verbessern.
Joojaa

@joojaa Sicher, ich kann die Frage teilen, nur eine Sekunde ...
Ecir Hana

1
Daher wurden die Fragen 3 , 5 und 6 aufgeteilt, um Fragen zu trennen.
Ecir Hana

Antworten:


7

B-Splines und Beziers sind parallele Erfindungen von mehr oder weniger derselben Sache. Wo Beziers versuchen, von der Idee der Anpassung von Tangenten auszugehen. B-Splines beginnen mit der Idee von Basisfunktionen. NURB-Splines (oder der rationale Teil in der Tat) sind nur Verallgemeinerungen von B-Splines, sodass Sie genaue Kegelschnitte * beschreiben können, da sie für das Engineering von besonderem Interesse sind.

Beginnen wir zunächst mit einer einfachen NURB Spline-Terminologie. Das Grundprinzip dieser Kurven ist etwas anders als bei Beziers. Zunächst gibt es das Konzept einer Spanne. Eine Spannweite würde in etwa einer ganzen Bezier-Verzahnung entsprechen, außer in Nurbs können Sie eine beliebige Anzahl von Spannweiten haben.

Geben Sie hier die Bildbeschreibung ein

Bild 1 : Eine kubische NURBS-Spanne. Dies ist in der Formulierung etwas untypisch

Jede Spanne wird durch den Kurvengrad + 1 Kontrollpunkte ** gebildet. Jede Kurve kann aus einer beliebigen Anzahl von Punkten bestehen. In jeder aufeinanderfolgenden Spanne werden die Punkte aus der vorherigen Spanne wiederverwendet, indem ein Punkt gelöscht und ein Punkt mehr in die Liste aufgenommen wird. Das Erstellen komplexerer Kurven ist also so einfach wie das Anhängen weiterer Punkte an die Kurve.

HINWEIS : Die Bildkurven sind etwas atypisch parametrisiert. Was dies bedeutet, wird im nächsten Abschnitt erläutert. Wenn ich das Konzept der Knoten aufgreife. Dies ist nur eine einfachere Möglichkeit zu erklären, wie die Kurven zusammenkleben.

Geben Sie hier die Bildbeschreibung ein

Bild 2 : 2 kubische Spannweiten nacheinander, jede Spannweite verwendet 4 Punkte. zusammen bilden sie eine Kurve. Sie teilen die meisten Punkte miteinander.

Inzwischen haben wir wahrscheinlich die 2 Fragen zum Hinzufügen von Komplexität beantwortet. Ich möchte jedoch hinzufügen, dass dieses Schema eine bessere Kontinuität als eine Bezierkurve gewährleistet. Zusätzlich können Sie das Punktarray, das den Rumpf bildet, zyklisch machen. Eine geschlossene Kurve bilden.

Geben Sie hier die Bildbeschreibung ein

Bild 3 : Eine geschlossene kubische NURBS-Oberfläche hat so viele Bereiche wie Punkte. Jede Farbe ist eine Spanne.

Parametrisierung

Bis zu diesem Punkt könnte man einfach sagen, dass das Aneinanderreihen der Spannweiten ein Trick ist, genauso wie das "Nähen" der Bezier-Kurven. Aber es gibt einen Unterschied. Die Kurve wird entlang ihrer Länge parametrisiert. Die Kurven sind also nicht getrennt, sie interpolieren nicht wie Beziers in jeder Spanne von 0 zu 1. Stattdessen hat die zugrunde liegende Kurve einen anpassbaren Parameterbereich. Der Parameter wird in einem sogenannten Knoten gespeichert, und jeder Knoten kann einen willkürlich ansteigenden Wert in der Sequenz haben. Sie können also den gesamten Kurvenbereich im Bereich von 0 - 1 oder 0 bis 12 parametrisieren. Die Parametrisierung muss auch nicht einheitlich sein.

Diese Parametrisierung ändert die Form der Kurve. Warum sollte das nützlich sein? Nun, Sie können die Spannung entlang der Kurve für einen einstellen. Oder Sie können die Länge der Kurve in den U-Parameter codieren. Eine besondere Verwendung besteht darin, die NURBS-Kurve entweder ganz oder nur teilweise wie eine Bezier-Kurve wirken zu lassen (Bezier wie an den Enden, aber nicht in der Mitte).

Geben Sie hier die Bildbeschreibung ein

Bild 4 : Gleiche Punkte, verschiedene Knotensequenzen. Die grüne NURBS-Kurve entspricht einer Bezier-Kurve mit einem Parameterbereich von 0-2 anstelle von 0-1

Ok, was sind die Knoten? Sie sind einfach die Bereiche der Basisfunktionen. Da der kubische B-Spline mit 4 Punkten 4 Interpolationsfunktionen hat, benötigt er 8 Knoten. Nur Bereiche, in denen sich 3 Funktionen überlappen und bis zu 1,0 summieren, können gezeichnet werden.

Geben Sie hier die Bildbeschreibung ein

Bild 5 : 2 verschiedene Basisfunktionen, eine bezierartige und eine einheitliche Segmentparametrisierung, verteilt auf den Bereich 0-1.

Und jetzt haben wir meistens die Antwort auf Frage 1 beschrieben. Der Bereich ist nicht definiert. Sie können die Basisfunktionen nach Belieben erweitern. Und schließlich erzeugt der Knotenvektor einfach die Parameterbereiche für die Basisfunktionen. Es gibt noch eine weitere Sache, die die Form der Kurve bestimmt, und das ist der Gewichtsvektor. Aber dass eine andere Geschichte woanders erzählt werden soll.


* Dieses Rationale bedeutet in diesem Fall, dass eine NURBS-Kurve kein Polynom sein muss, da Sie einen Kreis mit Polynomen nicht beschreiben können.

** Man kann andere Arten von Punkten definieren.


Bezier-Kurven haben in Bezug auf (*) das gleiche Problem. Das Problem dort ist, dass die Kurven (in beiden Fällen) definiert sind als x = f (t), y = f (t). Sie können jedoch auch eine univariate / explizite / 1-dimensionale Kurve (wiederum in beiden Fällen) als y = f (x) definieren, wobei x anstelle von t verwendet wird. Bei rationalen Kurven können Sie nicht Kegelschnitte darstellen, sondern Sinus und Cosinus (und natürlich mehr). NURBS / B-Splines sind in dieser Hinsicht nichts Besonderes.
Alan Wolfe

Ich denke, Ihre Aussage über die Länge ist falsch (funktioniert nur mit linearen Funktionen?) Und nicht sicher, wie Längenberechnungen in Ihre Erklärung passen sollen (gute Informationen, die Sie gegeben haben, sagen Sie einfach!)
Alan Wolfe

@ AlanWolfe trotzdem gelöscht
joojaa

Fantastischste! Vielen Dank, sehr gute Erklärung!
Ecir Hana

Tippfehler vielleicht? "Stattdessen verfügt die darunter liegende Oberfläche über einen anpassbaren Parameterbereich. Der Parameter wird in einem sogenannten Knoten gespeichert, und jeder Knoten kann einen beliebigen Wert haben, der größer als der nächste ist." -> "Stattdessen hat die zugrunde liegende Kurve einen anpassbaren Parameterbereich. Der Parameter wird in einem sogenannten Knoten gespeichert, und jeder Knoten kann einen beliebigen Wert haben, der größer als der vorherige ist ." Übrigens, können Sie bitte klarstellen, was Sie unter "UV-Bereich" verstehen? "UV" impliziert 2D ..?
Ecir Hana
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.