Wenn man einen Behälter, aus dem Sand rieselt, an einem Pendel befestigt und ihm dann zwei Mal hintereinander einen Schubs gibt (in verschiedene Richtungen), entstehen sehr hübsche Muster, so genannte "Lissajous-Kurven":
Kann man das auch ohne Sand mit einem Computer nachbauen? Aber sicher! Kann man das auch mit dem Calliope mini simulieren? Na klar! ;-) Die Grafikauflösung ist mit 5x5-Pixeln natürlich extrem gering, aber gerade das macht es doch spannend, es trotzdem hinzubekommen :-)
Erstmal braucht man eine Formel, nach der sich diese Kurven berechnen lassen: Findet man so oder so ähnlich im Internet:
Pendelbewegungen lassen sich immer durch Sinusfunktionen beschreiben. Weil wir das Pendel zwei Mal angestoßen haben, bewegt es sich sowohl horizontal (x-Achse) als auch vertikal (y-Achse). Wie genau, das hängt davon ab, wie stark jeweils der "Schubs" war und wie das Pendel konstruiert ist. All das ist in den Parametern a, b und delta "versteckt".
Wenn z. B. b doppelt so groß ist wie a, dann wird sich das Pendel in der y-Achse doppelt so schnell bewegen, wie in der x-Achse. Entsprechend dem Wert von delta sind die Bewegungen zusätzlich gegeneinander "verschoben". Und wie üblich steht t für den Zeitverlauf.
Je nachdem, wie man an diesen Werten "schraubt", entstehen ganz unterschiedliche Muster; auch dazu findet man im Internet Übersichten:
In jedem Fall sieht man sehr schön, wie da mit Hilfe der Mathematik einfach ein Modell der Realität geschaffen wird. Sobald es gefunden ist (und stimmt ;-)), kann man auch ohne Pendel nur anhand der Formel die Bewegung in einem Computerprogramm simulieren.
Und wie so oft ist das dann sogar ziemlich kurz, es ist einfach die "Übersetzung" der Formel in eine Programmiersprache, die der Calliope "versteht". Das hier ist schon der ganze Kern davon:
Wir lassen t von 0 bis 2*Pi laufen, da sich die Kurve danach ohnehin wiederholt. Bei der Berechnung der x- und y-Koordinate müssen wir beachten, dass diese im Calliope-Display von 0 bis 4 gehen, der Sinus aber Werte zwischen -1 und 1 liefert. Deswegen multiplizieren wir alles, was uns die Formel liefert, mit 2 (so dass Werte zwischen -2 und 2 rauskommen) und addieren noch eine 2 (damit sind wir wie gewünscht bei 0 bis 4). Die y-Achse ist im Display im Vergleich zum mathematischen Koordinatensystem außerdem gespiegelt, also ziehen wir da den berechneten Wert einfach vom Maximalwert 4 ab, um diesen Effekt nicht zu haben.
Wie man auch erkennen kann, hat das Programm einen "Einzelschritt-Modus", bei dem es nach jedem gezeichneten Punkt eine kurze Zeit wartet (d. h. man kann quasi sehen, wie der Sand rieselt und rote Pixel "malt"). Zum Beispiel so:
Was man noch machen kann: den Parameter delta im Zeitverlauf verändern und danach jedes Mal die Kurve immer neu zeichnen, so dass eine kleine Animation entsteht, die dann immer durch eine Spalte aus der oben gezeigten Übersicht läuft (welche eigentlich noch weiter geht, mit dem Link unter der Grafik ist die komplette Tabelle zu sehen):
Das sieht mit einer besseren Auflösung selbstverständlich noch schicker aus, aber die selbstgewählte "Challenge" war ja, es ja auf dem Calliope hinbekommen ;-) Hier dennoch ein Link, wie das Ganze am PC aussieht, auch zum Beweis, dass unser Programm wirklich das macht, was wir wollten (auf der Webseite heißen a und b abweichend M und N), ansonsten selbe Werte wie in der Animation oben, am besten in einem neuen Fenster öffnen und "daneben halten":
https://ibiblio.org/e-notes/html5/lis/lissa5.htm
Und tatsächlich passt das Programm für den Calliope in genau 33 Zeilen Code, welche auch im Anhang stehen (einfach im Python-Modus von MakeCode einfügen). Enthalten ist sogar die Möglichkeit, nicht nur die Parameter a und b anzupassen, sondern auch den Detaillierungsgrad der Kurven und der Animation einzustellen sowie (macht nur Sinn, wenn die Animation ausgeschaltet ist) eine "feste Phasenverschiebung", um gezielt die einzelnen Kurven aus der Übersicht zu erzeugen, indem man delta_fix z. B. auf Pi/2, Pi/4 etc. stellt.
Viel Spaß beim Ausprobieren! :-)




Comments