Kurve aus Punkten erstellen/glätten mit Splines

Neue Frage »

zu9lu Auf diesen Beitrag antworten »
Kurve aus Punkten erstellen/glätten mit Splines
Meine Frage:
Hallo Community,

ich hab mal eine Frage zu Splines.
Ich soll eine schöne glatte Kurve bestimmen und hab dafür Punkte in Koordinatenform gegeben. Nun soll ich die Punkte miteinander verbinden und dabei sollten keine Knicke entstehen, nur leider verstehe ich jetzt nicht was ich da genau machen muss. Das Prinzip dahinter ist mit klar, ich nehme mir immer 2 Punkte und bestimme eine Gleichung die beide Punkte verbindet. Nehmen wir mal als Beispiel 3 Punkte, dann verbinde ich den ersten mit dem in der Mitte und den in der Mitte mit dem letzten.
Ich weiß auch das man das über die Funktion y=ax³+bx²+cx+d machen kann, nur wie?

Nehmen wir mal die Punkte p1(0/0) p2(8.5/4.8) p3(21.2/0)

Dann kann ich in die Formel y=ax³+bx²+cx+d x und y einsetzen, nur was mache ich dann noch bis ich die glatte Kurve bekomme? Also ich weiß das man das irgendwie über das Ableiten macht, nur weiß ich nicht genau wie, kann mir das einer nochmal erklären?

Meine Ideen:
Als erstes die 3 Punkte in y=ax³+bx²+cx+d einsetzen:

P1: 0=a0³+b0²+c0+d

P2: 4.8=a8.5³+b8.5²+c8.5+d

P3: 0=a21.2³+b21.2²+c21.2+d

Und was dann?, wo nach muss ich auflösen und was muss ich machen damit am Ende eine schöne glatte Kurve rauskommt?
Die erste Ableitung ist ja irgendwie die Steigung wenn man nach irgendwas löst?
Und die zweite gibt die Krümmung an oder so?

Ich brauche dringend Hilfe Big Laugh
Steffen Bühler Auf diesen Beitrag antworten »
RE: Kurve aus Punkten erstellen/glätten mit Splines
Es sind doch zwei verschiedene Splines! Einer vom ersten zum zweiten, der andere vom zweiten zum dritten Punkt.

Und jeder hat seine eigenen Koeffizienten a, b, c, d. Zusammen also acht Unbekannte.

Nun setzt Du in der Tat erst einmal die Punkte ein. Jeder Spline hat dann schon mal zwei Gleichungen.

Nun muss für den mittleren Punkt die erste und die zweite Ableitung der beiden Splinefunktionen übereinstimmen! Das ergibt zwei weitere Gleichungen. Sind schon sechs.

Für die zwei verbleibenden Gleichungen setzt man oft die zweite Ableitung in den Randpunkten Null. Es gibt auch andere Möglichkeiten, aber ich würde diese nehmen.

Nun hast Du acht Gleichungen und acht Unbekannte. Der Rest ist dann nicht schwer, oder?

Viele Grüße
Steffen
 
 
zu9lu Auf diesen Beitrag antworten »

Erstmal danke für deine Antwort smile

Ja das mit den 8 Unbekannten hab ich jetzt auch verstanden.
Könnte ich aber Theoreisch die Splines auch so ausrechnen, das ich die beiden Punkte zwischen denen die Gerade verläuft nehme und ich nehm noch die Ableitung Nullgesetzt mit darein und Löse dann nach a3,a2,a1&a0 auf und mache das bei dem letzen Punkt auch so also so z.B.:

Spline zwischen P1 und P2 (mit CAS): [4Gleichungen/4Unbekannte]

solve({ 0=a3*0³+a2*0²+a1*0+a0
4.8=a3*8.5³+a2*8.5²+a1*8.5+a0 ),a0,a1,a2,a3
0=a3*(3*0)²+a2*(2*0)+a1*0
0=a3*(3*8.5)²+a2*(2*8.5)*a1*8.5

Und das mache ich auch für P2 mit P3, dann kriege ich doch nochmal a0,a1,a2&a3 raus oder nicht?
Die a's Setze ich dann in y=a3*x³+a2*x²+a1*x+a0 ein und ich habe 2 Splines (2 Gleichungen einmal von P1 mit P2 und P2 mit P3) die eine schöne glatte Kurve anzeigen oder ist das falsch? Weil die Punkte sollen ja eine Steigung von 0 haben, also 1.Ableitung und Nullsetzen oder nicht? Dann brauche ich aber die 2.Ableitung garnicht.
Und wo ist hier der Unterschied zu Quadratischen Splines, warum macht man das mit kubischen und nicht mit quadratischen?
Verstehe das alles irgendwie nicht.

Vielleicht nochmal was ich genau zeigen/machen soll:
Ich soll mir eine Aufgabe aussuchen, die man mit Splines darstellen kann z.B. die Form einer Autokarosserie. Da hab ich dann Punkte gegeben und soll dann die Gleichungen aufstellen damit am Ende eine schöne Autokarosserie entsteht und man nicht nur die Punkte verbindet und überall knicke drin hat. Und da komme ich schon nicht weiter. Nimmt man dafür dann eine kubische oder quadratische Methode, bzw. wo ist der Unterschied? Hab nur herausgefunden das das mit dem Kubischen geht, deswegen hab ich es jetzt mal damit versucht. Die 3 Punkte habe ich auch nur so als Beispiel genommen, normaler weise sind das ja ein paar mehr.

Wäre nett wenn mir das mal einer richtig erklärren kann, ich komme irgendwie überhaupt nicht weiter
Steffen Bühler Auf diesen Beitrag antworten »

Wenn Du in jedem Punkt eine Steigung von Null haben willst, kannst Du das wohl so machen. Typischerweise ist das aber eben nicht so.

Ansonsten kommt mir Deine Aufgabe irgendwie bekannt vor: Augenzwinkern
Splines und ganzrationale Funktionen
zu9lu Auf diesen Beitrag antworten »

Danke für den Link, habe das meiste jetzt verstanden smile

Was ich dort jetzt allerdings nicht verstehe ist der Satz: Dann das Entsprechende mit der Ableitung. Die muß bei den beiden x-Werten dasselbe sein wie das lineare Glied (m) der zugehörigen Geradengleichung. (y=m*x+b)

Wenn ich jetzt aber nur die Punkte habe, habe ich ja keine Geradengleichung, kann ich also bei der Ableitung auch einfach die ganz normalen x-Werte einsetzen? Weil ich hab dann ja als y'=0 da das dann ja schön ohne knick ist oder wie?

Und ist das dann gut wenn ich in jedem Punkt eine Steigung von 0 habe, oder soll ich das lieber anders machen, und wie macht man das dann anders? Weil du ja meintest Typischerweise ist das nicht so.
Steffen Bühler Auf diesen Beitrag antworten »

Im anderen Thread hatte ich ja vorgeschlagen, nicht alle Punkte durch Splines zu verbinden, sondern nur die Übergänge zwischen ausgewählten (hier rot eingezeichneten) geraden Kanten:

[attach]29037[/attach]

Und in diesem Fall ist die Steigung an den Enden des Splines eben nicht Null, sondern entspricht der Steigung der Geraden, die dort anschließt. Siehst Du das?

Du kannst aber auch Deinen Ansatz verfolgen, dann müsstest Du als Stützstellen die Punkte der Karosserie nehmen, die offensichtlich auf einer Horizontalen liegen. Ich sehe bei diesem Modell zwar nicht viel Möglichkeiten zwischen Scheinwerfer und Dach, aber vielleicht gibt's ja andere Autos, die nicht so windschnittig gebaut sind.
zu9lu Auf diesen Beitrag antworten »

Ach so jetzt verstehe ich das. Was müsste ich den jetzt machen um die gesamte Fläche mit Splines zu verbinden? Also nicht nur das "runde" vom Auto mit Splines und das was gerade ist mit einer normalen Geradengleichung, sondern alles mit Splines mache.
Steffen Bühler Auf diesen Beitrag antworten »

Du müsstest Dir dann ein paar sinnvolle Punkte auswählen, deren x- und y-Wert bestimmen sowie die Steigung, die die Karosserie dort hat.

Wenn Du die Enden der roten Linie ganz links nimmst (zwischen Bodenschürze und Scheinwerfer), wären das meinetwegen die Punkte (0;0) und (1;3), je nach Maßstab.

Und im linken Punkt steigt die Karosserie mit etwa Steigung 3, im rechten Punkt hat sie etwa Steigung 1.

Und so weiter.
zu9lu Auf diesen Beitrag antworten »

Eigentlich habe ich jetzt alles soweit verstanden, könntest du nur mal damit ich jetzt nicht was falsches rechne mal die Splines zwischen P1 mit P2 und P2 mit P3 vorrechnen (also so richtig mit Rechenweg)wenn diese werte gegeben sind: (sind die punkte aus dem anderen Thread)

p1(0/0)
p2(0.5/2)
p3(1/2.5)
p4(4.5/3.4)

Bin mir beim ausrechnen jetzt nur etwas unsicher was man für Randbedingungen nehmen muss
Steffen Bühler Auf diesen Beitrag antworten »

Ich zeig Dir mal den ersten Spline zwischen P1 (0;0) und P2 (0,5;2). In P1 soll der Spline die Steigung 3 haben, in P2 die Steigung 1.

Die allgemeine kubische Funktion ist f(x)=ax³+bx²+cx+d.

Die Ableitung ist f'(x)=3ax²+2bx+c

Wir wissen nun:
f(0)=0
f(0,5)=2
f'(0)=3
f'(0,5)=1

Eingesetzt:
a*0³+b*0²+c*0+d=0
a*(0,5)³+b*(0,5)²+c*(0,5)+d=2
3a*0²+2b*0+c=3
3a*(0,5)²+2b*0,5+c=1

Aus der ersten Gleichung folgt d=0, aus der dritten folgt c=3. Ok?

Einsetzen in die zweite und vierte Gleichung, Ausrechnen der Potenzen:
a*0,125+b*0,25+3*(0,5)=2
3a*0,25+2b*0,5+3=1

Ergibt a=-16 und b=10.

Grafische Kontrolle:

Gesamtansicht:


Zoom in Punkt (0;0) mit Steigung 3:


Zoom in Punkt (0,5;2) mit Steigung 1:



Passt prima, nicht wahr?

Viele Grüße
Steffen
zu9lu Auf diesen Beitrag antworten »

Wie bestimmst du die Steigung für P1 und P2 und wie kommst du auf d=0 und c=3?
Steffen Bühler Auf diesen Beitrag antworten »

Zitat:
Original von zu9lu
Wie bestimmst du die Steigung für P1 und P2


Einfach durch Hinschauen. Die Werte 3 und 1 sind daher natürlich nur Pi mal Daumen. Genauer wird's durch Lineal-Anlegen oder (gibt ja für alles eine App) mit einem richtigen Winkelmesser.

Zitat:
Original von zu9lu
und wie kommst du auf d=0 und c=3?


Echt jetzt?



zu9lu Auf diesen Beitrag antworten »

Okay ich dachte das ich es verstanden habe, habe ich jetzt anscheinend doch nicht.

Ich komme zwar auch auf deine Formel:

f(x)= -16*x³+10*x²+3*x

aber ich verstehe nicht was du da jetzt genau mit c und d gemacht hast.

Ich habe einfach in mein CAS das hier eingegeben und nach a0,a1,a2,a3 aufgelöst:

solve ({

    a*0³+b*0²+c*0+d=0
    a*(0,5)³+b*(0,5)²+c*(0,5)+d=2
    3a*0²+2b*0+c=3
    3a*(0,5)²+2b*0,5+c=1
    )


Nur wenn ich jetzt für den Punkt P2 und P3 den Spline ausrechen will muss ich ja die Steigung für f'(x) wissen und da weiß ich nicht wie man das berechet
Steffen Bühler Auf diesen Beitrag antworten »

Um ein Gleichungssystem mit zwei Unbekannten zu lösen, gibt es Einsetzungs-, Gleichsetzungs- und Additionsverfahren. Das musst Du irgendwann mal gehabt haben. Schau mal nach.

Ansonsten spricht nichts dagegen, mit einem Rechner zu arbeiten. Ich hab so einen nicht, daher nahm ich Papier und Bleistift. Aber Du hast ja noch ein paar Rechnungen vor Dir.

Die Steigung im Punkt P2 hatten wir schon, das war die 1.

Wie man Steigungen aus einem Diagramm (oder eben hier einem Foto) abliest, müsstest Du auch schon mal gehört haben. Steigung heißt ja: wieviel gehe ich nach oben, wenn ich ein Stück nach rechts gehe? Und dieses Verhältnis oben:rechts ist genau die Steigung. Drei nach rechts und sechs nach oben ist Steigung zwei. Probier's mal aus, ist echt nicht schwer.

P3 hat somit eine Steigung von 0,5 oder noch weniger, ich hab's jetzt wieder nur geschätzt.
zu9lu Auf diesen Beitrag antworten »

Habe ich dann aber nicht mehr als 2 unbekannte, ich weiß ja nicht was a3,a2,a1,a0 sind.
Ja das mit der Steigung weiß ich ja, aber was mache ich wenn ich kein Foto habe wo ich es ablesen kann? Also wenn ich nur die Punkte gegeben habe?

Ich kann dann ja zwar Y2-Y1/X2-X1 rechnen aber dann kriege ich andere Steigungen raus als du und welche gilt dann für welchen Punkt?
Steffen Bühler Auf diesen Beitrag antworten »

Zitat:
Original von zu9lu
Habe ich dann aber nicht mehr als 2 unbekannte, ich weiß ja nicht was a3,a2,a1,a0 sind.


Ja, es sind vier, aber die genannten Verfahren funktionieren dafür genauso.

Aber der Rechner ist ja wohl nicht verboten, nimm also den.

Zitat:
Original von zu9lu
was mache ich wenn ich kein Foto habe wo ich es ablesen kann? Also wenn ich nur die Punkte gegeben habe?


Dann musst Du, wie am Anfang beschrieben, noch die zweite Ableitung bei den Punkten gleichsetzen, um genug Gleichungen zu bekommen. Etwas mehr Rechnerei.

Aber ich dachte, Du kannst Dir selbst ein Beispiel aussuchen? Und eine Karosserie wäre doch nicht schlecht!

Zitat:
Original von zu9lu
Ich kann dann ja zwar Y2-Y1/X2-X1 rechnen aber dann kriege ich andere Steigungen raus als du und welche gilt dann für welchen Punkt?


Wie gesagt, leg ein Lineal an den interessierenden Punkt, und schau dessen Steigung an. Zur Not paus es auf Millimeterpapier durch und miss das Steigungsdreieck aus.
zu9lu Auf diesen Beitrag antworten »

Ach so, ich glaube jetzt hab ich es smile

Also muss ich jetzt, wenn ich jetzt ein Spline zwischen zwei Punkten haben will, die ich auch nicht so ohne weiteres Ablesen kann, einfach das hier rechnen und dann immer andere Punkte einfügen?

f(x)=ax³+bx²+cx+d

f(p1)
f(p2)
f'(p1)=f'(p2)
f''(p1)=f''(p2)

und dann alles nach a3,a2,a1,a0 auflösen

Bei den darauf folgenden Punkten dann genau so, also so:

f(p2)
f(p3)
f'(p2)=f'(p3)
f''(p2)=f''(p3)

Und dann alle Gleichungen die ich habe zusammen "Packen" und dann habe ich den kompletten Spline, der durch alle Punkte geht und schön glatt ist.
Jetzt ist es richtig oder hab ich was übersehen?
Steffen Bühler Auf diesen Beitrag antworten »

Nein, es ist etwas anders. Ein Punkt liegt ja zwischen zwei Splines, die verschiedene Funktionen besitzen, z.B.f(x) und g(x). Diese haben dann auch verschiedene Koeffizienten a, b, c und d.

In diesem gemeinsamen Punkt an der Stelle x sind dann die Funktionswerte, die Steigungen und die Krümmungen gleich:

f(x)=g(x)
f'(x)=g'(x)
f''(x)=g''(x)

So kann man dann sämtliche Koeffizienten berechnen.
zu9lu Auf diesen Beitrag antworten »

Ah alles klar jetzt hab ich es endlich verstanden smile
Danke für deine Mühe. Blumen
Neue Frage »
Antworten »



Verwandte Themen

Die Beliebtesten »
Die Größten »
Die Neuesten »