Blatt 7 - Programmierübung 3

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.

Blatt 7 - Programmierübung 3
Hi,
Ich verstehe bei Aufgabe 1a) nicht ganz, ob wir gleich bei der ersten Methode (“vec2 linearInterpolation(const vec2…))”)
schon den Algorithmus von DeCasteljau nehmen sollen oder/und in der eigentlichen Methode “vec2 deCasteljau”?
Kann mir da jemand weiterhelfen?


Diese Frage stelle ich mir auch…auch wie genau das mit der Interpolation gemeint ist…
und was ist in der 1b) mit linkem und rechten Kontrollpolygon gemeint?


Also auf dem Blatt steht doch

Ich lese da nichts von deCasteljau. Aber natürlich ist lineare Interpolation (von 2 Werten) das gleiche wie deCasteljau mit 2 Kontrollpunkten :wink:

Schau dir bitte nochmal deCasteljau/midPoint-Subdivision an. Wenn man deCasteljau ausführt, sind gewisse berechnete Punkte die Kontrollpunkte der „linken“ Teilkurve (für u ∈ [0 : 0.5]) und gewisse Punkte die der „rechten“ Teilkurve (für u ∈ [0.5 : 1]).


Aufgabe 1 gibt laut EST 0 Punkte …… :rolleyes:

2 Likes

Was ist denn bei Aufgabe 2 mit dem baryzentrischen Koeffizienten gemeint?
Ist das einer der Koordinaten oder alle zusammen,…?!


Bei der A1a und A1b sollten doch die gleichen Kurven herauskommen, oder?
Was könnte bei den angehängten Grafiken (also insbesondere der linken) kaputt sein?

Attachment:
avsb.png: https://fsi.cs.fau.de/unb-attachments/post_122192/avsb.png


ich hab mir die aufgabe noch nicht angeschaut, und kann deshalb auch nichts mit sicherheit sagen, aber wenn sie denn gleich aussehen sollen, dann denke ich dass du bei dem auf der rechten seite einfach einen schritt zu wenig gemacht hast. die kurve nähert sich ja der optimalkurve immer weiter an, um so mehr schritte man macht.


Ich gehe aber eher davon aus, dass die rechte richtig ist, da dort jeder Punkt via DeCasteljau berechnet wird. Die linke Kurve nutzt Midpoint-Subdivision und sieht leider überhaupt nicht so schön glatt aus…


Hab mir grade mal den Code angeschaut. [m]Aufgabe2::drawA2()[/m] macht das vielleicht etwas klarer:
Je nachdem, in welcher Reihenfolge man die Eckpunkte des Dreiecks übergibt, soll eine andere Komponente der baryzentrischen Koordinate werden (siehe Zeilen 30 - 43 in A2.cpp).

Ja, es sollten (annähernd) die gleichen Kurven sein, das Kontrollpolygon unterscheidet sich an ein paar Stellen zwar geringfügig, aber das erzeugt keinen solch gravierenden Unterschied.
Gefühlsmäßig würde ich auch sagen, dass die linke kaputt und die rechte richtig ist. Gerade unten im linken Bereich sind ein paar „Ausreißer“, wo sich die Krümmungsrichtung immer mal ändert, das sollte nicht so sein. Außerdem wird sie für meine Begriffe viel zu stark ans Kontrollpolygon gezogen.
Vermutung: Du greifst nicht immer auf die korrekten Punkte zur weiteren Subdivision zu.


Was mit bei deiner linken Kurve sofort auffällt, ist dass immer 3 erzeugt Linienpunkte auf einer Geraden zu liegen scheinen. Das is offensichtlich verkehrt. ob du evtl die falschen Punkte in das linke oder rechte Teil-Kontrollpolygon schreibst?


Wo kann hier der Fehler liegen?


Das Problem hatte ich auch - du musst die Punkte bei der Rekursion ueberlappen lassen (d.h. du musst den rechtesten Punkt der linken Seite auch der rechten Seite uebergeben bzw. umgekehrt).


Nice, danke :wink:


Kein Problem :wink:

Ja, das stimmt, habe wohl Subdivision falsch verstanden. Scheint jedenfalls wieder besser zu funktionieren.
Was mich aber noch verwundert ist, dass beim Ausfuehren valgrind Amok laeuft (einige Vergleiche auf uninitialisierten Werten). Das scheint aber nicht an meiner Implementierung zu liegen (habe alle vec2 auf Initialisierung geprueft). Ist das noch ein Fehler von mir, oder liegt das irgendwie an der vorgegebenen Implementierung?

Edit: Gehoert die Linie bei Aufgabe 2 zu dem Dreieck?

Edit2: Meine jetzige Kurve ist etwas eckig, sieht aber schon erheblich besser aus. Kann man das evtl. irgendwie runden, oder ist das schon in Ordnung?

Attachment:
bvsa.png: https://fsi.cs.fau.de/unb-attachments/post_122230/bvsa.png


Am Ende des Blattes steht:

Ich gehe mal davon aus, dass hier „drei“ gemeint ist.


Hallo,
ich habe gerade die erste Aufgabe implemeniert und auch ausgefuehrt. Aber da kommt keine Kurve raus. Wie kann ich herausfinden woran es liegt, ich weiss ja nicht einmal was da falsch ist? Sprich wie kann ich es testen?

EDIT: Wer code lesen kann ist im klaren Vorteil. Ich hab mir grad das Programm ./A1a angeguggt und nachvollzogen was es macht. So hab ich mein Fehler gefunden


Jopp. Es gab noch eine A2b die wir dann aber nicht mit ausgegeben haben.


Hooray! Tipp: [quote]Verschaffen sie sich zuerst einen Überblick uber das zur Verfugung stehende Codegerüst.[/quote], ist immer ne gute Idee!


Diese schöne Meldung bekomme ich, wenn ich versuche meinen Kram zu starten. (mit Putty, X11 aktiviert / Win7).
Ne Idee wo’s klemmt?