Definition
Disclaimer: Dieser Thread wurde aus dem alten Forum importiert. Daher werden eventuell nicht alle Formatierungen richtig angezeigt. Der ursprüngliche Thread beginnt im zweiten Post dieses Threads.
Disclaimer: Dieser Thread wurde aus dem alten Forum importiert. Daher werden eventuell nicht alle Formatierungen richtig angezeigt. Der ursprüngliche Thread beginnt im zweiten Post dieses Threads.
Coons Patch
Hallo, ich versteh die Folien irgendwie nicht ganz.
Stimm das, dass der Coons Patch so definiert ist, oder hab ich da einen fehler drin?
F(s,t) = F_t (s,t) + F_s (s,t) - F_st (s,t)
F_t (s,t) = (1-s) D_0 (t) + s*D_1 (t)
F_s (s,t) = (1-t) C_0 (s) + t*C_1 (s)
F_st (s,t) = (1-t)((1-s) P_1 + s*P_2 ) + t((1-s) P_3+s*P_4 )
= (1-s)(1-t) P_1+s*(1-t) P_2+(1-s)*t*P_3+s*t*P_4
P_1 = P_00 = C_0(0) = D_0(0)
P_2 = P_10 = C_0(1) = D_1(0)
P_3 = P_11 = C_1(1) = D_1(1)
P_4 = P_01 = C_1(0) = D_0(1)
Auf Wikipedia sind nämlich bei F_st P_3 und P_4 vertauscht.
Das hängt davon ab welcher Punkt sich wo befindet.
Es gibt mehrere Möglichkeiten die Flächen korrekt zu interpolieren, wobei du in jedem Fall (bei 2D) in zwei verschiedene Richtungen interpolieren musst. Welche Kombinationen möglich sind kannst du doch relativ leicht ausprobieren indem du das anhand der Aufgabe 2b) von Blatt 6 versuchst und mit dem Ergebnis vergleichst. Davon „merkst“ du dir einfach eine.
Dazu hab ich leider keine Musterlösung.
Ich komme auf:
s+t-2st
s
s+t-st
s
t
s+t-st
ich bin mir grad nicht sicher aber ich glaube es geht auch:
t
s
s+t-st
Das hatte er mal (inklusive Rechenfehler) in der VL vorgerechnet.
Hast du dazu vielleicht den Rechenweg? Ich komm einfach nicht auf das Ergebnis.
Erst zweimal in s-Richtung linear interpolieren:
1: (1-s)[0,0,0] + s[1,0,1]
2: (1-s)[0,1,1] + s[1,1,1]
Das Ergebnis dann in t-Richtung linear interpolieren:
(1-t){ (1-s)[0,0,0] + s*[1,0,1] } + t*{ (1-s)[0,1,1] + s[1,1,1] }
Dabei darauf achten, dass die Punkte den richtigen Linearfaktoren zugeordnet werden. Das heißt zum Faktor (1-s) gehören die Punkte im Westen, da s von West nach Ost zunimmt. Zum Faktor s gehören die Punkte im Osten. Für t gilt das analog (t nimmt von Süd nach Nord zu).
Ich hatte das so gemacht (nach obigen Formeln):
Wo ist denn mein Fehler?
PS: warum gibt es hier eigentlich kein LaTeX-Plugin?
Okay, das funktioniert. Das ist aber ein ganz anderer Ansatz als in den Folien :-/
Nein, der Ansatz ist im Grunde jedesmal der selbe. Ich sagte ja es gibt in diesem Fall mehrere Wege nach Rom. Ob du erst links und dann rechts abbiegst oder andersrum ist hier total Banane.
btw: Ich war vorhin etwas voreilig, da ich Interpolation der Eckpunkte und nicht das Coons-Patch (2c) Ergebnis selber meinte.
Ich seh schon, bei mir ist P_01 falsch, der müsste [1,0,1] sein… aber trotzdem:
(1-t)*{ (1-s)*[0,0,0] + s*[1,0,1] } + t*{ (1-s)*[0,1,1] + s*[1,1,1] }
Das ist eigentlich genau das, was bei mir in der ersten Hälfte von F_st steht.
Aber F_st ist doch blos der bilineare Interpolant, oder nicht?
Dann fehlt doch diese Formel um auf denn Coons-Patch zu kommen:
F(s,t) = F_t (s,t) + F_s (s,t) - F_st (s,t)
Jetzt versteh ich garnix mehr…
Ahh ja… und was ist dann die Lösung für 2c (der Coons-Patch)?
Jop
Wieso fehlt die Formel?
Jetzt must du nur noch (genau wie es die Formel besagt) in beide Richtungen die Regelfläche bestimmen: einmal mit t und einmal mit s.
Und davon subtrahierst du den bilinearen Interpolanten.
mit (s,t,s+t-st)^T
bin ich auf
(s,t,s(s-st-t^2+t)+t^2)^T gekommen
Auf die Lösung komm ich einfach nicht. Hier ist mein kompletter Rechenweg:
Ich finde den Fehler nicht. Könntet ihr da bitte mal drüber schauen, wo meine Fehler sind? Danke!
Abgesehen von ein paar Rechenfehlern in der letzten Zeile fällt mir noch auf, dass
F_{st} im zweiten Summanden bei der Interpolation in t-Richtung 0 → t → 1 sich die t-Variable in den Vektoren von 1 nach 0 verändert. Deswegen nehme ich schwer an, dass du dort den Punkt NO und NW falschrum eingesetzt hast.
F_s und F_t sind definitiv richtig.
Weil noch niemand eines geschrieben hat und das gar nicht so leicht in sicher hinzubekommen ist. Bau doch mal was für MathJax.
Okay, da ist der Fehler. Wie ich in meinem Eröffnungs-Post schon geschrieben hatte:
Das war eben doch falsch. Richtig wäre:
P_1 = P_00 = C_0(0) = D_0(0)
P_2 = P_10 = C_0(1) = D_1(0)
P_3 = P_01 = C_1(0) = D_0(1)
P_4 = P_11 = C_1(1) = D_1(1)
Damit komm ich auch auf das Ergebnis. Danke!