Zum Inhalt springen

Projekte: Unterschied zwischen den Versionen

Aus Martins Wiki
Zeile 202: Zeile 202:
=== Orbit ===
=== Orbit ===
LOC 213. Von einem hohen Turm wird ein Ball waagerecht nach rechts weggeschleudert. Seine Wurfbahn beschreibt eine Parabel, wenn er zu Boden fällt. Was aber passiert, wenn man dem Ball eine immer größere Anfangsgeschwindigkeit verpasst? Auf einer idealen Erdkugel ohne Luft und Berge wird er immer weiter fliegen, bis er sich schließlich ... im Orbit d.h. auf einer Umlaufbahn um die Erde wiederfindet, also gar nicht mehr zu Boden fällt. Unser Programm zeigt diesen Übergang mit einer Zoom-Funktion, die vom Mausrad angetrieben wird. Das Programm baut auf den Funktionen des Projektes Moonshot auf, was die Simulation von Körpern im Schwerefeld angeht.
LOC 213. Von einem hohen Turm wird ein Ball waagerecht nach rechts weggeschleudert. Seine Wurfbahn beschreibt eine Parabel, wenn er zu Boden fällt. Was aber passiert, wenn man dem Ball eine immer größere Anfangsgeschwindigkeit verpasst? Auf einer idealen Erdkugel ohne Luft und Berge wird er immer weiter fliegen, bis er sich schließlich ... im Orbit d.h. auf einer Umlaufbahn um die Erde wiederfindet, also gar nicht mehr zu Boden fällt. Unser Programm zeigt diesen Übergang mit einer Zoom-Funktion, die vom Mausrad angetrieben wird. Das Programm baut auf den Funktionen des Projektes Moonshot auf, was die Simulation von Körpern im Schwerefeld angeht.
[[File:orbit-1+2.jpg|center]]
[[File:orbit-1_2.jpg|center]]


=== Raycasting ===
=== Raycasting ===

Version vom 26. September 2025, 09:43 Uhr

Der Umfang der Programme für die Projekte ist jeweils zu Beginn mit "LOC xx" angegeben, dabei steht LOC für "lines of code". Das gibt eine grobe Einschätzung des Zeitaufwandes für eine Behandlung im Kurs. Allerdings benötigen die komplexeren Programme noch Vorübungen zum Einstieg. Deren Umfang wurden nicht mitgezählt. Außerdem sind nicht alle Programmzeilen gleichermaßen bedeutungsvoll. Die gute Nachricht ist aber, dass Python-Programme generell recht kompakt daherkommen. Mit 100 Zeilen lässt sich schon eine Menge Funktionalität erzielen!

KFZ-Kennzeichen

LOC 51. Wir suchen in einem Datenbestand. Bitte ladet diese Datei herunter!

> Willkommen bei der KFZ-Kennzeichen-Auskunft! > Bitte das Orts-Kennzeichen eingeben: RT > RT steht für Reutlingen in Baden-Württemberg > Bitte das Orts-Kennzeichen eingeben: ...

Plotter

LOC 20. Mit wenig eigenem Code ermöglicht uns die Matplotlib, Kurvenverläufe zu zeichnen. Ladet hierzu diese Datei herunter!

Geheim

LOC 66. Einfache Verfahren zum Verschlüsseln von Text sind schnell verstanden und programmiert. Caesar lässt grüßen: "joky oyz kot zkdz, jkx atzkx qkotkt asyzätjkt hkqgttz ckxjkt jgxl"

Verschiebung für den Code-Buchstaben g:

Klarbuchstabe:           abcdefghijklmnopqrstuvwxyz
                         ||||||||||||||||||||||||||
Geheimbuchstabe:   abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz
                         ^

Alternative Implementierung ohne Alphabet-String: Benutze die Tatsache, dass in Python die Buchstaben des Alphabets (wie in ASCII) aufsteigend codiert werden. Die Codierung erfährt man mit der ord-Funktion: ord('a') = 97, ord('z') = 122. Die Umkehrfunktion von ord lautet chr: chr(97) = 'a' und chr(122) = 'z'. Mache Gebrauch von der Modulo-Funktion (%), wenn du bei der Verschiebung über die Ränder gerätst! (Möglicherweise musst du vorher die Länge des Alphabets addieren.)

Ballonjagd

LOC 64. Mit gut 60 Zeilen Code programmieren wir unser erstes Spiel auf einer grafischen Oberfläche (GUI). Wer kann innerhalb von 20 Sekunden die meisten roten Ballons mit der Maus abstechen?

Benzin

LOC 80. Ich habe nach 830 km Fahrt 53 Liter getankt. Was war mein durchschnittlicher Verbrauch auf 100 km? Unser Programm gibt die Antwort. Aber es kann noch mehr: Es berechnet den Verbrauch bzw. Strecke und Volumen anhand der jeweils anderen 2 Werte.

Mit der Verwendung von tkinter lernen wir die Programmierung von grafischen Benutzeroberflächen: Fenster, Knöpfe, Textuelle Ein-und Ausgabe, Layout. Hier kannst du ein StarterSet herunterladen und mit der eigenen Entwicklung starten!

Symmetrie

LOC 52. Mit diesem Malprogramm gelingen exakt symmetrische Figuren, wie man sieht:

Bahnhofsuhr

LOC 98. Alles geht im Kreis. Eine einzige Funktion macht die Grafik: Sinus und Kosinus lassen grüßen! Hat man dieses Programm verstanden, steht der eigenen Uhrmacherei nichts mehr im Wege. Man baut Zifferblätter und Zeiger nach eigenen Ideen oder Vorlagen, fügt Zeitgeber, Wecker oder Stoppuhren hinzu, schaltet Zeitzonen um etc.

Neues von der Platte

LOC 73. Welche Daten habe ich (oder jemand anderes) auf dieser Festplatte oder jenem Stick in letzter Zeit neu erzeugt oder modifiziert? Dieses Programm gibt Auskunft!

Turtle

LOC 17-60. Mit einfachen Befehlen eine Schildkröte (engl. "turtle") über die Zeichenfläche zu bewegen stellt einen ganz besonders anschaulichen Zugang zur Programmierung dar. Die Schildkröte hinterlässt dabei Spuren und formt Figuren. Nicht nur, dass es Spaß macht, sich eigene Muster auszudenken oder spielerisch zu erforschen - nein, man bekommt auch ein gutes Gefühl für die Wirksamkeit der Python-Sprachelemente. Und lernt anschaulich, geometrische Zusammenhänge zu nutzen oder auch in Koordinaten zu denken. In der Thonny-Programmierumgebung kann man auf Knopfdruck umschalten zwischen Befehlseingabe und Ausführung, was zum Ausprobieren und experimentieren einlädt. Und Turtles können noch viel mehr...

Snake

LOC 104. Die Schlange (grün) frisst eine Beute nach der anderen (rot) und wird dabei immer länger. Somit wächst die Gefahr für die Schlange, sich auf dem Spielfeld selbst im Wege zu liegen. Dies muss der Spieler vermeiden, denn sonst ist es vorbei - Game Over! Sieger ist, wer die meisten Beutestücke erwischen konnte.

Datenanalyse

LOC 45. Die Pakete Matplotlib und SciPy ermöglichen eine professionelle Datenanalyse und Darstellung im Handumdrehen. Fragt man sich z.B., wie in den deutschen Bundesländern die Corona-Impfquoten, -Inzidenzen, und -Todesfälle zusammenhängen, findet man die Daten leicht bei Statista. Lädt man sie herunter und wertet sie mit einem Ptython-Skript aus, entstehen Grafiken wie diese (Stand November 2021):

Die Rohdaten liegen hier bereit. Zum Thema Korrelationskoeffizient siehe auch weiter unten!

Pong! mit Sound-Effekt

LOC 101. Mit dem roten Schläger muss der gelbe Ball in der grünen Box gehalten werden, sonst... Um die passenden Geräusche zu produzieren, gehe wie folgt vor: Kopiere diese drei Sound-Dateien in dein Programmverzeichnis:

Zu Beginn deine Programms lade sie mit den Befehlen

pong_wave = pygame.mixer.Sound('pong.wav')
wall_wave = pygame.mixer.Sound('blip.wav')
drown_wave = pygame.mixer.Sound('drown.wav')

Bei passender Gelegenheit in deinem Code kannst du sie jeweils abspielen mit pong_wave.play(), wall_wave.play() und drown_wave.play()

Triangles

LOC 78. Hier programmieren wir die Komposition (d.h. das Zusammenfügen) in objektorientierter Weise, also mit Klassen: Die animierte Grafik enthält viele Dreiecke. Jedes davon besteht aus drei beweglichen Punkten. Jeder Punkt wird - für Ort und Geschwindigkeit - durch zwei Vektoren definiert, wobei jeder Vektor wiederum über eine x-Komponente und eine y-Komponente verfügt. Alles ist also ineinander verschachtelt. Deswegen - und nicht trotzdem! - bleibt das Programm übersichtlich.

Fontäne

LOC 64. Wenn wir mehrere Bälle in die Luft schießen und etwas Gravitation hinzufügen, dann ergibt sich eine (auf Wunsch gepulste) Fontäne - nun, so ungefähr...

Katzenleben

LOC 121. (Quelle) Dieses Spiel mit PyGame basiert weitgehend auf einem Programm von Pit Noack, das 2018 in der Zeitschrift c't veröffentlicht wurde. Die vom Spieler gesteuerte Katze muss den unangenehmen Dingen (Wasser, Hunden, Lärm) ausweichen und die geliebten Dinge (Mäuse, Wollknäuel, Schmetterlinge) einsammeln. Die Sprites gibt's hier.

Proteinsynthese

LOC 85. Ausgehend von der DNA Sequenz, die das Gen zur Produktion von Laktase beinhaltet, wollen wir die resultierende Aminosäure-Folge bestimmen. Sie verkörpert letztlich das Protein namens Laktase.

Wir programmieren folgende Schritte:

  • Lade die benötigten Dateien aus dem Internet, falls noch nicht vorhanden.
  • Lese das Laktase-Gen als einzelne Zeichenkette.
  • Erzeuge aus der Tabelle des genetischen Codes ein Python dict.
  • Lese die Exon-Tabelle.
  • Finde die Start-Position der Protein-Codierung.
  • Spleiße die mRNA mithilfe der Exon-Tabelle aus dem Laktase-Gen.
  • Übersetze die mRNA in das Preprolactase-Protein mithilfe des genetischen Codes.
  • Schreibe die Aminosäure-Sequenz im Standardformat in eine Datei.

Achtung:

  • Obige Beschreibung ist zwar fachlich korrekt, aber sehr verkürzt. Wer mehr wissen will, schaue sich zum Thema DNA z.B. in der Wikipedia oder bei YouTube um.
  • Für die Bearbeitung von DNA-Sequenzen existiert ein spezielles Package namens Biopython. Professionelle Programmierer benutzen dieses Package, anstatt – so wie hier – auf die Basis-Funktionen von Python zurückzugreifen.

Tunnelblick

LOC 48. Mit Pygame lässt sich aus wenigen Zeilen Code der Eindruck erwecken, als fliege man in einen unendlichen Tunnel.

LOC 63. Färbt man die Kreise ein, ergeben sich psychedelische Effekte, mit denen man durch Mausbewegungen herumspielen kann.

Eins tanzt aus der Reihe

LOC 109. Alle Quadrate drehen sich links herum, außer dem roten. Wir lernen, wie man mit Pygame einfache Animationen programmiert, sodass ihr leicht eigene Ideen umsetzen könnt. Im vorliegenden Fall definieren wir eine Quadrat-Klasse und eine Unterklasse für den aus-der-Reihe-Tänzer. Da ist Vererbung und das Überschreiben von Methoden angesagt - sowie Translation und Rotation mit der Drehmatrix. Zu guter Letzt speichern wir die Bilder im animierten GIF-Format ab, wie oben zu sehen.

Zur Wahrnehmungspsychologie:

  1. Die Ecken der Quadrate erscheinen leicht gegen die Drehrichtung verbogen, was objektiv nicht der Fall ist.
  2. Färbt man den Hintergrund mit 'lightblue', so drehen sich anscheinend nur die jeweils vom Blick fixierten Quadrate sowie das rote.

Wo ist die ISS?

LOC 20. Die aktuelle Position der internationalen Raumstation ISS lässt sich leicht von einem Webserver wie Open Notify abfragen. Und das Grafik-Paket Plotly bietet vielfältige und großartige Möglichkeiten, Daten zu visualisieren. In unserem Falle wollen wir die Position der Raumstation in eine Weltkarte zeichnen:

In der Summe braucht man keine 20 Zeilen Python-Code, den "Rest" (= das Meiste) erledigen die Pakete Plotly und Pandas.

Mandelbrot-Menge

LOC 91. Die Mandelbrot-Menge ist ein fraktales Gebilde, dessen Strukturen im Kleinen aussehen wie im Großen. Mithilfe eines dynamischen Auswahlfensters können wir in die Tiefe zoomen. Dabei zeigen sich die Performance-Grenzen von Python: Der Bildaufbau wird immer langsamer. Dieses Video von Edmund Weitz erläutert die mathematischen Hintergründe.

Das Doppelhaus vom Nikolaus

LOC 39. Wir untersuchen mit Python, wie viele Möglichkeiten es gibt, das Haus vom Nikolaus zu zeichnen. Das sind nicht wenige! Dazu müssen wir aber die Figur erst einmal in Datenstrukturen transformieren auf denen wir dann operieren können.

Anschließend nehmen wir sein Doppelhaus ins Visier. Wieviel Möglichkeiten gibt's da wohl? Wenn wir ein bisschen Theorie verstanden haben, können wir schnell die richtige Antwort geben.

Memory

LOC 100. Hier kann man sein Kurzzeitgedächtnis trainieren: Karten werden zufällig gelegt, aufgedeckt, wieder zugedeckt - und bei Erfolg abgeräumt. Wer benötigt die wenigsten Versuche?

Vorbild für das Programm ist eine Art Solitär-Memory d.h. für einen einzelnen Spieler. Ziel des Spiels ist, mit möglichst wenigen Klicks alle Bildpaare zu finden. Am Anfang zeigt das Programm 4 Reihen mit je 5 Karten, von denen die Rückseite zu sehen ist. Klickt der Benutzer nacheinander auf zwei Karten, werden die jeweils zugehörigen Bilder gezeigt und die Karten nach 2 Sekunden

  • wieder "umgedreht", falls die Bilder verschieden waren, oder aber
  • abgeräumt, falls die Bilder gleich waren. Der Platz, an dem vorher eine Vor- oder Rückseite zu sehen war, ist dann leer.

Nach jedem dieser Züge wird eine Anzeige um eins erhöht. Am Ende oder zu jeder anderen Zeit kann der Benutzer einen „Neu“ Knopf drücken, um zur Startposition zurück zu gelangen. Die Karten liegen jedes Mal anders. Tipp: Man programmiert man keine Karten als Abstraktion, sondern Plätze, an denen Bilder gezeigt werden. Daher muss man an die Plätze (=canvas) zwei Informationen binden: Das zugehörige Bild und den Ansichts-Zustand: verdeckt, offen, leer. Hier kannst du ein StarterSet herunterladen und mit der eigenen Entwicklung starten!

Mondlandung

LOC 134. Wer schafft es, wie einst Neil Armstrong, die Mondfähre am richtigen Ort weich zu landen, ohne zu viel Treibstoff zu verbrauchen? Wir programmieren diese Aufgabe als Geschicklichkeitsspiel: Man muss gleichzeitig die Position, die Flugrichtung, die Geschwindigkeit und den Treibstoffvorrat im Auge behalten. Aber anders als Neil sitzen wir nicht in der Landefähre und können mehrmals üben. (Vermutlich konnte Neil das früher auch schon. Wer mag es recherchieren?)

Moonshot

LOC 92. Die Reise von Apollo 11 zum Mond im Jahre 1969 verlief anfangs auf einer freien Rückkehrbahn, um im Falle eines Versagens der Raketentriebwerke oder sonstiger Pannen das Raumschiff automatisch zur Erde zurück zu bringen. Diesen Ablauf simulieren wir, indem wir die physikalischen Gesetze zur Bewegung von Körpern im Schwerefeld anwenden. Das bedeutet, dass wir die entsprechenden Differentialgleichungen integrieren, um sowohl die Mondbahn im Schwerefeld der Erde als auch die Flugbahn des Raumschiffs im kombinierten Erde-Mond-Schwerefeld zu berechnen. Anfangs befindet sich das Raumschiff auf einer kreisförmigen Umlaufbahn um die Erde (rechte Grafik), dann wird der Raketenmotor in Flugrichtung gezündet (Boost). Wenn man den Zeitpunkt zur Zündung und die Brenndauer des Raketenmotors exakt trifft, gelingt das Manöver, wie im Bild festgehalten. Wer sich genauer informieren möchte, kann sich zum Beispiel in dieses Papier vertiefen. Aber keine Sorge, unser Programm ist sehr viel übersichtlicher.

Rekursive Programmierung

LOC 50. Ein Unterprogramm, das sich selbst aufruft - da muss man sein Hirn schon verbiegen, um zu verstehen, was passiert bzw. wie dieser Baum auf eigentlich ganz simple Art zustande kommt.

Nebenbei lernen wir einiges über Vektoren. Ohne die kommt kaum eine Computergrafik aus. Damit Leben ins Spiel kommt, kann man mit der Maus die Form des Baumes "live" in weiten Grenzen variieren.

Korrelator

LOC 91. Wie variieren paarweise zusammenhängende Größen wie z.B. die Intelligenz und der Notendurchschnitt von Schülerinnen? Oder die jeweiligen Lebensalter von Ehepartnern? Der sogenannte Korrelationskoeffizient gibt uns dafür ein objektives Maß. Wir wollen die zugehörige Formel

zum Leben erwecken, indem wir ein interaktives Programm schreiben. Damit gewinnen wir ein Gefühl für diese Art der Datenanalyse: Wann liegt der Wert r nahe bei 1 oder -1? Wann schwankt er um die Null? Was lässt sich aus der Zahl r ableiten und was nicht?

Und bei dieser Gelegenheit erkennen wir auch, warum die Formel "funktioniert".

Lissajous

LOC 133. Herr Lissajous hat im 19. Jahrhundert die nach ihm benannten Figuren beschrieben. Sie entstehen, wenn man Sinus-Schwingungen rechtwinklig gegeneinander aufträgt. Neben der GUI-Programmierung machen wir also Bekanntschaft mit den Konzepten von Amplitude, Frequenz, Phase und Dämpfung. Unser Programm kann eine Vielzahl statischer und bewegter Bilder verschlungener Pfade darstellen und lädt zum Spielen ein!

Einparktrainer

LOC 176. Zunächst simulieren wir ein Fahrzeug mit Achsschenkellenkung mit Pygame. Das kinematische Modell ist ein Fall für die Analytische Geometrie. Somit winkt hier ein doppelter Lerngewinn und es macht Spaß, das Auto kreuz und quer herumfahren zu lassen! Anschließend verpacken wir das Ganze als einen Trainer für das Rückwärts-Einparken in einen Parklücke. Auch andere Geschicklichkeitstests mit automatischer Kollisionserkennung (collision detection) sind denkbar. Ebenso der Anschluss eines Joysticks. Das Rückwärtseinparken lässt sich automatisieren, viele PKW verfügen über eine Einparkhilfe. Diese ließe sich auch hier programmieren - und danach vielleicht übertragen an ein Mikrocontroller-gesteuertes Modellfahrzeug. Schwieriger ist es, ein Gespann z.B. aus PKW und Wohnwagen rückwärts zu führen. Sicherlich beherrschen nur Profis das Rückwärtsfahren eines LKW mit zweiachsigem Anhänger.

Game of Life

LOC 162. Dieses Muster entwickelt sich aus einem Balken von 8 lebenden Zellen nach 42 Generationen. Wie geht es weiter? Diesen Klassiker sollte jeder Programmierer einmal in Code gegossen haben. Das Game Of Life ist ein unendlicher, bizarrer Kosmos! Wer tiefer in ihn schauen möchte: Siehe hier, hier, hier und hier! Eine leistungsfähige Software für (u.a.) das Game Of Life ist Golly

Bügeleisen

LOC 182. Was geschieht im Inneren eines herkömmlichen Bügeleisens? Wir simulieren die physikalischen Zusammenhänge und lernen die Bedeutung von elektrischer Leistung, Wärmekapazität, Wärmeleitung, Wärmeströmung und Wärmestrahlung kennen. Was ist ein Bimetall-Schalter, eine Hysterese oder ein Zweipunktregler? Die beschreibende Differentialgleichung integrieren wir mit dem Eulerschen Verfahren und stellen den Temperaturverlauf mithilfe von Tkinter grafisch dar. Hört sich etwas wüst an, ist aber halb so schlimm. Ist ja schließlich nur ein Bügeleisen :-)

Sokoban

LOC 217. Ein Klassiker der 80er Jahre. Der fleißige Lagerarbeiter fordert unsere Konzentration: In welcher Reihenfolge muss er vorgehen?

Wir werden Sokoban so programmieren, dass es super easy ist, einen anderen Spielplan (Layout) zu implementieren oder gar einen ganzen Satz davon als "Levels" bereit zu stellen. Da sind eurer Fantasie keine Grenzen gesetzt! Hier kannst du ein StarterSet herunterladen und mit der eigenen Entwicklung beginnen!

Orbit

LOC 213. Von einem hohen Turm wird ein Ball waagerecht nach rechts weggeschleudert. Seine Wurfbahn beschreibt eine Parabel, wenn er zu Boden fällt. Was aber passiert, wenn man dem Ball eine immer größere Anfangsgeschwindigkeit verpasst? Auf einer idealen Erdkugel ohne Luft und Berge wird er immer weiter fliegen, bis er sich schließlich ... im Orbit d.h. auf einer Umlaufbahn um die Erde wiederfindet, also gar nicht mehr zu Boden fällt. Unser Programm zeigt diesen Übergang mit einer Zoom-Funktion, die vom Mausrad angetrieben wird. Das Programm baut auf den Funktionen des Projektes Moonshot auf, was die Simulation von Körpern im Schwerefeld angeht.

Datei:Orbit-1 2.jpg

Raycasting

LOC 110. Von einer Lampe gehen rundum Lichtstrahlen aus, bis sie auf ein Hindernis stoßen. Mit unserem Raycasting-Programm können wir die Lampe beliebig bewegen und feststellen, welche Teile eines Raums beleuchtet werden und welche dunkel bleiben. Andersherum betrachtet wird so offenbar, welche Teile des Raums von diesem Punkt aus eingesehen werden können und welche nicht. Im Prinzip genauso funktionieren diese animierten Bilder. Klicke mit der Maus auf den gelben Punkt und bewege ihn mit gedrückter Maustaste!

3D-Raycasting

LOC 230. Vom Raycasting des vorigen Projekts ist es nicht mehr weit bis zur Darstellung einer einfachen 3-D-Welt, so wie sie in den Anfangszeiten der 3-D-Spiele z.B. bei Doom zu sehen waren. In unserer Welt können wir beliebig herumfahren und alle Objekte aus jeder Perspektive betrachten - nicht mehr, nicht weniger. Einfache Spielideen lassen sich aber auch damit schon realisieren. Hier ist eure Kreativität gefragt!

Raytracing

LOC 200. Was muss man wohl programmieren, um solch ein Bild zu produzieren? Mann nennt es Raytracing. Mehr Details findet man hier!

Tetris

LOC 205. Der Vater vieler Klötzchenspiele - da ist Übersicht und schnelle Reaktion gefragt. Allerdings auch etwas aufwändiger in der Programmierung. Siehe hier

Corona SIR

LOC 88. "Keep the curve flat!" - Haltet die Kurve flach, damit die Gesundheitssysteme nicht überlastet werden! So hieß es in den Anfangszeiten der Corona-Epidemie. Mathematische Modelle und Computersimulationen können uns helfen, die Dynamik des Infektionsgeschehens zu verstehen.

Etwas Schulmathematik und ein paar Zeilen Python-Code bringen uns erkenntnisreiche Ergebnisse - und wir können viele Varianten durchspielen. Begriffe wie Ansteckungsgefahr, Verdopplungszeit, R0 und Herdenimmunität werden greifbar. Nebenbei lernen wir etwas über die numerische Lösung von (gekoppelten) Differentialgleichungen sowie über die famose Matplotlib zur grafischen Darstellung. Keine Sorge, es wird nicht zu schwierig; alles wird haarklein besprochen. Wer sich schon ein wenig Appetit holen möchte, schaue sich dieses Video an, von ihm habe ich nämlich die Anregung (und den Namen) für dieses Projekt. Danke an Edmund Weitz!

Gesichtserkennung

LOC 35. Eigentlich sollte man von Gesichtserfassung sprechen, denn es werden hier keine Personen mit ihren Gesichtern assoziiert. Es geht lediglich darum, Gesichter als solche im Foto aufzuspüren.

Mit Python ist dies sehr einfach: Die OpenCV Anbindung serviert das Viola-Jones-Verfahren gebrauchsfertig. (Ich habe die Gesichter meiner indischen Kollegen hier aus Datenschutzgründen unkenntlich gemacht).

Original und Fälschung

LOC 75. Wer erkennt die 10 Unterschiede in den folgenden beiden Bildern?

Einem Computer sollte diese Aufgabe eigentlich nicht schwer fallen. Wäre das nicht eine interessante Programmieraufgabe? Wir lösen sie mithilfe von NumPy und anderen Paketen.

Boids

LOC 317. Dieser Klassiker im Bereich autonomer Agenten demonstriert, wie die Schwarmbildung bei Vögeln und Fischen durch einfache Verhaltensmuster der einzelnen Tiere erklärt werden kann. Wir programmieren das Zusammenspiel der Kräfte und erleben die sich daraus ergebenden d.h. emergenten Strukturen.

Navigation

LOC 180. Wie schafft es ein Navi, uns den nächsten Weg zum Ziel zu zeigen? Dazu müssen wir das Straßennetz auf Datenstrukturen abbilden, in denen dann Algorithmen den optimalen Weg finden. Wir programmieren den Dijkstra- und den A*-Algorithmus als wichtige Vertreter ihrer Zunft. Dann wir können die Programme auf das Londoner U-Bahn-Netz loslassen, um uns den schnellsten Weg z.B. von Upminster nach Kenton raussuchen zu lassen.

Sudoku

LOC 449. Diese Sorte Rätsel verlangt von uns mitunter eine große Konzentrationsfähigkeit und einen scharfen Bick. Aber halt, ist nicht ein Computer besser geeignet, die Lösung ausknobeln? Eigentlich ja, aber wie muss man ihn programmieren? Die Zauberworte heißen Rekursion und Backtracking. Diese Programmierkonzepte werden wir mit Python realisieren. Außerdem bietet sich hier an, das unittest Framework einzusetzen, um jederzeit prüfen zu können, dass unser Programm als Ganzes richtig funktioniert. Wenn wir uns sicher fühlen, setzen wir zum Abschluss noch mit Tkinter eine grafische Oberfläche darauf.

Blattsalat

LOC 1129. Wie schafft es ein Computer, eine Menge von Blättern zu sortieren, die zu verschiedenen Pflanzen gehören - ohne, dass man ihm vorgibt, von wieviel Pflanzenarten genau sie stammen? Wir programmieren zwei berühmte Machine-Learning-Algorithmen: K-Means und K-Nearest-Neighbor. Mehr Info gibt's hier!

Particle Life

LOC 140. Wem dieses Video gefällt, so wie es mich beeindruckt hat, die oder der sollte sich einmal selbst in die Welt der Selbstorganisation und Emergenz hineinprogrammieren. Auch wenn mit Python die Performance des Videos nicht erreicht werden kann, so macht es doch Spaß, mit den Parametern zu spielen, vor allem mit der Attraktionsmatrix :-)

Perzeptron

LOC 90. Angenommen, bei einer Pandemie sterben viele Menschen. Zwar ist bekannt, wie man die Erkrankung stoppen kann, doch es fehlen Medikamente. Eine statistische Untersuchung zeigt nun, dass man allein aus dem Alter und der Höhe des Fiebers bestimmen kann, ob ein Patient von allein wieder gesund wird oder nicht, wer also das Medikament wirklich braucht:

Das Perzeptron ist ein mathematisches Modell, das natürliche Nervenzellen nachbildet, die sogenannten Neuronen. Im Computer programmiert, kann man es trainieren, sodass es lernt, Eingangssignale zu unterscheiden. Wir trainieren ein Perzeptron mit den beobachteten Krankheitsverläufen. Danach kann es für neue Patienten eine gute Vorhersage treffen, um so mit den verfügbaren Medikamenten möglichst viele von ihnen zu retten. Die blaue Linie zeigt, wo das trainierte Perzeptron die (korrekte) Unterscheidung trifft:

In praktischen Anwendungen wird man nicht nur zwei Messgrößen, sondern einige Dutzend davon erfassen. Dann erkennt man als Mensch nicht mehr so leicht die Zusammenhänge. Dann reicht auch nicht mehr 1 Neuron, sondern man schaltet hunderte von ihnen zusammen. Perzeptrons sind die Vorläufer derjenigen künstlichen Neuronen, die heute in künstlichen neuronalen Netzen wie ChatGPT so erstaunliche Leistungen vollbringen.

Bézier-Kurven

LOC 125: Wer sich von diesem wunderbaren Video inspirieren lässt, möchte sicher auch gerne einmal solche Kurven programmieren.

Wir lernen, wie man mit Python und tkinter interaktive Grafiken programmiert, eine eigene Vektor-Klasse implementiert - und natürlich, wie man quadratische und kubische Bézier-Kurven auf Vektor-Basis berechnet.

Bézier-Kurven sind auch die perfekte Technik, um Schriftarten (Typefaces, Fonts) im Computer so festzulegen, dass man die einzelnen Zeichen auf beliebige Größen skalieren kann, ohne dass die Qualität bzw. Schärfe leidet. Das folgende Bild demonstriert, wie man aus nur 2 kubischen Bézier-Kurven die rechte Kontur des Buchstabens 'g' aus der Schriftart (Typeface) Comic Sans konstruieren kann.

Dass wir hier nur Grundlagen bearbeiten, sieht man an diesem Video eines echten Experten. Das mag abschrecken, aber so kompliziert kann die Praxis sein!

Kleingeld

LOC 143: Wieviel Geld liegt hier auf dem Tisch? Ganz ohne KI liefert unser Programm die Antwort: 7 Euro und 76 Cent. Die aufwändigen Bildoperationen übernimmt das Scikit-Image Paket. Darum bleibt unser Programm überschaubar. Hier kannst du ein StarterSet herunterladen und mit der eigenen Entwicklung beginnen!

Noch mehr...

findet sich auf meiner Homepage unter "Projekte".