Programmieren in GeoGebra mit GeoGebra- bzw. Java-Script

Aus Geogebra Rheinland-Pfalz
Version vom 15. Dezember 2012, 21:17 Uhr von B.Lachner (Diskussion | Beiträge)

(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Wechseln zu: Navigation, Suche
Kurzinfo
Birgit Lachner.
Diese Seite wurde von Birgit Lachner erstellt.


ACHTUNG: Nach der Einführung von Version 4.2 schien es für einige Zeit so zu sein, als ob nicht mehr alle Lösungen funktionierten. Probieren Sie trotzdem mal die Vorschläge aus, denn mehrwürdigerweise funktioniert ein Teil der Skripte "plötzlich" wieder. Ich werde die Aufgaben noch einmal alle durchgehen und ggf. die Lösungen alle anpassen. --Birgit Lachner 20:15, 15. Dez. 2012 (CET)

Inhaltsverzeichnis

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.

Unterschiede GeoGebra-Script und Java-Script

Erzeugen von 10 Zufallszahlen A0 bis A9.
JavaScript   GeoGebraScript
for(var i =0;i<10;i++) 
  ggbApplet.evalCommand("A_"+i+"=Zufallszahl[0,10]");

              

A_0 = Zufallszahl[0,10]
A_1 = Zufallszahl[0,10]
A_2 = Zufallszahl[0,10]
A_3 = Zufallszahl[0,10]
A_4 = Zufallszahl[0,10]
A_5 = Zufallszahl[0,10]
A_6 = Zufallszahl[0,10]
A_7 = Zufallszahl[0,10]
A_8 = Zufallszahl[0,10]
A_9 = Zufallszahl[0,10]
  • Ambox emblem plus.svg kurzer Code
  • Ambox emblem minus.svg zusätzliche Befehle notwendig

 

  • Ambox emblem plus.svg einfache Befehle
  • Ambox emblem minus.svg viele Zeilen


Fazit: Aufgrund der Kontrollstrukturen ist JavaScript sehr viel mächtiger als GeoGebraScript. Allerdings lassen sich viele Aufgaben mit dem einfacheren GeoGebraScript bewältigen.


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.
  • 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. Abschließen muss man alle Änderungen durch das Drücken des  OK -Knopfes auf den Unter-Tabs.

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.
  • Ab Version 5.0 soll das Skripting mit Hilfe von Python möglich sein. Mehr dazu auf dieser Seite im Entwickler-Wiki.

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.

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 Befehl KopiereFreiesObjekt[ ].
Statt Zufallszahl[1,10] verwendet man dann KopiereFreiesObjekt[Zufallszahl[1,10]]. Die Zahl ist dann unabhängig und bleibt so immer erhalten, bis sie etwa durch das Skript neu definiert wird.

Zoom-Knopf

Tipp: Ein andere Lösung 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

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.

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.

Ausblick auf das Scripting mit Python

Da ich das Skripting mit Python noch nicht ausprobiert habe, kann ich dazu noch nicht so viel sagen. Das Python-Skript-Fenster ist eine komplette Neuentwicklung, die auch das für Python typische Eingeben von Einzelbefehlen ermöglicht.

Außerdem kann eine Turtle-Grafik verwendet werden.

Sie erfahren mehr über die Entwicklung des Skripting mit Pythons auf der Seite im Entwickler-Wiki oder im GeoGebra-Unterforum zur Version 5.0 oder dem Unter-Unter-Forum About Python.