Einfache Interpolationsfunktion beliebig verteilter Punkte
Verfasst: Mittwoch 19. Februar 2014, 13:54
Hallo,
für mein Pygame Malprogramm möchte ich gern die Punkte zwischen zwei beliebigen, vom Grafiktablet zurückgegebenen Cursorpositionen interpolieren. Genau genommen möchte ich aus den letzten 3 oder 4 eingelesenen Punkten eine Funktion/Spline berechnen und zwischen dem letzten und vorletzten Punkt Füllpunkte berechnen.
Idealerweise suche ich eine Funktion, der ich eine Liste von Punkten [(x0, y0), (x1, y1), (x2, y2), ...] sowie eine Anzahl von z.B. 100 übergebe, die damit eine Kurvenfunktion bzw. Gruppe von Funktionen erstellt und mir eine Liste mit 100 (im Beispiel) gleichmäßig auf die Kurvenlänge verteilte Interpolationspunkte zurückgibt. Evtl. sogar ANZAHL Punkte zwischen gegebenen Stützpunkten. Kennt jemand eine geeignete Funktion? Auch bessere Lösungsansätze als meiner (siehe unten) sind gern gesehen!
Ich habe mir bereits Scipys Interpolate Modul angesehen, doch auch die Splines basieren auf Interpolationspolynomen, welche nur Punkte mit stetig steigende x-werten zulassen, andernfalls kommt nonsens heraus, sagt die SciPy-Referenz. Das Grid bringt mir nichts, denn ich möchte einen ebenen Spline und keine interpolierte Fläche.
Bei drei diskreten Punkten P0, P1 und P2 könnte ich mir als workaround vorstellen, die Punkte in der Ebene so zu drehen, dass x1 möglichst mittig zwischen x0 und x2 legt. Dann Zwischenwerte interpolieren und die schließlich um denselben Winkel zurück zu drehen.
Aber wenn es bereits eine Funktion gibt, die beliebig orientierte Punkte zu einem ebenen Spline kombiniert, würde ich die vorziehen.
Grüße,
Michael
für mein Pygame Malprogramm möchte ich gern die Punkte zwischen zwei beliebigen, vom Grafiktablet zurückgegebenen Cursorpositionen interpolieren. Genau genommen möchte ich aus den letzten 3 oder 4 eingelesenen Punkten eine Funktion/Spline berechnen und zwischen dem letzten und vorletzten Punkt Füllpunkte berechnen.
Idealerweise suche ich eine Funktion, der ich eine Liste von Punkten [(x0, y0), (x1, y1), (x2, y2), ...] sowie eine Anzahl von z.B. 100 übergebe, die damit eine Kurvenfunktion bzw. Gruppe von Funktionen erstellt und mir eine Liste mit 100 (im Beispiel) gleichmäßig auf die Kurvenlänge verteilte Interpolationspunkte zurückgibt. Evtl. sogar ANZAHL Punkte zwischen gegebenen Stützpunkten. Kennt jemand eine geeignete Funktion? Auch bessere Lösungsansätze als meiner (siehe unten) sind gern gesehen!
Ich habe mir bereits Scipys Interpolate Modul angesehen, doch auch die Splines basieren auf Interpolationspolynomen, welche nur Punkte mit stetig steigende x-werten zulassen, andernfalls kommt nonsens heraus, sagt die SciPy-Referenz. Das Grid bringt mir nichts, denn ich möchte einen ebenen Spline und keine interpolierte Fläche.
Bei drei diskreten Punkten P0, P1 und P2 könnte ich mir als workaround vorstellen, die Punkte in der Ebene so zu drehen, dass x1 möglichst mittig zwischen x0 und x2 legt. Dann Zwischenwerte interpolieren und die schließlich um denselben Winkel zurück zu drehen.
Aber wenn es bereits eine Funktion gibt, die beliebig orientierte Punkte zu einem ebenen Spline kombiniert, würde ich die vorziehen.
Grüße,
Michael