Programmieren in GeoGebra mit GeoGebra- bzw. Java-Script
Ideen der Anwendung von Skripting zum Einstieg
- Skripte sind eine Abfolge von Befehlen, die nacheinander ausgeführt werden. GeoGebra bietet zwei Möglichkeiten die Befehle anzugegeben - GeoGebraScript und JavaScript (also zwei Skriptsprachen).
Am einfachsten ist GeoGebraScript, denn es wird einfach nur eine Auflistung von GeoGebra-Befehlen angegeben, wie man sie auch in der Eingabezeile eingeben kann. Beim Aufruf des Skriptes, werden die Befehle hintereinander ausgeführt.
Immer Skripting?
Skripte erweitern die Möglichkeiten in GeoGebra wesentlich und sind in einigen Fällen unumgehbar. Vor allem wenn es um direkte Aktionen durch den Benutzer geht oder bei mehreren Aktionen hintereinander, die aufeinander aufbauen. Allerdings gibt es auch viele Situationen, in denen Skripting überflüssig ist. Häufig können folgende fortgeschrittene Techniken als Ersatz genutzt werden:
- Bedingte Definition mit dem
Wenn[]
-Befehl können verwendet werden, wenn die Definition eines Objektes von einem oder mehreren anderen Objekten abhängen soll.
- Beispiel: In dem Arbeitsblatt zum Thaleskreis ist der Punkt C über
Wenn[]
definiert. Einmal als Punkt auf dem Kreis und einmal als freier Punkt, wobei dies vom Kontrollkästchen abhängt.
- Beispiel: In dem Arbeitsblatt zum Thaleskreis ist der Punkt C über
- Die bedingte Sichtbarkeit (Eigenschaften-Tab Erweitert) bietet sich als Ersatz für eine bedingte Definition an, wenn die verschiedenen Objekte nichts miteinander zu tun haben.
- Beispiel: Beim Aufklappen eines Rechteck-Umfangs werden mehrere Strecken bewegt, die in Abhängigkeit vom Winkel eingeblendet werden.
- Die bedingte Färbung erspart die Definition von gleichen, nur unterschiedlichen gefärbten Objekten.
- Beipiel: Für die Epsilon-Umgebung kann ein Punkt für einen Folgenwert rot oder grün gezeichnet werden, je nachdem ob er in der Epsilon-Umgebung ist oder nicht.
In einigen Fällen sind Selbsterstellte Funktionen (Makros) die besser Lösung. Vor allem dann, wenn Eingaben/Vorgaben von Zeichenobjekten notwendig sind.
Das Skripting-Tab
Jedes in GeoGebra erzeugte Objekt - auch Texte - haben im Eigenschaften-Dialog ein Skripting-Tab. Hier werden alle internen Skripts abgespeichert, die gestartet werden, wenn eine bestimmte Aktion mit diesem Objekt stattfindet. Es gibt zwei Arten von Aktionen, für die jeweils eigene Skripte in Unter-Tabs eingegeben werden können.
- Mausklick ... dieses Skript wird immer dann ausgeführt, wenn der Spieler auf dieses Objekt einen Links-Klick durchführt.
- Update ... wenn sich etwas an dem Objekt ändert. Das kann die Änderung eines Wertes oder auch der Definition des Objektes sein.
Bei diesen Unter-Tabs muss man jeweils in einer Combo-Box auswählen welche Art von Skript man eingeben will, damit es richtig interpretiert wird. Man kann bei einem Objekt in beiden Unter-Tabs auch verschiedene Skript-Arten verwenden.
Zusätzlich gibt es im Skripting-Tab noch den Unter-Tab Globales JavaScript. Hier können alle Arten von Funktionen oder Anweisungen definiert werden, die vor dem Laden der Konstruktion ausgeführt werden. Vorgegeben ist in dem Eingabebereich die Funktion ggbOnInit()
, welche automatisch ausgerufen wird, sobald die Konstruktion geladen wird. Weitere (knappe) Informationen gibt auf hier.
Funktionen, die zum Beispiel von verschiedenen Objekten aufgerufen werden sollen, müssen in diesem Unter-Tab stehen, damit dem JavaScript-Interpreter die Funktion bekannt ist, wenn sie später im Code aufgerufen wird.
Links zu Informationen zum Skripting mit GeoGebra
Auf der GeoGebra-Homepage finden Sie diverse Hilfen:
- Eine kurze Einführung in das Skripting mit GeoGebra und einen Überblick über die verschiedenen Möglichkeiten findet man auf dem GeoGebra-Wiki.
- Spezielle Skripting-Befehle, die es neben den anderen Zeichen- und Rechen-Funktionen gibt.
- Die JavaScript-Referenz enthält in englisch eine Liste aller JavaScript-Methoden und wie sie in GeoGebra genutzt werden können. Darüber hinaus, wie man vom HTML-Code einer Seite per JavaScript Zugriff auf das eingebettete Applet hat.
Drei einfache Beispiele für den Anfang
In dieser Aufgabe gibt es zwei kleine Beispiele, wie man Skripte nutzen kann:
- Mit dem Zeichenknopf werden einfach ein paar Zeichenobjekte erstellt.
- Mit dem Zählknopf wird der Wert eines Schiebereglers erhöht.
- Ein Kontrollkästchen per Knopf-Klick umschalten.
Skripting Beispiele mit verschiedenen Objekten
Skripting mit Kontrollkästchen
Da sich die Kontrollkästchen nicht direkt miteinander verknüpfen lassen und es auch keine Optionsknöpfe (d.h. es ist immer nur eine Option aktiviert) gibt muss kann man hier das Skripting nutzen.
Ein sehr umfangreiche Anleitung zur Nutzung von Kontrollkästchen zum Anzeigen und Verbergen von Objekten finden Sie auf dem GeoGebra-Wiki-Handbuch auf dieser Seite.
- Optionsknöpfe mit Hilfe von Kontrollkästchen und Skripten erzeugen
- Erzeugen von verschachtelten Kontrollkästchen mit Skripting
Erzeugen von Zufallszahlen
- ACHTUNG: Die Verwendung von Zufallszahlen mit mehreren Skripten kann manchmal Probleme verursachen. Wird in einem Skript ein Objekt neu definiert, so berechnet GeoGebra üblicherweise alle Objekte neu, so also auch Zufallszahlen (auch wenn sei mit dem neudefinierten Objekt nichts zu tun haben). Will man etwa die Lösung kontrollieren lassen, kann es sein, dass man plötzlich neue Zufallszahlen hat, während der alte" Wert vergessen ist, wodurch eine Kontrolle nicht mehr möglich ist.
- Man umgeht das Problem, indem man mit dem Skript zwar Zufallszahlen erzeugt, aber dann nur den Wert verwendet und den Befehl
Zufallszahl
nicht in der Definition des Objektes stehen lässt. Dies geschieht durch den BefehlKopiereFreiesObjekt[ ]
.
- Man umgeht das Problem, indem man mit dem Skript zwar Zufallszahlen erzeugt, aber dann nur den Wert verwendet und den Befehl
- Statt
Zufallszahl[1,10]
verwendet man dannKopiereFreiesObjekt[Zufallszahl[1,10]]
. Die Zahl ist dann unabhängig und bleibt so immer erhalten, bis sie etwa durch das Skript neu definiert wird.
- Statt
Zoom-Knopf
- Tipp: Ein erweiterte Version findet man in diesem Arbeitsblatt auf GeoGebraTube.
Abhängigkeiten austricksen
Ein Problem in Geogebra ist, dass man manchmal mit Abhängigkeiten durcheinander gerät. Zum einen besteht eine Abhängigkeit die in bestimmten Situationen gewünscht ist, aber in einer anderen Situation stört diese Abhängigkeit wiederum.
- Das einfache Beispiel zeigt eine Anwendung des OnUpdate-Skripts. Normalerweise kann man nur eines haben: Ein Kreis der beweglich aber unveränderbar ist oder er ist instabil und kann dann aber nicht wirklich verschoben werden. Das Skripting hilft.
- Vom Prinzip her ähnlich, wie beim Kreis. Sobald man eines der Punkte, die das neue Koordinatensystem bestimmen, bewegt, wird nach Bedarf die Abhängigkeit neu bestimmt. ACHTUNG: In Version 4.2 hat sich beim Skripting etwas geändert. Bitte im vorherigen Beispiel nachschauen, was es zu beachten gibt.
Textfeld zur Eingabe von Werten
ERGÄNZUNG JavaScript und GeoGebra
JavaScript in GeoGebra einzubetten hat einen gewissen Vorteil, denn wenn es in die HTML-Seite von Hand eingebunden wird ist die Erstellung einer HTML-Seite aus GeoGebra heraus nicht direkt möglich. Man hat dann aber auch mehr Möglichkeiten, wie etwa den Einsatz von Formular-Objekten aller Art.
Die Hauptschwierigkeit beim Einsatz von JavaScript mit GeoGebra ist es, Befehle an GeoGebra zu übertragen und Werte zwischen dem HTML/JavaScript-Anteil und GeoGebra auszutauschen. Leider gibt es da für das intern verwendete JavaScript keine Möglichkeit den Code zu debuggen, so dass Fehler in einem langen Code eventuell schlecht zu finden sind. Erzeugt man den Code auf der HTML-Seite, so gibt es zum Beispiel Firefox-Addons wie Fire-Bug, um dies zu tun. Der Editor im Skripting-Tab bietet immerhin Syntax-Highlighting, für die JavaScript-Befehle. Für die GeoGebra-Befehle, gilt das nur in GeoGebra-Script.
Erstellen von neuen Objekten beliebiger Anzahl
Bei einer "normalen" GeoGebra-Zeichnung ohen Skripting gilt üblicherweise die Regel: Alles muss vorher genau festgelegt werden. Bei Simulationen, bei denen man nach und nach neue Zufallszahlen erzeugen will, musste man am Anfang eine Folge von Zahlen erzeugen, die nach und nachangezeigt werden. Mit Skript geht das nun anders. Und gerade wenn es um eine große Anzahl an Objekten geht, sollte man JavaScript verwenden.
- Sierpinski-Dreieck (fertige Datei)
- WICHTIGER Hinweis: Inzwischen werden Skripte zwar übersetzt. Aber diese Datei bereitet bei der Ausführung Probleme. Speichern Sie die Datei ab, öffnen GeoGebra, ändern die Sprache auf Englisch (Australien) und öffnen dann erst die Datei. Der Ersteller weißt darauf hin, dass es ab der 7. Iterationsstufe recht lange dauert, so dass man etwas Geduld haben muss. Bei der 8. Stufe muss man auch vergrößern, damit man die kleinen Dreiecke sehen kann.
Bild ausdrucken
Hier noch ein Beispiel, dass schon sehr speziell ist, aber auf jeden Fall seine Anwendung im Unterricht haben kann.
Besonderheiten von JavaScript im Vergleich zu GeoGebra-Script
GeoGebraScript hat ja vor allem den Vorteil, dass es sehr einfach zu verwenden ist. Neben den Kontrollstukturen, die den Code in JavaScript erheblich verkürzen können, gibt es noch zwei Besonderheiten:
- Funktionen im Sinne von Programmteilen, die an verschiedenen Stellen aufgerufen werden können. So kann man eine Funktion mit Anweisungen erstellen, die in einem Skript von verschiedensten Objekten aufgerufen werden können. Das erspart erheblich Arbeit, vor allem wenn man immer mal wieder etwas ändern muss.
- JavaScript-Listener werden in einigen Beispiel-Apps verwendet um freie zeichnerische Eingaben zu kontrollieren. Egal was der Benutzer zeichnet: es wird überwacht und wenn er das richtige gezeichnet hat, kommt eine positive Rückmeldung. Eine automatische Kontrolle dieser Art ist sonst nicht möglich. Allerdings ist der Umgang mit JavaScript-Listenern nicht ganz einfach. Hier ein Beispiel, in dem die Aktivitäten des Benutzer überwacht werden.