B-Spline

Hilfe, gibt es jemanden der mir nachfolgende Funktion einfach erklären kann? Versuche das Verständnis durch Internetrecherche zu bekommen, sind bisher gescheitert…ich werde es dennoch versuchen. Aber vielleicht kann mir ja jemand behilflich sein? Das wäre sehr nett.

nichtrationale B-Spline-Fläche S(u,v):

S(u,v)= \sum_{i=0}^n \sum_{j=0}^m N_{i,p}(u) * N_{j,q} (v)*P_{i,j}

Was sagt mir denn N i, p(u) * N j, q(v) ? Und wie errechne ich das?

P.S: Hab versucht das in diesem Latex zu schreiben, aber funktioniert wohl nicht. Vielleicht kann jemand die Formel ja noch mal ordentlich schreiben?


MOD: Hallo, ein Leerzeichen zwischen „syntax“ und „=“ in der öffnenden Code-Zeile wars, woran der sensible LaTeX-Parser sich störte.
Gruß
Martin

Hallo,

Was sagt mir denn N i, p(u) * N j, q(v)
? Und wie errechne ich das?

Ohne weitere Erläuterungen sagt das nichts. Was steht denn um die Formel drumherum so für Text?

Gruß

Fritze

Hallo Fritz,

Was sagt mir denn N i, p(u) * N j, q(v)
? Und wie errechne ich das?

Ohne weitere Erläuterungen sagt das nichts. Was steht denn um
die Formel drumherum so für Text?

achso, ok. Also da steht noch, dass 0

Kann mir wirklich niemand helfen???

Hallo,

was ist denn mit dem Wikipedia-Artikel zu „Spline“?

http://de.wikipedia.org/wiki/B-Spline#B-Spline-Kurve

Da steht die Definition der B-Spline-Basisfunktionen N i, p(u) doch als Rekursionsformel von de Boor/Cox/Mansfield drin, im Abschnitt „B-Splines“, Unterpunkt „Definition“.

Gruß
Martin

Hi Martin,

was ist denn mit dem Wikipedia-Artikel zu „Spline“?

http://de.wikipedia.org/wiki/B-Spline#B-Spline-Kurve

Da steht die Definition der B-Spline-Basisfunktionen N i,
p
(u) doch als Rekursionsformel von de Boor/Cox/Mansfield
drin, im Abschnitt „B-Splines“, Unterpunkt „Definition“.

ok, dann versuche ich es am besten mal zu erklären, ob ich die Formel richtig verstehe und dann kann mich vielleicht jemand korrigieren für den Fall, wenn es falsch ist.

Habe folgende Formel gefunden:

N_{ip}(u) = \frac{u-u_{i}}{u_{i+p}-u_{i}} * N_{ip-1}(u)

  • \frac{u_{i+p+1}-u}{u_{i+p+1}-u_{i+1}}* N_{i+1p-1}(u)

D.h. Im Allgemeinen wäre das die i-te Basisfunktion des Grades p. Diese werden in Richtung des Knotenvektors u bestimmt. In meinem ersten Beitrag habe ich ja geschrieben, dass Pi,j die Kontrollpunkte der NURBS-Fläche sind…aber was sind dann ui etc.? Sind das denn nicht die gleichen Werte?
Dabei fängt bei mir schon das Unverständnis an. Vielleicht gibt es da ne Erklärung zu?

Hallo,
jetzt will ich es mal versuchen so zu erklären, wie ich das ganze verstehe und ich hoffe, es findet sich jemand der mich bei Fehlern korrigiert oder einfach nur mal ne kurze Antwort schreibt, dass ich es korrekt verstanden habe.

Ich habe folgende NURBS-Fläche (einfach mal selbst erstellt)…hoffe, ihr könnt auf das Bild zugreifen, ist mein erster Versuch:

http://www.abload.de/image.php?img=nurbso4i7.jpg

Jetzt die Formel für NURBS Flächen:

S(u,v) = \frac{\sum_{i=0}^n \sum_{j=0}^m N_{i,p}(u) * N_{j,q}(v) * w_{i,j} * P_{i,j}}{\sum_{i=0}^n \sum_{j=0}^m N_{i,p}(u) * N_{j,q}(v) * w_{i,j}}

Mein Wertebereich würde jetzt heißen: 0 nach meiner Zeichnung.
Jetzt nehme ich folgende Formel, um N_{i,p}(u) zu ermitteln:

N_{i,p}(u)= \frac{u-u_{i}}{u_{i+p}-u_{i}}* N_{i,p-1}(u)+ \frac{u_{i+p+1}-u} {u_{i+p+1}-u_{i+1}}*N_{i+1,p-1}(u)

Die selbe Formel könnte man auch für N_{j,q}(v) aufstellen. Ersetzt werden müsste: i durch j, p durch q und u durch v.

Jetzt zu der Rechnung:
Nehmen wir an: i=0, p=1 (Grad) und u={0,1,2,3}

N_{0,1}(u)= \frac{u-u_{0}}{u_{0+1}-u_{0}}* N_{0,1-1}(u)+ \frac{u_{0+1+1}-u} {u_{0+1+1}-u_{0+1}}*N_{0+1,1-1}(u)

dann lautet die Formel:

N_{0,1}(u)= \frac{u-u_{0}}{u_{1}-u_{0}}* N_{0,0}(u)+ \frac{u_{2}-u} {u_{2}-u_{1}}*N_{1,0}(u)

N_{0,1}(u)= \frac{u-0}{1-0}* N_{0,0}(u)+ \frac{2-u} {2-1}*N_{1,0}(u)

N_{0,1}(u)= {u}* N_{0,0}(u)+ {2-u}*N_{1,0}(u)

d.h. ja, dass ich für die Berechnung noch N_{0,0}(u) und N_{1,0}(u) bräuchte. Somit müsste ich dafür auch die Formel aufstellen. Das wäre dann allerdings ne Endlosschleife, oder??? Oder bin ich jetzt einfach nur zu blöd um das zu verstehen? :wink: Hilfe…

Hallo,

das ist halt nun nicht mehr 0815-Mathe… Je spezieller das Thema, desto weniger Leute kennen sich damit aus, und desto eingeschränkter ist dann die Zahl potentieller Antworter.

Ich habe folgende NURBS-Fläche

Ja, so kann das aussehen. Die vorgegebenen 16 Punkte darin sind die Kontrollpunkte Pi, j.

Jetzt die Formel für NURBS Flächen:

S(u,v) = \frac{\sum_{i=0}^n \sum_{j=0}^m N_{i,p}(u) *
N_{j,q}(v) * w_{i,j} * P_{i,j}}{\sum_{i=0}^n \sum_{j=0}^m
N_{i,p}(u) * N_{j,q}(v) * w_{i,j}}

Mein Wertebereich würde jetzt heißen:
0 nach meiner Zeichnung.

Ja.

Jetzt nehme ich folgende Formel, um N_{i,p}(u) zu ermitteln:

Das ist die Definitionsformel. Zur Berechnung der Gewichtsfunktionen (blending functions) in einem Computerprogramm ist die jedoch ungeeignet; das geht viel effizienter mit diesem Fächerschema.

Siehe dazu hier
http://www.ads.tuwien.ac.at/docs/lva/mmgdv/k1___014…
unter „Rechenschema für die Gewichtsfunktionen“.

Die selbe Formel könnte man auch für N_{j,q}(v) aufstellen. Ersetzt werden
müsste: i durch j, p durch q und u durch v.

Ja, genau.

Jetzt zu der Rechnung:
Nehmen wir an: i=0, p=1 (Grad) und u={0,1,2,3}

d.h. ja, dass ich für die Berechnung noch N_{0,0}(u) und N_{1,0}(u) bräuchte. Somit müsste ich
dafür auch die Formel aufstellen. Das wäre dann allerdings ne
Endlosschleife, oder???

Keine Endlosschleife, weil jede Rekursion irgendwo ein Ende finden muss. Hier ist das bei p = 1 der Fall; dann gibts nichts mehr zu rekursionieren, sondern den Wert von Ni, 1(u) direkt zu setzen gemäß der Definition:

Ni, 1(u)
= 1 wenn u ∈ […[,
= 0 andernfalls.

Gruß
Martin

Hallo Martin,
vielen Dank für deine Antwort, dass hat mir schon mal geholfen.

das ist halt nun nicht mehr 0815-Mathe… Je spezieller das
Thema, desto weniger Leute kennen sich damit aus, und desto
eingeschränkter ist dann die Zahl potentieller Antworter.

Ja, ist ja logisch. Und weil es kein 0815-Mathe mehr ist, brauche ich auch etwas länger das zu verstehen :wink:
Na wenigstens habe ich schon mal einen Teil verstanden, da bin ich ja schon mal zufrieden.

Keine Endlosschleife, weil jede Rekursion irgendwo ein Ende
finden muss. Hier ist das bei p = 1 der Fall; dann gibts
nichts mehr zu rekursionieren, sondern den Wert von Ni,
1
(u) direkt zu setzen gemäß der Definition:

Ni, 1(u)
= 1 wenn u ∈ […[,
= 0 andernfalls.

Aber warum ist jetzt bei p=1 Ende bzw. warum muss ich das an der Stelle jetzt 1 oder 0 setzen? Da bin ich noch nicht hintergekommen.
D.h. auch, dass meine Berechnung oben nicht nötig war und

N_{0,1}(u)
entweder 1 oder 0 ist? Also je nach Definition dann. Und das gilt dann auch für alle i-ten Werte?
Also:

N_{1,1}(u)
ist dann auch 1 oder 0? etc. also von i=0 bis i=3 in meinem Fall?

Gruß

Hallo Tine,

lass Dich nicht frusten. Es dauert, bis man diese Formelsprache (Vektoren, Matrizen, Indexnotationen, Funktionen…) versteht. Ist ein schleichender Prozess :wink:

Ni, 1(u)
= 1 wenn u ∈ […[,
= 0 andernfalls.

Aber warum ist jetzt bei p=1 Ende bzw. warum muss ich das an
der Stelle jetzt 1 oder 0 setzen? Da bin ich noch nicht
hintergekommen.

Da steckt nix Dolles dahinter. Schau Dir nochmal die Definition der Basis-/Gewichtsfunktionen auf Wikipedia an:

http://de.wikipedia.org/wiki/Spline#B-Spline-Kurve

Sie besteht aus zwei Teilen, einem für Ni, 1 und einem für Ni, p+1. Bei p = 0 ist also der erste Teil anzuwenden, bei allen anderen p der zweite.

Der Gag an der Definition für Ni, p+1 besteht darin, dass Ni, p+1 mit Hilfe von Ni, p, also dem „N von um Eins niedrigerer Ordnung (p + 1 → p)“ definiert ist. Man nennt sowas eine rekursive Definition. Bei jeder rekursiven Definition muss es einen Teil geben, wo die Rekursion „aufhört“, sonst käme man ja nie zu Ende (sonst müsste ja irgendwann Ni, –4985 über Ni, –4986 berechnet werden, welches seinerseits über Ni, –4987…).

Wenn Du eine Computerprogramm-Routine zur Berechnung von Ni, p schreibst, musst also auf p = 1 testen und diesen Fall abfangen. In diesem Fall gibt die Funktion dann ganz banal entweder 0 oder 1 zurück, je nachdem, ob das Argument im i-ten Teilintervall des Stützvektors t liegt, oder nicht.

N_{0,1}(u)

Ob N0, 1(u) oder N1, 1(u) oder N23, 1(u) gleich 0 oder 1 ist, hängt von u und dem Stützvektor t (tau) ab.

Gruß
Martin