Ausgabe von Raumkurven mit Python

Manfred Brill, Hochschule Kaiserslautern

Raumkurven

Wie schon für ebene Parameterkurven bietet es sich auch für Raumkurven an ein Modul zu implementieren, in dem wir die einzelnen Kurven sammeln. Um das Jupyter Notebook unabhängig zu halten definieren wir die Funktionen für die Berechnung von Punkten auf einer Helix oder einer Schraubenlinie über der logarithmischen Spirale in diesem Notebook.

Wir verwenden Keyword-Parameter und als Resultat der Funktionen erhalten wir drei NumPy-Arrays für x, y und z-Koordinaten von Punkten auf der Raumkurve.

Grafische Ausgabe

Nachdem wir einen Polygonzug berechnet haben können wir sowohl mit Matplotlib als auch mit Plotly dreidimensionale Darstellungen erstellen. In Matplotlib ist dies im ersten Schritt eine statische Darstellung mit einer festen Kameraeinstellung. Mit Hilfe von magic commands können wir aber interaktive Darstellungen erzeugen. In Plotly ist dies noch einfacher, wir schon vorher erhalten wir eine interaktive Darstellung von vorn herein.

Als Beispiel verwenden wir die Helix mit einer Ganghähe von 2 und davon einen Umlauf. Dazu berechnen wir den Polygonzug und verwenden diese Daten für die grafische Ausgabe mit Matplotlib und Plotly.

Matplotlib

Die Darstellung einer Raumkurve unterscheidet sich nicht sehr stark von der für eine ebene Parameterkurve. Die Funktion pyplot.plot kann auch drei Koordinaten verarbeiten. Eine räumliche Darstellung in Matplotlib erhalten wir mit der Anweisung ax = plt.axes(projection='3d').

Wir können die grafische Ausgabe und viele andere Darstellungen in Matplotlib mit magic commands beeinflussen. Mit Hilfe von %matplotlib qt erhalten wir grafische ausgaben in einem externen Fenster. Verwenden wir dies und verwenden erneut den Code für die grafische Ausgabe der Helix, dann öffnet sich ein Fenster und wir können die 3D-Ansicht wie gewohnt mit der Maus manipulieren.

Plotly

Mit Plotly erhalten wir ohne großen Aufwand eine interaktive 3D-Darstellung. Wir erstellen anschließend einen Trace für das Modul plotly.graph_objects. Diesen fügen wir in go.Figure der Ausgabe hinzu und stellen noch einige Einstellungen wie Bildgröße oder Kameraposition ein. Den Polygonzug geben wir mit go.Scatter3d aus.

Die Helix ist eine Schraubenlinie, die auf einem Zylindermantel abläuft. In Plotly können wir geometrische Körper als Objekte vom Typ parametrized surface ausgeben. Dazu berechnen wir in der Funktion cylinder ein Dreiecksnetz eines Zylinders und üergeben das anschließend an Plotly. Für den Boden und den Deckel erzeugen implementieren wir die Funktino disk, die ein Dreiecks-Netz für diese Kreisscheiben berechnet.

Jetzt verwenden wir diese Funktionen und erzeugen eine grafische Ausgabe.

Schraubenlinie über einer logarithmischen Spirale

Wenn wir eine andere Raumkurve, zum Beispiel eine Schraubenlinie über einer logarithmischen Spirale, ausgeben möchten, dass müssen wir im Quelltext nicht viel verändern. Wir berechnen die Koordinaten der Punkte auf der Spur mit der entsprechenden Funktion und geben den Polygonzug aus. Für die Spirale verwenden wir die Defaultwerte a=1 und b=0.08 für die Parameter der Spirale, als Ganghöhe verwenden wir 1. Das Parameterintervall ist [0, 6pi] und wir verwenden 200 Punkte für den Polygonzug.