Frage

eine beliebige Folge von Punkten im Raum gegeben, wie würden Sie eine glatte kontinuierliche Interpolation zwischen ihnen herzustellen?

2D- und 3D-Lösungen sind willkommen. Lösungen, die eine Liste von Punkten, an beliebiger Granularität und Lösungen herzustellen, die Kontrollpunkte für die Bezier-Kurven erzeugen, sind auch sehr geschätzt.

Auch wäre es cool, eine iterative Lösung, um zu sehen, die frühen Abschnitte der Kurve annähern könnte, da sie die Punkte erhalten haben, so können Sie mit ihm ziehen.

War es hilfreich?

Lösung

Die Catmull-Rom-Spline garantiert passieren durch alle Kontrollpunkte. Ich finde diese handlicher zu sein, als zu versuchen Zwischenkontrollpunkt für andere Arten von Splines anzupassen.

Das PDF von Christopher Twigg hat eine schöne kurze Einführung in die Mathematik des Splines. Die beste Zusammenfassung Satz lautet:

  

Catmull-Rom-Splines haben C1   Kontinuität, lokale Kontrolle, und   Interpolation, aber liegen nicht innerhalb   die konvexe Hülle der Steuer   Punkte.

Anders ausgedrückt, wenn die Punkte eine scharfe Kurve nach rechts zeigen, wird der Spline vor nach rechts drehen linke Ufer (es gibt ein Beispielbild in diesem Dokument). Die Dichtigkeit dieser Windungen steuerbar, in diesem Fall mit seinen Tau-Parametern in der Beispiel-Matrix.

Hier ist ein weiteres Beispiel mit einigem herunterladbare DirectX-Code.

Andere Tipps

Eine Möglichkeit ist, Lagrange polynominal , die ein Verfahren zur Herstellung eines Polynoms ist, die gehen durch alle gegebenen Datenpunkte.

In meinem ersten Jahr an der Universität, schrieb ich ein kleines Tool, das in 2D zu tun, und Sie können

Sie sollten einen Blick auf B-Splines . Ihr Vorteil gegenüber Bezier-Kurve ist, dass jeder Teil auf lokalen Punkten nur abhängig ist. So einen Punkt bewegt hat keinen Einfluss auf Teile der Kurve, die weit entfernt ist, wo „weit entfernt“ von einem Parameter der Spline bestimmt wird.

Das Problem mit dem Lagrange-Polynom ist, dass ein Punkt Zugabe auf scheinbar willkürliche Teilen der Kurve extreme Auswirkungen haben kann; es gibt keine „localness“ wie oben beschrieben.

Haben Sie sich die Unix Spline Befehl? Kann das dazu gezwungen in das tun, was Sie wollen?

Es gibt mehrere Algorithmen zur Interpolation (und exrapolating) zwischen einer aribtrary (aber endgültig) Menge von Punkten. Sie sollten überprüfen numerische Rezepte , sie umfassen auch C ++ Implementierungen dieser Algorithmen.

Leider ist der Lagrange oder andere Formen der Polynom-Interpolation wird nicht auf einer beliebigen Menge von Punkten arbeiten. Sie arbeiten nur auf einem Satz, wo in einer Dimension z.B. x

x i i + 1

Für eine willkürliche Menge von Punkten, z.B. ein Flugzeug Flugbahn, wobei jeder Punkt ein (Länge, Breite) Paar, werden Sie besser dran, einfach sein die Reise des Flugzeugs Modellierung mit aktuellen Längen- und Breitengrad und Geschwindigkeit. Durch die Einstellung, bei der die Geschwindigkeit das Flugzeug (deren Winkelgeschwindigkeit), je nachdem, wie nahe drehen kann es zum nächsten Wegpunkt ist, können Sie eine glatte Kurve erreichen.

Die resultierende Kurve nicht mathematisch signifikant sein, noch geben Sie Kontrollpunkte Bezier. Allerdings würde der Algorithmus rechnerisch einfach sein, unabhängig von der Anzahl von Wegpunkten und könnte eine interpoliert Liste von Punkten, an beliebiger Granularität erzeugen. Es wäre auch nicht erforderlich, dass Sie den vollständigen Satz von Punkten vorne oben bieten, können Sie einfach Wegpunkte bis zum Ende des Satzes je nach Bedarf hinzufügen können.

kam ich mit dem gleichen Problem und umgesetzt es mit einigen neulich Freunden. Ich mag das Beispielprojekt auf Github teilen.

PathInterpolation Screenshot

https://github.com/johnjohndoe/PathInterpolation
Fühlen Sie sich frei gabeln.

Google "orthogonale Regression".

Während der kleinsten Quadrate Techniken versuchen vertikalen Abstand zwischen den Ausgleichsgeraden zu minimieren und jedem f (x), orthogonal Regression minimiert die senkrechten Abstände.

Nachtrag

In Anwesenheit von verrauschten Daten, die ehrwürdige RANSAC Algorithmus lohnt sich auch heraus überprüfen.

In der 3D-Grafik-Welt ist NURBS beliebt. Weitere Informationen leicht googeln.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top