Tangente - Kubischer Spline - 3D - geeignete Bibliothek gesucht

mit matplotlib, NumPy, pandas, SciPy, SymPy und weiteren mathematischen Programmbibliotheken.
Antworten
Kniffte
User
Beiträge: 64
Registriert: Dienstag 27. September 2016, 11:05

Hallo Zusammen,

Ich bin der Seb, ganz frisch angemeldet hier im Forum und auch noch ein Neuling was Python betrifft...habe aber bereits Programmiererfahrung in anderen Sprachen.

Momentan bin ich auf der Suche nach einer geeigneten Bibliothek mit der ich einen kubsichen Spline durch ggb. Punkte im 3D-Raum legen kann, um dann in jedem Punkt die Tangent als Vektor berechnen zu können.
Bsp für ggb. Punkt wären:

Code: Alles auswählen

Nr.	XF		YF		ZF
1	-1.1663	4.3677	13.7876
2	-0.7818	4.5117	13.2064
3	-0.3846	4.6211	12.6252
4	0.0092	4.6986	12.0444
5	0.3856	4.7590	11.4652
6	0.7421	4.8149	10.8893
Im ersten Anlauf bin ich schon mal bei Scipy fündig geworden: "scipy.interpolate.CubicSpline" jedoch nur für 2D Koordinaten oder überseh ich was in der Dokumentation? Ehrlich gesagt, steige ich auch noch nicht ganz durch im Detail.
Aber bin ich grundsätzlich auf dem richtigen Weg oder gibt es womöglich alternative Bibliotheken?

gruß seb
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

@Kniffte: für 3D gibt es keine eindeutige Lösung, da keine natürliche Ordnung existiert. Deine Beispieldaten sind wie eine Perlenkette aufgereiht. Willst Du also eine 3D-Kurve interpolieren, dann brauchst Du einfach drei kubische Splines x(t), y(t) und z(t). Oder hast Du in Wirklichkeit eine Fläche z(x,y), dann behilft man sich durch Triangulierung (scipy.interpolate.CloughTocher2DInterpolator).
Kniffte
User
Beiträge: 64
Registriert: Dienstag 27. September 2016, 11:05

@Sirius3: Erstere Annahme trifft zu: Die Punkte bilden eine 3D-Kurve im Raum.
Also bin ich mit scipy.interpolate.CubicSpline auf dem richtigen Weg? Wie komme ich am Ende von 3 kubischen Splines auf einen?
Vielleicht gibt es leichtverständliche Dokumentationen oder Beispiele zur Splineinerpolation im 3D Raum mit Python?
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

@Kniffte: da gibt es nicht viel zum Beispielen, Deine Inputdaten sind Vektoren und die interpolierten Daten sind auch Vektoren mit 3 Elementen:

Code: Alles auswählen

cs = CubicSpline(data[:,0], data[:,1:])
t = numpy.linspace(data[:,0].min(), data[:,0].max(), 100)
points = cs(t)
Kniffte
User
Beiträge: 64
Registriert: Dienstag 27. September 2016, 11:05

Ok gut...Danke sirius3 :)
gibt es auch eine Funktion im Scipy mit der ich eine Tangente bzw. deren Richtungsvekor in einem beliebigen Punkt der 3D-Kurve bestimmen kann?
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

@Kniffte: es gibt die Methode derivative.
Antworten