Visualisierung, entstanden aus Neugier auf eine sphärische Helix
(visualrambling.space)- Einführung in das Konzept, Objektbewegungen im 3D-Raum mit parametrischen Funktionen auszudrücken
- Erläuterung des Prozesses, von Kreis, Spirale bis hin zu einer sphärischen Helix-Bahn schrittweise komplexere Pfade mathematisch zu konstruieren
- Durch die Definition jeder Koordinatenachse (x, y, z) als Funktion der Zeit lassen sich vielfältige Bewegungen umsetzen
- Besonders bei der sphärischen Helix wird durch die Multiplikation trigonometrischer Funktionen mit variierendem Radius eine dreidimensionale Spiralbahn erzeugt
- Dies ist ein kreatives Beispiel dafür, dass sich Objekte auf beliebigen Pfaden bewegen lassen
Erkundung der Objektbewegung im 3D-Raum
Dieser Beitrag ist das Ergebnis einer persönlichen Erkundung verschiedener Methoden, Objekte im 3D-Raum zu bewegen, und insbesondere, wie sich ein sphärischer Helix-Pfad (spherical helix) mathematisch definieren und umsetzen lässt.
Grundlagen von Helix und dreidimensionaler Bewegung
-
Eine Helix bezeichnet eine dreidimensionale Struktur, die sich wie eine Feder drehend windet
-
Eine sphärische Helix ist das Konzept einer spiraligen Bewegung entlang der Oberfläche einer Kugel
-
Die Position eines Objekts im 3D-Raum wird durch die Koordinaten der drei Achsen x, y und z bestimmt
- x-Achse: zuständig für die Bewegung nach links und rechts
- y-Achse: entspricht der Auf- und Abbewegung
- z-Achse: Veränderung in Vorwärts-/Rückwärtsrichtung (Tiefe)
-
Wenn die Position eines Objekts mithilfe mathematischer Funktionen in Abhängigkeit von der Zeit (t) definiert wird, entsteht eine Bewegungsbahn
Parametrische Funktionen und einfache Pfadbeispiele
-
Beispiel: Definiert man die x-Position als
10 * cos(πt/2), ergibt sich eine Cosinus-Wellenbewegung, die alle 2 Sekunden zwischen -10 und 10 hin- und herläuft -
Auf die gleiche Weise lässt sich auch eine vertikale Hin-und-her-Bewegung erzeugen, wenn die y-Position als
10 * cos(πt/2)festgelegt wird -
Verwendet man für x und y unterschiedliche Funktionen (z. B. x =
10 * cos(πt/2), y =10 * sin(πt/2)), entstehen Bewegungen mit Phasenverschiebung; kombiniert man beide, ergibt sich ein kreisförmiger Pfad -
Multipliziert man die Funktion mit einem zur Zeit proportionalen Term (z. B. x =
0.03 * t * cos(πt/2)), kann man ein Muster mit allmählich größer werdendem Radius erzeugen, also einen Spiralpfad (spiral)
Erzeugen eines sphärischen Helix-Pfads (spherical helix)
-
Anders als eine Spirale in der Ebene benötigt eine sphärische Helix einen dreidimensionalen Pfad
- Für den z-Wert kann man z. B.
10 * cos(0.02 * πt)verwenden, um die Position nach vorn und hinten schrittweise zu verändern
- Für den z-Wert kann man z. B.
-
Für x und y kann durch den Einsatz eines Produkts trigonometrischer Funktionen wie
sin(0.02 * πt)ein Effekt erzeugt werden, bei dem der Radius in der Mitte am größten und an beiden Enden kleiner ist -
Wendet man dieses Produkt sowohl auf x als auch auf y an, lässt sich ein Pfad erzeugen, der sich kreisförmig bewegt und dabei entlang der Kugeloberfläche, also dreidimensional, einer Spirale folgt
-
Mit einer solchen Kombination von Funktionen ist die mathematische Umsetzung eines sphärischen Helix-Pfads vollständig
Zusammenfassung und Anwendung
- Jeder 3D-Pfad lässt sich erzeugen, indem x, y und z jeweils als parametrische Funktionen der Zeit definiert werden
- Das bedeutet, dass sich von einfachen Kreisen und Spiralen bis hin zu komplexen Pfaden alles mathematisch festlegen lässt
- Mit diesem Ansatz lässt sich visuell verstehen, dass selbst komplex wirkende Bewegungen in Wirklichkeit keine Unordnung, sondern klar definierte mathematische Pfade sind
visualrambling.space ist ein persönliches Projekt von Damar, in dem verschiedene Themen lernend und visuell erzählt werden
1 Kommentare
Hacker-News-Kommentare
Früher in der Seefahrt waren solche Kurven (Rhumb line, Loxodrome) sehr wichtig
Denn während der Fahrt denselben Kurs beizubehalten, war viel einfacher
Deshalb versuchten Seeleute, solchen Routen möglichst genau zu folgen
So entstand das Konzept der Rhumb line
Siehe Rhumb line auf Wikipedia
Die Mercator-Karte machte die Berechnung solcher Kurse einfacher
Siehe Mercator-Projektion auf Wikipedia
Dieses Setup selbst hat immer wieder neue mathematische Entdeckungen hervorgebracht
Zum Beispiel wird sie in einer Polarprojektion zu einer logarithmischen Spirale
Von der Seite betrachtet wird sie zu einem Wellenpaket
Wegen dieses mathematischen Reizes hat sich sogar Paul Erdos daran versucht
Referenzpapier: Spiraling the Earth with C. G. J. Jacobi. Paul Erdös
Als Randbemerkung scheint heute auf Hacker News ein Tag zu sein, an dem viele Beiträge über sphärische Geometrie auftauchen
Links zu verwandten Diskussionen:
1
2
3
Die Kurve hat auf der Oberfläche gleichmäßige Abstände, aber eine Rhumb line schneidet per Definition alle Meridiane unter demselben Winkel, weshalb die Linien dichter werden, je näher man an die Pole kommt
Auch anhand der Formel
x = 10 · cos(π·t/2) · sin(0.02·π·t)
y = 10 · sin(π·t/2) · sin(0.02·π·t)
z = 10 · cos(0.02·π·t)
wenn man sie in Kugelkoordinaten (R=10) umschreibt, erhält man
λ(t) = π/2 · t (Längengrad)
φ(t) = π/2 - 0.02·π·t (Breitengrad)
Leitet man ab, ergibt sich d(λ)/d(φ) = -25 (Konstante)
Eine echte Rhumb line hat dagegen d(λ)/d(φ) in der Form tan(α) · sec(φ), also abhängig vom Breitengrad
Diese Kurve ist also keine Rhumb line
Wenn dich eine Kurve mit veränderlichem Schnittwinkel interessiert, empfehle ich diese Visualisierung
Dadurch inspiriert stelle ich ein unterhaltsames kugelbezogenes Projekt vor, das ich 2022 gebaut habe
Projekt spheredisksample
Ich finde, das passt perfekt zu einem Trendtag wie heute
Für Leute, denen das gefallen könnte, empfehle ich auch das Projekt sphere-resample
Man sollte auch diesen Beitrag mit Diskussionen zu Rhumb lines usw. nicht vergessen
Ich finde die Visualisierung wirklich großartig
Ein Punkt, auf den ich zusätzlich gehofft hatte, war: „Kann man sich mit konstanter Geschwindigkeit bewegen?“
Wenn es nur darum geht, Punkte entlang des Pfads zu platzieren, ist das egal, aber bei tatsächlicher Bewegung sieht man, dass der Start und das Ende viel langsamer sind (nahezu durch den Radius bestimmt)
Wenn man sich mit konstanter Geschwindigkeit bewegen möchte oder sogar eine Easing-Funktion fürs Verlangsamen und Beschleunigen anwenden will, frage ich mich, wie man das angehen würde
Vermutlich gibt es da einen mathematisch eleganten Trick
Ich stelle mir grob vor, dass man die Formel differenziert, eine Geschwindigkeitsfunktion erzeugt, dann mit dem Satz des Pythagoras dx, dy, dz behandelt und anschließend mit der Umkehrfunktion der Geschwindigkeitsfunktion wieder nach t' reparametrisiert
Aber ich bin damit mathematisch nicht vertraut genug und rede vielleicht nur daher
Um sich mit konstanter Geschwindigkeit zu bewegen, braucht man eine „euklidische Parametrisierung“
Das heißt, der t-Wert muss so angepasst werden, dass er proportional zur zurückgelegten euklidischen Distanz ist
Das ist ein Konzept, das man bei Animationen entlang eines Pfads immer braucht
Meist gibt es dafür aber keine geschlossene Form, deshalb muss man es numerisch bzw. rechnerisch lösen
In der Praxis sucht man für jedes t das dt, das der gewünschten Distanz (ds) entspricht, etwa per Binärsuche oder Interpolationssuche
Dann speichert man diese Ergebnisse und erzeugt daraus eine Polylinie mit gleichmäßig verteilten Punkten, was ein praktischer Ansatz ist (solange sich die Kurve nicht fortlaufend über die Zeit verändert)
Der mathematische Trick, den du ansprichst, ist genau die „Bogenlängenparametrisierung“
Dabei verknüpft man mit der Umkehrfunktion der Bogenlängenfunktion der Kurve
Abgesehen von einigen speziellen Kurvenfamilien gibt es dafür meist keine geschlossene Form, daher geht man rechnerisch vor
Die Intuition, t langsamer laufen zu lassen, ist richtig
Die Winkelgeschwindigkeit bleibt zwar in Abhängigkeit von t erhalten, aber auch der Radius verändert sich mit t
Das ist eine Art Archimedische Spirale
Wenn man so parametrisiert, dass der Betrag der Geschwindigkeit konstant ist, bekommt man eine gleichmäßigere Bewegung
Allerdings startet der Radius bei 0, deshalb muss man den Grenzwert auf irgendeine Weise behandeln
Wenn man in Spielen oder Ähnlichem einem Pfad folgen muss, ist es auch praktikabel, Pfad und Tangente relativ zur Z-Achse anzuvisieren und die Bewegung mit wiederholten Geschwindigkeitsbegrenzungen und Ziehen wie bei einem Perlen-Spielzeug zu vereinfachen
Zu der Aussage „…eigentlich ist es nicht chaotisch. Es ist einfach ein Pfad, der durch eine mathematische Funktion definiert ist“:
Ob die angegebene Funktion tatsächlich chaotisches Verhalten zeigt, weiß ich nicht, aber das Konzept von Chaos selbst ist seiner Natur nach ein Phänomen deterministischer mathematischer Funktionen (extreme Sensitivität gegenüber Anfangsbedingungen)
Vermutlich hat der Autor das Wort „chaotic“ statt „random“ oder „non-deterministic“ gewählt
Ich halte solche technischen Einwände für sehr wichtig
Für Hacker-News-Leser ist diese Unterscheidung interessant, oder sollte es zumindest sein
Mathematisches Chaos ist ein deterministisches System mit extremer Sensitivität gegenüber Anfangsbedingungen
Die Ergebnisse sehen zufällig aus, sind aber begrifflich völlig verschieden von Zufälligkeit
Ich stimme zu, dass der Begriff Chaos selbst eine Eigenschaft deterministischer mathematischer Funktionen ist
In der alltäglichen Wörterbuchbedeutung meint er aber auch „völlige Unordnung und Verwirrung“, „einen vom Zufall beherrschten Zustand“ oder „die Unvorhersagbarkeit komplexer natürlicher Systeme“
Um den Erwartungen und Sprachgewohnheiten gewöhnlicher Leser gerecht zu werden, kann es durchaus sinnvoll sein, eher verständliche Sprache als mathematische Strenge zu wählen
Ein Stück Feedback: Auf dem Handy war die Navigation anders als erwartet
Ich wusste nicht, wie man es bedient, und habe zuerst Scrollen versucht
Als eine Berührung des Bildschirms zur nächsten Seite führte, dachte ich: „Ah, so funktioniert das“
Ich tippte rechts und kam zur nächsten Seite, und als ich später noch einmal klickte, versuchte ich links zu tippen, um zurückzugehen, sprang aber stattdessen gleich über zwei Seiten hinweg
Dadurch habe ich einige Bildschirme verpasst, was etwas schade war
Kein großes Problem, aber ein kleiner Hinweis hätte die Verwirrung reduziert und mir geholfen, mich besser zu konzentrieren
Trotzdem wäre es vielleicht gut, zusätzlich eine Swipe-Geste einzubauen (ich persönlich bevorzuge Tippen)
Wenn es der „Kartenstapel“-Oberfläche von Social-Media-Apps ähneln soll, würde sich Swipe ebenfalls natürlich anfühlen
Der Inhalt ist auf grundlegendem Einstiegsniveau und scheint gut geeignet, damit Kinder beim Lernen von Mathematik darauf zurückgreifen können
Noch besser wäre es gewesen, zwischendurch auch mathematische Konzepte wie die Kreisformeln (x = r cos t, y = r sin t) zu erwähnen
Gute Themen zur Erweiterung wären Polarkoordinaten und lineare Algebra (Vektoren, Transformationen, Transformationen im 3D-Raum usw.)
Falls der Autor mit solchen Themen nicht vertraut ist, würde ich die YouTube-Videos von 3blue1brown empfehlen
Aus Sicht eines Programmierers fehlen allerdings Teile zu Coding, Bibliotheken oder echten 3D-Objekten (Vertices, Deformationen usw.), daher wäre es noch besser, wenn auch das behandelt würde
Mich hat interessiert, wie „genau“ die Bewegung entlang der Z-Achse bei einer sphärischen Helix ist
Mit verschiedenen Funktionen wie z = c * t kann man eine einfache Verschiebung erreichen, und je nach Funktion ändern sich Dicke, Konsistenz und Gleichmäßigkeit der „Schalen“
Die hier verwendete Funktion sieht visuell gut aus, aber ich frage mich, wie man das Ziel aus Sicht eines gleichmäßigen Abstands zwischen den Spiralen (oder einer gleichmäßigen Flächenaufteilung usw.) definieren sollte
Ich würde gern wissen, nach welchem Prozess diese Funktion ausgewählt wurde oder ob sie einfach nur genommen wurde, weil sie gut aussieht
Vermutlich wurde diese Funktion einfach gewählt, weil sie programmiertechnisch bequem ist und gut aussieht
Die wirklich „korrekte“ Methode wäre meiner Meinung nach, einen Punkt im 3D-Raum mit konstanter Geschwindigkeit zu bewegen (zum Beispiel wie ein Schiff, das sich wirklich auf der Erde bewegt)
In diesem Fall lautet die Formel (siehe Codebeispiel)
const degrees = Math.PI / 180
const bearing = 5 * degrees
const k = Math.tan(bearing)
const v = 0.001
const phi = (t) => vt/Math.sqrt(1 + kk)
const theta = (t) => k*Math.ln(Math.tan(phi(t)/2))
Umrechnung in x-, y-, z-Koordinaten
const x = (t) => Math.sin(phi(t)) * Math.cos(theta(t))
const y = (t) => Math.sin(phi(t)) * Math.sin(theta(t))
const z = (t) => Math.cos(phi(t))
In der Praxis braucht man also sogar die Log-Funktion von tan(phi/2), und diese Form ergibt sich beim Lösen einer Differentialgleichung
Ich vermute, dass der Autor nicht zu dieser Komplexität mit ln(tan(phi/2)) gegangen ist
Entscheidend ist, die Geschwindigkeit entlang des Pfads konstant zu machen
Man kann die Ableitung so festlegen, dass die Geschwindigkeit konstant wird, und dann nach z auflösen oder über t' reparametrisieren
z = c * t zu wählen beeinflusst zugleich die Parametrisierung des Pfads und die tatsächliche Bahn
Die Animation ist beeindruckend flüssig
Ich musste mich vor Kurzem mit dem Problem beschäftigen, N Punkte auf einer Kugel zu verteilen, und habe dabei einen einfachen Algorithmus namens „fibonacci-sphere“ entdeckt
Auch dieser Ansatz erzeugt eine Spirale auf der Kugel, um Punkte zu platzieren
Zugehöriges Paper: fibonacci-sphere PDF
Ich bin überrascht, dass Acko.net noch nicht erwähnt wurde
Dort gibt es hervorragende Blogposts, die mit ähnlichen Werkzeugen komplexe Zahlen und Fraktale, besonders Julia-Fraktale, visuell erklären
Allen, die sich dafür interessieren, sehr empfohlen
How to fold a julia fractal - Acko.net Blog
Man kann direkt mit der Kurvenformel in 3D Desmos herumspielen Link zur 3D-Visualisierung in Desmos
Interessant ist auch, dass die parametrische Gleichung dieser Spirale im Kugelkoordinatensystem linear ist
Siehe Wikipedia zur Koordinatentransformation
Danke fürs Teilen, ich fand das wirklich sehr interessant