Einführung in ‚JavaSketchPad‘

Version 4

Peter Starfinger, 2004, BOS Sozialwesen München

Inhaltsverzeichnis
 

Vorstellung und Einrichtung von JavaSketchPad
 
Einige JavaSketchPad-Demo-Applets
      1.   Iris
      2.   Circles
      3.   Ikosaeder
      4.   Sine Wave
      5.   Hyperboloid
      6.   Conic Sections
      7.   Witch of Agnesi
      8.   Quadrilateral Coil
      9.   Section of a Cylinder
    10.   Theorem of Pythagoras
    11.   Cross Section of a Prism
 
Einige JSP-Schulapplets
      1.   Winkelsumme im Dreieck
      2.   Kathetensatz
      3.   Höhensatz
      4.   Bestimmung der Zahl π
      5.   Die lineare Funktion
      6.   Lineare Gleichungen und Ungleichungen
      7.   Parabel durch Scheitel und weiteren Punkt
      8.   Parabel durch 3 Punkte
      9.   Polynom 3. Grades (W/P/Q)
    10.   Sportplatz-Extremwertaufgabe
    11.   Zufallsgrößen
    12.   Bestimmung der Eulerschen Zahl
    13.   Leontief-Modell
    14.   Vektoraddition
    15.   Raumgerade in vektorieller Darstellung
    16.   Vektorielle Ebenendarstellung
    17.   Tortendiagramm
    18.   Analoge und digitale Uhr
 
Beispiel eines HTML-Arbeitsblattes mit JavaSketchPad
 
Der JavaSketchPad-Generator
      1.  Arbeitsweise des JSP-Generators
      2.  Arbeit mit dem JSP-Generator
 
Syntax von JavaSketchPad
    1.  Applet-Parameter
            1.1   Anwendungsunabhängige Applet-Parameter
            1.2   JavaSketchPad-spezifische Applet-Parameter
    2.  Konstruktionssyntax mit Übungsaufgaben
            2.1    Punktobjekte
            2.2    Textobjekte
            2.3    Linienobjekte
            2.4    Kreisobjekte
            2.5    Flächenobjekte
            2.6    Bildobjekte
            2.7    Maßobjekte
            2.8    Gitternetzobjekte
            2.9    Ortsobjekt
            2.10  Abbildungsobjekte
            2.11  Schaltflächenobjekte
    3.  Objektformatierung
            3.1   Allgemeine Formatierungsmöglichkeiten
            3.2   Formatierung von Punktobjekten
            3.3   Formatierung von Textobjekten
            3.4   Formatierung von Schaltflächenobjekten
 
Weitere Übungsaufgaben mit dem JSP-Generator
      1.  Übungsaufgabe
      2.  Übungsaufgabe
 
Modul-Bibliothek zum JSP-Generator
      1.  Markierung eines Winkels
 


Vorstellung und Einrichtung von JavaSketchPad
 

JavaSketchPad (JSP) ist die kostenlose Internet-Version des interaktiven Geometrieprogramms „The Geometer's Sketchpad“. Ohne sich umständlich in Java einarbeiten zu müssen, kann man mit JSP selbstständig ein Geometrie- oder Analysisapplet erstellen und in eine eigene HTML-Datei einbinden. Dazu muss das Applet innerhalb der HTML-Datei mit Hilfe von Applet-Parametern definiert werden, die auch die gewünschten Konstruktionsangaben enthalten. Zur Erstellung der Konstruktion muss man sich allerdings die JSP-Konstruktionssprache aneignen. Auf den ersten Blick scheint dies im Vergleich zu Geometrieprogrammen wie z. B. GEONExT von der Universität Bayreuth oder Z.u.L. von der Kath. Universität Eichstätt, die nahezu keine Syntaxkenntnisse erfordern und geometrische Konstruktionen alleine mit der Maus ermöglichen, einen Nachteil darzustellen. Andererseits sind nachträgliche Korrekturen an früheren Konstruktionsschritten in solchen Programmen schwierig oder gar unmöglich, stellen aber in einem syntaxorientierten Geometrieprogramm wie JavaSketchPad keinerlei Problem dar. Außerdem ist es vorteilhaft, dass JSP vergleichsweise schnell, stabil und ohne große Systemanforderungen auf jedem Browser läuft. Ein ausführlicher Vergleich von JavaSketchPad mit den beiden Applikationen GEONExT und Z.u.L. mit anschließender Gesamtbewertung findet sich hier.

Die Arbeit mit JSP erfordert das Java-Archiv ‚jsp4.jar‘, das hier heruntergeladen werden kann (ursprüngliche Quelle: www.keypress.com). (Eine selbst startende CD-ROM, die neben der notwendigen JavaSketchPad-Software die vorliegende Einführung und den JSP-Generator enthält, kann als Image (ISO-Datei)  hier  heruntergeladen werden.)

Im Gegensatz zu GEONExT oder Z.u.L. gibt es hier also keine eigene Entwicklungsoberfläche für die geplante geometrische Konstruktion. Daher ist es entweder ratsam, einen HTML-Editor und einen Webbrowser nebeneinander geöffnet zu haben und mit dem Webbrowser die Zwischenstufen der JSP-Konstruktion immer wieder zu kontrollieren. Eine zweite Möglichkeit der Erstellung einer JSP-Konstruktion, nämlich mit Hilfe eines JSP-Code-Generators, wurde von dem Niederländer Hans Klein geschaffen und von mir zu einer praktikablen browsergestützten Arbeitsoberfläche ausgebaut. Dieser JSP-Generator erweitert die Möglichkeiten von JavaSketchPad, indem er den Umgang mit Variablen sowie eine modulare Struktur gestattet, was den Aufbau regelrechter Bibliotheken mit aufrufbaren geometrischen Grundkonstruktionen ermöglicht. Der Generator wird weiter unten ausführlich vorgestellt. Am Ende dieser Einführung schließt sich noch eine JSP-Modul-Bibliothek an, die fortlaufend erweitert wird.


Beispiel eines HTML-Arbeitsblattes mit JavaSketchPad
 

Im Folgenden wird der kommentierte Quellcode eines HTML-Arbeitsblattes mit einer JavaSketchPad-Konstruktion zusammen mit dem Arbeitsblatt selbst in zwei nebeneinanderstehenden Frames vorgestellt. Anhand dieses Arbeitsblattes soll der Schüler / die Schülerin die Eigenschaften eines (dynamischen) Koordinatensystems kennen lernen. Sie werden genau sehen, wie der Browser die einzelnen HTML-Tags (= HTML-Anweisungen) interpretiert. Wenn Sie im Quellcode den Mauszeiger auf einen Tag stellen, erscheint zu diesem Tag eine kurze Erklärung. Öffnen Sie bitte nun diese HTML-Datei, machen Sie sich mit ihr vertraut und schließen Sie sie anschließend wieder.

Sie sehen, dass die Formatierung des Quellcodes (Zeilenumbrüche, Tabs, mehrere (nicht erzwungene) Leerzeichen hintereinander, die in den Einstellungen des Editors gewählte Art und Größe der Schrift usw.) in der Browser-Darstellung des Textes nicht erscheint. Anders ausgedrückt: Sie müssen Ihre gewünschten Textformatierungen mit Hilfe von HTML-Tags angeben und diese an der richtigen Stelle wieder schließen.
Es gibt allerdings einen HTML-Tag, der die Identität von Quellcodeformatierung und Textformatierung erzwingt, nämlich „<PRE>“. Dieser Tag leitet einen „vorformatierten“ Text ein, an dessen Ende „</PRE>“ stehen muss. Ohne spezielle HTML-Kenntnisse lassen sich mit diesem Tag Arbeitsblätter bequem erstellen. Allerdings schaltet <PRE> auf die wenig ansprechende Schriftart „Courier“ um. Dies können Sie vermeiden, indem Sie nach dem <PRE>-Tag noch den Tag <FONT FACE="(gewünschte Schriftart, z. B. Times New Roman)" SIZE="(gewünschte Schriftgröße)"> anschließen.

Mit dem <PRE>-Tag hat der Textteil des Beispiel-Quellcodes die folgende einfachere Gestalt:

            . . .

            <PRE><FONT FACE="Times New Roman" SIZE="3">
	    <B>Arbeitsauftrag:</B>

	      1.   Verschiebe den Koordinatenursprung.

	      2.   Verschiebe den Einheitspunkt auf der x-Achse.

	      3.   Verschiebe den Punkt P und beobachte seine links oben eingeblendeten Koordinaten.

	      4.   Die Achsen teilen das Koordinatensystem in vier Quadranten.
	            Beantworte mit Hilfe des Punktes P die folgenden Fragen:<sub> </sub>
	            o  Wo liegt der 1. Quadrant, der nur Punkte mit positiven Koordinaten enthält?
	            o  Wo liegt der 2. Quadrant, in dem die x-Koordinaten negativ und die y-Koordinaten
	                positiv sind?
	            o  Wo liegt der 3. Quadrant, in dem beide Koordinaten negativ sind?
	            o  Wo liegt der 4. Quadrant, in dem die x-Koordinaten positiv und die y-Koordinaten
	                negativ sind?

	      5.   Drücke die Taste ' r '.



	Quelle von JavaSketchpad: <A href="http://www.keypress.com/">http://www.keypress.com/</A>

            </FONT></PRE>

            . . .

Öffnen Sie zum Vergleich auch diese HTML-Datei mit Ihrem Browser. Sie sehen, dass deren Erscheinungsbild sich von dem der HTML-Datei ohne <PRE>-Tag kaum unterscheidet. Einschränkend muss allerdings betont werden, dass Sie bei Verwendung des <PRE>-Tags für Ihren Text von vornherein nur die (bescheidenen) Formatierungsangebote Ihres Editors nutzen und damit die ungleich vielfältigeren und einem Textverarbeitungsprogramm wie Word ebenbürtigen Formatierungsmöglichkeiten, die HTML bietet, ungenutzt lassen.
Um sich in die Welt der HTML-Tags einzuarbeiten, empfehle ich die ausgezeichnete Webseite SELFHTML von Stefan Münz, meinem sehr geschätzten HTML-Lehrer. Ich persönlich bin davon überzeugt, dass sich dieser Aufwand rentiert.
Zwar nimmt die Ansicht zu, dass sich angesichts so komfortabler Webseiten-Kreatoren wie des (kostenpflichtigen) „DreamWeaver“ ein eigenständiges Aneignen von HTML nicht mehr lohne. Den Verfechtern dieser Meinung wünsche ich nur, dass sie ihre superbequemen HTML-Utilities immer in ihrer Nähe haben. Außerdem zeigt die Erfahrung, dass auch das komfortabelste Webseiten-Erstellungsprogramm oftmals eine manuelle Nachbearbeitung des Quellcodes erfordert, was ohne eigene HTML-Kenntnisse schwierig ist.


Der JavaSketchPad-Generator
 

1. Arbeitsweise des JSP-Generators

In JavaSketchPad stellt man den Bezug zu einem vorangegangenen Konstruktionsschritt über dessen Zeilennummer her. Wenn man dann nachträglich einen Schritt einfügen will, stimmen die nachfolgenden Zeilenbezüge nicht mehr und müssen aufwändig korrigiert werden. Im von mir überarbeiteten und ergänzten JavaSketchPad-Generator von dem Niederländer Hans Klein ist dieser Nachteil beseitigt, denn hier besteht die Möglichkeit, die einzelnen Konstruktionsschritte mit Variablen zu bezeichnen, auf die dann später zurückgegriffen werden kann. Ein Beispiel soll dies verdeutlichen.

In JavaSketchPad kann man leider nur Punkte und keine anderen geometrischen Objekte beschriften. Im Folgenden sollen aber beispielsweise die Seiten eines Dreiecks beschriftet werden. Dazu muss man, vereinfacht dargestellt, zunächst den jeweiligen Seitenmittelpunkt konstruieren (Zeilen 7, 18, 26) und diesen dann beschriften. Tatsächlich empfiehlt es sich aber, noch einen mittelpunktsnahen unsichtbaren Hilfspunkt zu konstruieren (Zeilen 8-15, 19-23, 27-31) und diesen dann zu beschriften, weil sonst die Beschriftung zu eng an der Seite positioniert wäre, was optisch irritiert. Für die Beschriftung selbst ist das von JavaSketchPad standardmäßig für Punkte angebotene „label“ insofern unbefriedigend, als es innerhalb des Applets bezüglich der gewählten Schriftart, der Zeichengröße sowie der Schriftfarbe nicht gestaltungsfähig, sondern völlig statisch ist. Abhilfe ist nur möglich, indem man statt des üblichen Punkt-Labels zunächst einen Text definiert (Zeilen 16, 24, 32) und diesen dann mit der gewünschten Formatierung an den Hilfspunkt heftet (Zeilen 17, 25, 33). Nun zum Konstruktionstext mit dem zugehörigen Applet:
 

{1} Point(170,300);
{2} Point(270,300);
{3} Point(220,200);
{4} Segment(1,2)[thick,blue];
{5} Segment(1,3)[red];
{6} Segment(2,3)[red];
{7} Midpoint(4)[hidden];
{8} FixedPoint(0,0)[hidden];
{9} FixedPoint(10,0)[hidden];
{10} Segment(9,8)[hidden];
{11} Circle by radius(7,10)[hidden];
{12} Segment(1,7)[hidden];
{13} Intersect2(12,11)[hidden];
{14} Rotation(13,7,1.57)[hidden];
{15} Translation(14,0,-5)[hidden];
{16} FixedText(0,0,'c')[hidden];
{17} PeggedText(15,16)[justifyCenter,font('Courier'),size(20),blue];
{18} Midpoint(5)[hidden];
{19} Circle by radius(18,10)[hidden];
{20} Segment(3,18)[hidden];
{21} Intersect2(20,19)[hidden];
{22} Rotation(21,18,1.57)[hidden];
{23} Translation(22,0,-5)[hidden];
{24} FixedText(0,0,'b')[hidden];
{25} PeggedText(23,24)[justifyCenter,font('Helvetica'),size(12),red];
{26} Midpoint(6)[hidden];
{27} Circle by radius(26,10)[hidden];
{28} Segment(2,26)[hidden];
{29} Intersect2(28,27)[hidden];
{30} Rotation(29,26,1.57)[hidden];
{31} Translation(30,0,-5)[hidden];
{32} FixedText(0,0,'a')[hidden];
{33} PeggedText(31,32)[justifyCenter,font('TimesRoman'),size(12),red];


 

 

Applet starten

 

 
In der JSP-Generator-Syntax lautet dieser Text z. B. wie folgt:
 

A=Point(170,300,'')
B=Point(270,300,'')
C=Point(220,200,'')
c=Segment(A,B,'thick,blue')
b=Segment(A,C,'red')
a=Segment(B,C,'red')
M_c=Midpoint(c,'hidden')
H1=FixedPoint(0,0,'hidden')
H2=FixedPoint(10,0,'hidden')
radius=Segment(H2,H1,'hidden')
k_c=Circle_by_radius(M_c,radius,'hidden')
c1=Segment(A,M_c,'hidden')
S_c=Intersect2(c1,k_c,'hidden')
R_c=Rotation(S_c,M_c,1.57,'hidden')
T_c=Translation(R_c,0,-5,'hidden')
txt_c=FixedText(0,0,'c','hidden')
PeggedText(T_c,txt_c,"justifyCenter,font('Courier'),size(20),blue")
M_b=Midpoint(b,'hidden')
k_b=Circle_by_radius(M_b,radius,'hidden')
b1=Segment(C,M_b,'hidden')
S_b=Intersect2(b1,k_b,'hidden')
R_b=Rotation(S_b,M_b,1.57,'hidden')
T_b=Translation(R_b,0,-5,'hidden')
txt_b=FixedText(0,0,'b','hidden')
PeggedText(T_b,txt_b,"justifyCenter,font('Helvetica'),size(12),red")
M_a=Midpoint(a,'hidden')
k_a=Circle_by_radius(M_a,radius,'hidden')
a1=Segment(B,M_a,'hidden')
S_a=Intersect2(a1,k_a,'hidden')
R_a=Rotation(S_a,M_a,1.57,'hidden')
T_a=Translation(R_a,0,-5,'hidden')
txt_a=FixedText(0,0,'a','hidden')
PeggedText(T_a,txt_a,"justifyCenter,font('TimesRoman'),size(12),red")

 
 
Im vorstehenden Konstruktionstext wird dreimal, nämlich für alle drei Seiten des Dreiecks, dieselbe Konstruktionsfolge wiederholt, was für die Eingabe ermüdend ist. Jedoch gestattet der JSP-Generator sogar einen modularen Code mit JavaScript-Elementen, sodass der Generator-Quelltext für diese Konstruktion auch folgendermaßen lauten könnte:

function LabelSegment(segment,text,options)
{var M=Midpoint(segment,'hidden')
var H1=FixedPoint(0,0,'hidden')
var H2=FixedPoint(10,0,'hidden')
var h=Segment(H2,H1,'hidden')
var c=Circle_by_radius(M,h,'hidden')
var H=Intersect2(segment,c,'hidden')
var H_rot=Rotation(H,M,1.57,'hidden')
var H_trans=Translation(H_rot,0,-5,'hidden')
var txt=FixedText(0,0,text,'hidden')
return PeggedText(H_trans,txt,'justifyCenter,'+options)
}

A=Point(200,300,'')
B=Point(300,300,'')
C=Point(250,200,'')
c=Segment(A,B,'thick,blue')
b=Segment(C,A,'red')
a=Segment(B,C,'red')
txt_c=LabelSegment(c,'c',"font('Courier'),size(20),blue")
txt_b=LabelSegment(b,'b',"font('Helvetica'),size(12),red")
txt_a=LabelSegment(a,'a',"font('TimesRoman'),size(12),red")

Die Funktion „LabelSegment“ wurde als allgemein nützliche Funktion auch in die Modul-Bibliothek ‚extensions.js‘ und ihre Kurzbeschreibung in die Code-Hilfedatei ‚help.htm‘ aufgenommen und steht damit wie viele andere nützliche Module jedem Generator-Code zur Verfügung.

 

2. Arbeit mit dem JSP-Generator

Arbeitsoberfläche des JSP-Generators

Die Arbeitsoberfläche des JSP-Generators besteht neben der oberen Steuerungsleiste aus dem linken Textfeld für den Generator-Code und dem rechten Textfeld für den aus dem Generator-Code erzeugten JSP-Code sowie für die Generator- und die Javascript-Hilfe. Nach Anklicken der Schaltfläche „Generator → JSP“ sowie der jetzt anstelle des Titels erscheinenden Schaltfläche „Applet starten“ wird das JSP-Applet gestartet und in einem eigenen Fenster angezeigt. Ist der Generator-Code fehlerhaft, so unterbleibt die Code-Konvertierung und in der Statusleiste erscheint die Meldung „Fehler auf der Seite“. Aber auch wenn der Generator-Code konvertiert wird, kann der JSP-Code manchmal Fehler enthalten. In diesem Fall bringt das Appletfenster eine Fehlermeldung.
Beim Eingeben des Generator-Codes können Sie sich viel Tipparbeit sparen, wenn Sie die gewünschten Syntaxelemente aus der zum Generator gehörigen Hilfedatei ‚help.htm‘, die nach Anklicken von „Hilfe“ im rechten Fenster angezeigt wird, zunächst markieren und dann entweder mit Strg+C und Strg+V oder per Drag-and-drop herauskopieren. Wenn Sie mit JavaScript-Strukturen arbeiten wollen, können Sie durch Anklicken von „JScript“ eine JavaScript-Hilfe (Autor: Stefan Münz; Website:SELFHTML) ins rechte Fenster holen.

Öffnen Sie nun den JSP-Generator und probieren Sie ihn aus, indem Sie einen der beiden oben stehenden Generator-Beispielcodes (nicht den JSP-Code!) in das Eingabefenster des Generators kopieren, ihn durch Anklicken von „Generator → JSP“ in den JSP-Code konvertieren und das Applet in der Titelleiste starten.
Falls Sie ‚Sichern‘ aktiviert haben, werden nach der Konvertierung des Generator-Codes in den JSP-Code zwei Dateien automatisch erzeugt und in Ihrem Download-Verzeichnis gespeichert: ‚<Projektname>.gen‘ und ‚<Projektname>.app‘. Die erstgenannte Datei enthält den erstellten Generator-Code, die zweite den Applet-Code, mit dem das JSP-Applet gestartet wird. Sie brauchen jetzt nur noch die oben vorgestellte HTML-Datei mit dem Applet-Code zu verlinken und haben damit bereits den Kern eines neuen elektronischen Arbeitsblatts kreiert.

Der gepackte JSP-Generator kann hier heruntergeladen werden.


Syntax von JavaSketchPad
 

1. Applet-Parameter

Unter Applet-Parametern versteht man Parameter, die beim Start eines Applets mit ihrer Bezeichnung („NAME“) aufgerufen und dann mit einem Wert („VALUE“) belegt werden, der eine bestimmte Eigenschaft des Applets festlegt. Im obenstehenden Quellcode haben Sie schon die Syntax einer solchen Parameterbelegung kennen gelernt:

<PARAM NAME="(Parameterbezeichnung)" VALUE="(Wert)">

Man unterscheidet zwischen allgemeinen, d. h. unabhängig von der aktuell vorliegenden Java-Anwendung gültigen Applet-Parametern und anwendungsspezifischen Applet-Parametern, die nur in der vorliegenden Anwendung einen Sinn machen. Hier eine kleine Übersicht über beide Parameter-Kategorien:

1.1   Anwendungsunabhängige Applet-Parameter
 
 
NAME VALUE Applet-Eigenschaft
CODEBASE (Verzeichnis der Javacode-Datei) (für Appletstart entbehrlich, da schon im
APPLET-Tag enthalten: siehe Beispiel)
CODE (Name der Class-Datei, mit
der das Applet startet)
(für Appletstart entbehrlich, da schon im
APPLET-Tag enthalten: siehe Beispiel)
ARCHIVE (Name der JAR-Datei, falls
vorhanden)
(für Appletstart entbehrlich, da schon im
APPLET-Tag enthalten: siehe Beispiel)
WIDTH Anzahl Pixel Breite des Applet-Fensters
(für Appletstart entbehrlich, da schon im
APPLET-Tag enthalten: siehe Beispiel)
HEIGHT Anzahl Pixel Höhe des Applet-Fensters
(für Appletstart entbehrlich, da schon im
APPLET-Tag enthalten: siehe Beispiel)
ALIGN left Applet-Fenster steht ganz links
right Applet-Fenster steht ganz rechts
top Text oder Grafik neben dem Applet-Fenster
beginnt in Höhe des oberen Fensterrandes
middle Text oder Grafik neben dem Applet-Fenster
steht mittig zum Fenster
bottom Text oder Grafik neben dem Applet-Fenster
endet in Höhe des unteren Fensterrandes
HSPACE Anzahl Pixel horizontaler Abstand zwischen Applet-Fenster
und umgebendem Text bzw. Grafik
VSPACE Anzahl Pixel vertikaler Abstand zwischen Applet-Fenster
und umgebendem Text bzw. Grafik

 
1.2   JavaSketchPad-spezifische Applet-Parameter
 
 
NAME VALUE Applet-Eigenschaft
Offscreen 0 Animation einfach gepuffert,
daher ruckartiger
1 (voreingestellt) Animation doppelt gepuffert,
daher glatter
Frame 0 Applet-Fenster hat keinen
zusätzlichen Rahmen
1 (voreingestellt) Applet-Fenster hat einen zusätz-
lichen Rahmen mit 1 Pixel Breite
BackRed numerischer Wert
von 0 bis 255
Rot-Anteil in der Hintergrundfarbe
des Applet-Fensters
BackGreen numerischer Wert
von 0 bis 255
Grün-Anteil in der Hintergrundfarbe
des Applet-Fensters
BackBlue numerischer Wert
von 0 bis 255
Blau-Anteil in der Hintergrundfarbe
des Applet-Fensters
LabelFont Javafontbezeichnung, z. B.
"Helvetica" (voreingestellt)
Java-Schriftart für Beschriftungen von Punkten
Vorsicht: Java-Fonts sind von normalen Fonts wie 'Arial', 'Symbol' usw. zu unterscheiden!
LabelSize Pixelangabe zw. 6 und 100;
voreingestellt: 12
Labelfont-Größe
LabelBold 0 Labelfont nicht fett
1 (voreingestellt) Labelfont fett
LabelItalic 0 (voreingestellt) Labelfont nicht kursiv
1 Labelfont kursiv
ActionFont Javafontbezeichnung, z. B.
"TimesRoman" (voreingestellt)
Javafont für Aufschriften von Action-Buttons
Vorsicht: Java-Fonts sind von normalen Fonts wie 'Arial', 'Symbol' usw. zu unterscheiden!
ActionSize Pixelangabe zw. 6 und 100;
voreingestellt: 14
Actionfont-Größe
ActionBold 0 (voreingestellt) Actionfont nicht fett
1 Actionfont fett
ActionItalic 0 (voreingestellt) Actionfont nicht kursiv
1 Actionfont kursiv
MeasureFont Javafontbezeichnung, z. B.
"Helvetica" (voreingestellt)
Javafont für die Textausgabe von Maßobjekten
Vorsicht: Java-Fonts sind von normalen Fonts wie 'Arial', 'Symbol' usw. zu unterscheiden!
MeasureSize Pixelangabe zw. 6 und 100;
voreingestellt: 10
Measurefont-Größe
MeasureBold 0 (voreingestellt) Measurefont nicht fett
1 Measurefont fett
MeasureItalic 0 (voreingestellt) Measurefont nicht kursiv
1 Measurefont kursiv
MeasureInDegrees 0 (voreingestellt) Winkelangabe im Bogenmaß
1 Winkelangabe in Grad
DirectedAngles 0 Winkelangabe ohne Drehsinn
1 (voreingestellt) Winkelangabe mit Drehsinn
Construction Gesamter Konstruktionstext
der JavaSketchPad-Konstruktion
Applet läuft nur bei Fehlerfreiheit
des Textes; keine Fehlermeldungen!

 

2. Konstruktionssyntax mit Übungsaufgaben

Wie das Beispiel eines HTML-Arbeitsblattes gezeigt hat, ist der gesamte Konstruktionstext von JavaSketchPad der Wert des Applet-Parameters "Construction". Der Text selbst ist zeilenweise aufgebaut, wobei jede Zeile genau einen Konstruktionsschritt enthält, der mit einem Strichpunkt abgeschlossen werden muss. In jedem Konstruktionsschritt wird ein Objekt (z. B. Punkt, Gerade, Kreis) meist mit Hilfe früherer (!) Objekte definiert, die anhand ihrer Zeilennummer in der Argumentliste des Objekts referenziert werden. So bedeutet z. B. die Zeile

Circle by radius ( 2 , 7 );

dass ein Kreis um den Punkt aus der Zeile 2 mit der Länge der Strecke aus der Zeile 7 als Radius gezeichnet wird, wobei diese Zeile selbst nach der 7. Zeile stehen muss.

Die Länge der Argumentliste eines Objekts ist genau festgelegt. Bei manchen Objekten ist aber auch ein Verweis auf eine variable Anzahl früherer Objekte nötig. In einem solchen Fall ist eine zusätzliche variable Argumentliste implementiert. Zum Beispiel steht bei dem Textobjekt "ConcatText" (Verknüpfung mehrerer Texte) nicht fest, wie viele Texte verknüpft werden sollen. Also werden nach der Platzierung des verknüpften Textes an den (xa; ya)-Punkt des Applet-Fensters die Referenz-Zeilennummern der zu verknüpfenden Textobjekte in eine variable zweite Argumentliste aufgenommen:

ConcatText ( xa , ya ) ( Nr_Text1 , Nr_Text2 , . . . ) ;

Es ist möglich, den Konstruktionstext mit Kommentaren zu versehen. Diese müssen allerdings in geschweiften Klammern stehen und werden dann vom JSP-Interpreter ignoriert. Die populärste Nutzung der Kommentierungsmöglichkeit besteht im zeilenweisen Voranstellen der aktuellen Zeilennummer, sodass der Applet-Verfasser leichter die Übersicht über die korrekte Objekt-Referenzierung behält. Beachten Sie, dass die Zeilennummernfolge lückenlos die natürlichen Zahlen durchläuft. Diesbezügliche Manipulationen bei den vorangestellten Zeilennummern haben auf die Zeilenzählung von JavaSketchPad keinerlei Einfluss, da Kommentare ja ohnehin ignoriert werden! Der nachträgliche Einschub einer Zeile ist daher immer schmerzhaft, da er die Korrektur aller bereits vorhandenen nachfolgenden Referenzen auf Objekte erforderlich macht, die zwischen der eingeschobenen Zeile und der referenzierenden Zeile stehen.
Diese (wohl bei jeder Erstellung eines JSP-Applets irgendwann erforderliche) Referenznummern-Korrektur enfällt, wenn man den im letzten Kapitel eingeführten JSP-Generator benutzt. Sein Schöpfer Hans Klein hat die Syntax von JavaSketchPad so abgeändert, dass sie voll JavaScript-tauglich geworden ist und sogar eine modulare Struktur erlaubt. Die Zeilennummern-Referenzierung ist hier durch die Verwendung von Variablen überflüssig gemacht worden, sodass der nachträgliche Einschub eines Konstruktionsschritts kein Problem darstellt. Ein eingebauter Konverter verwandelt diese Generator-Syntax wieder in herkömmliche JSP-Syntax, die dann automatisch in eine HTML-Datei geschrieben und als JSP-Applet gestartet wird. In der Excel-Datei „Jsp.xls“ sind die Syntax-Elemente von JavaSketchPad und vom JSP-Generator parallel zueinander aufgelistet und kommentiert.

Leider enthält JavaSketchPad keine benutzerfreundliche Fehlerbehandlung. Selbst die Groß- und Kleinschreibung in seiner Syntax ist genauestens zu beachten. Auch der kleinste Fehler (z. B. ein missbräuchliches Verwenden des Strichpunkts in einem Text) wird ohne jeden Fehlerhinweis rigoros durch Nichtstarten des Applets bestraft. Zur Vermeidung einer endlosen Fehlersuche hilft nur zeilenweises Testen mit dem Browser.

Die vollständige Syntax von JavaSketchPad ist in den folgenden Tabellen nach Objektfamilien geordnet aufgelistet. In der ersten Tabellenspalte steht der Objektbegriff, in der zweiten Spalte die JSP-Syntax dazu, und in der dritten Spalte werden die Argumentlisten kurz erläutert. Eine genauere (englischsprachige) Information zu jedem Objekt lässt sich durch Anklicken des jeweiligen JSP-Begriffs in der zweiten Spalte erhalten.
Den einzelnen Objektfamilien sind Übungsaufgaben beigefügt, die mit Hilfe des JSP-Generators bearbeitet werden können. Zu diesen Übungsaufgaben sind Musterlösungen hinterlegt:
 
Übungsaufgabe Musterlösung
01_Punkte_Linien.gen 01_Punkte_Linien_Lsg.gen
02_Kreise_Flaechen.gen 02_Kreise_Flaechen_Lsg.gen
03_Bilder.gen 03_Bilder_Lsg.gen
04_Masse.gen 04_Masse_Lsg.gen
05_Gitternetze.gen 05_Gitternetze_a_Lsg.gen
05_Gitternetze_b_Lsg.gen
05_Gitternetze_c_Lsg.gen
05_Gitternetze_d_Lsg.gen
05_Gitternetze_e_Lsg.gen
06_geo_Ort.gen 06_geo_Ort_Lsg.gen
07_Graph.gen 07_Graph_a_Lsg.gen
07_Graph_b_Lsg.gen
08_Abbildungen.gen 08_Abbildungen_Lsg.gen
08_Abbildungen_Lsg_modul.gen
09_Buttons.gen 09_Buttons_1_Lsg.gen
09_Buttons_2_Lsg.gen
09_Buttons_3_Lsg.gen
10_Animationen.gen 10_Animationen_1_Lsg.gen
10_Animationen_2_Lsg.gen

 

2.1    Punktobjekte        Syntax im JSP-Generator
 
 
Punktobjekt Syntax Argument(e)
Freier Punkt Point ( xa , ya ) ; (Applet-Koordinaten)
Fester Punkt FixedPoint ( xa , ya ) ; (Applet-Koordinaten)
Mittelpunkt einer Strecke (fest) Midpoint ( ObjRef ) ; (Strecke)
Gleiter (auf seiner „Bahn“ frei) Point on object ( ObjRef , r ) ; (Linienobjekt / Kreisobjekt / Vieleck („Bahn“), Positionswert)
Schnittpunkt (fest) Intersect ( ObjRef1 , ObjRef2 ) ; (2 Linienobjekte)
Intersect1 ( ObjRef1 , ObjRef2 ) ; (Linienobjekt / Kreisobjekt , Kreisobjekt)
Intersect2 ( ObjRef1 , ObjRef2 ) ; (Linienobjekt / Kreisobjekt , Kreisobjekt)
(x;y)-Punkt (fest) PlotXY ( ObjRef1 , ObjRef2 , ObjRef3 ) ; (Maßobjekt y , Gitternetzobjekt , Maßobjekt x)
Einheitspunkt rechts (rechts frei) UnitPoint ( ObjRef , dxa ) ; (Punktobjekt , horizontaler Abstand nach rechts in Pixeln)
Einheitspunkt oben (fest) SquareUnitPoint ( ObjRef ) ; (Einheitspunkt rechts)
Einheitspunkt oben (oben frei) RectangularUnitPoint ( ObjRef , dya ) ; (Einheitspunkt , vertikaler Abstand vom Bezugspunkt nach oben in Pixeln)
Ferndefinierter Punkt (frei) DriverPoint ( xa , ya ) ; (Applet-Koordinaten)

Freie Punkte sind mit der Maus verschiebbar, feste Punkte nicht.
Gleiter sind Punkte, die nur auf einer festgelegten „Bahn“ verschiebbar sind. Ihre Startposition wird mit ihrem zweiten Argument, dem (reellen) Positionswert, festgelegt. Ist die Bahn ein durch 2 Punkte definiertes Linienobjekt, so bedeutet der Positionswert 0 den Ort des zweitgenannten, der Positionswert 1 den Ort des erstgenannten Linienobjekt-Punktes. Geraden, Strecken und Strahlen sind also stets vom zweitgenannten zum erstgenannten Punkt hin orientiert. Ist die Bahn ein anderes Linienobjekt (z. B. eine Parallele), so bedeuten die Positionswerte 0 und 1 die Randpunkte der Bahn im Appletfenster. Ist die Bahn ein Kreisobjekt, so bedeutet der Positionswert das Bogenmaß des Kreisbogens zwischen dem Gleiter und dem rechten Kreispunkt.
Die Koordinaten geplotteter Punkte dürfen nicht direkt, sondern nur mit Hilfe von Maßobjekten angegeben werden.
Beispiel: Der Punkt P(3|-2) wird in einem in Zeile 4 definierten Gitternetzobjekt folgendermaßen definiert:
    {4} {Gitternetzobjekt}
    {5} Parameter(3,0,0,'')[hidden];
    {6} Parameter(-2,0,0,'')[hidden];
    {7} PlotXY(6,4,5))[label('P')];

Die Reihenfolge der Schnittpunkte von Linienobjekten mit Kreisen richtet sich nach der Orientierung des Linienobjekts.
Schneiden sich zwei Kreise, so liegt der erste Schnittpunkt immer links, der zweite rechts von der orientierten Verbindungsgerade zwischen dem Zentrum des erstgenannten und dem des zweitgenannten Kreises.
Rechte Einheitspunkte verstehen sich relativ zu einem vorher definierten Punkt und sind nur auf der rechten horizontalen Halbgeraden, beginnend bei dem vorher definierten Punkt, verschiebbar.
Obere Einheitspunkte verstehen sich relativ zu einem vorher definierten Einheitspunkt und sind entweder nicht (SquareUnitPoint) oder nur auf der oberen vertikalen Halbgeraden, beginnend beim Bezugspunkt des Einheitspunktes, verschiebbar (RectangularUnitPoint).
„Driverpoints“ unterscheiden sich von freien Punkten nur dadurch, dass ihre Bezeichnung und ihr Ort auch von außen, nämlich durch Inter-Applet-Kommunikation definiert werden kann.

 

2.2   Textobjekte        Syntax im JSP-Generator
 
 
Textobjekt Syntax Argument(e)
Festpositionierter Text FixedText ( xa , ya , ' . . . ' ) ; (Applet-Koordinaten , Text)
An Punktobjekt positionierter Text PeggedText ( ObjRef1 , ObjRef2 ) ; (Punktobjekt , FixedText / Maßobjekt)
Textverknüpfung ConcatText ( xa , ya ) ( ObjRef1 , . . . ) ; (Applet-Koordinaten) (n Textobjekte)

Ein Text kann entweder mit FixedText direkt oder auch mit Maßobjekten (s.u.) definiert werden. Im letzteren Fall besteht ein Text aus dem Maß (Wert) eines geometrischen Objekts sowie einem eventuellen Textvorspann oder Textnachspann, der zusammen mit dem Maßobjekt definiert wird.
Wenn der Text während der Applet-Laufzeit mit einem Punkt mitwandern soll, muss er anschließend mit PeggedText an den Punkt geheftet werden. Dies ist auch bei der Beschriftung von Linien- und Kreisoobjekten nötig, da diese nicht direkt, sondern nur mit Hilfe eines auf einem solchen Objekt liegenden (evtl. versteckten) Punktes beschriftet werden können.
Mit ConcatText lassen sich mehrere Texte verknüpfen.

 

2.3   Linienobjekte        Syntax im JSP-Generator
 
 
Linienobjekt Syntax Argument(e)
Strecke Segment ( ObjRef1 , ObjRef2 ) ; (2 Punktobjekte)
Gerade Line ( ObjRef1 , ObjRef2 ) ; (2 Punktobjekte)
Halbgerade Ray ( ObjRef1 , ObjRef2 ) ; (2 Punktobjekte)
Senkrechte Perpendicular ( ObjRef1 , ObjRef2 ) ; (Linienobjekt , Punktobjekt)
Parallele Parallel ( ObjRef1 , ObjRef2 ) ; (Linienobjekt , Punktobjekt)
x-Achse HorizontalAxis ( ObjRef1 , ObjRef2 ) ; (Punktobjekt , Einheitspunkt rechts)
AxisX ( ObjRef ) ; (Gitternetzobjekt)
y-Achse VerticalAxis ( ObjRef1 , ObjRef2 ) ; (Punktobjekt , Einheitspunkt oben)
AxisY ( ObjRef ) ; (Gitternetzobjekt)

Bei den Linienobjekten „Segment“, „Line“ und „Ray“ ist der zweitgenannte Punkt der Startpunkt und der erstgenannte Punkt der Zielpunkt. Diese scheinbar nur für „Ray“ sinnvolle Aussage ist insofern auch für die beiden anderen Linienobjekte bedeutsam, als bei der Gleiterdefinition mit „Point on object“ der Positionswert 0 sich stets auf den Startpunkt und der Positionswert 1 sich auf den Zielpunkt bezieht.

Öffnen Sie die Übungsdatei 01_Punkte_Linien.gen und kopieren Sie sie in die Zwischenablage.
Starten Sie den JSP-Generator, maximieren Sie das Fenster, fügen Sie den kopierten Text in das linke obere Fenster ein und führen Sie die Arbeitsaufträge durch! Setzen Sie dabei Ihren Generator-Code unter den bereits vorhandenen Text!
Speichern Sie am Ende Ihren Code unter demselben Dateinamen in Ihrem Home-Verzeichnis ab!

 

2.4   Kreisobjekte        Syntax im JSP-Generator
 
 
Kreisobjekt Syntax Argument(e)
Kreis Circle ( ObjRef1 , ObjRef2 ) ; (Mittelpunkt , Kreispunkt)
Circle by radius ( ObjRef1 , ObjRef2 ) ; (Mittelpunkt , Strecke)

 
2.5   Flächenobjekte        Syntax im JSP-Generator
 
 
Flächenobjekt Syntax Argument(e)
Vieleck Polygon ( ObjRef1 , ObjRef2 , ObjRef3 , . . . ) ; (n Punktobjekte)
Kreisscheibe Circle interior ( ObjRef ) ; (Kreisobjekt)

Kopieren Sie die Übungsdatei 02_Kreise_Flaechen.gen in den JSP-Generator, führen Sie die Arbeitsaufträge durch und speichern Sie Ihren Code!

 

2.6   Bildobjekte        Syntax im JSP-Generator
 
 
Bildobjekt Syntax Argument(e)
Festpositioniertes Bild Image ( xa , ya , ' . . . ' ) ; (Applet-Koordinaten , Pfad-Zeichenkette)
Pfad relativ zum Pfad von 'jsp4.jar' und ohne '../'!
An Punktobjekt positioniertes Bild ImageOnPoint ( ObjRef , ' . . . ' ) ; (Punktobjekt , Pfad-Zeichenkette)
Pfad relativ zum Pfad von 'jsp4.jar' und ohne '../'!
zwischen 2 Punktobjekten positioniertes Bild ImageBetweenPoints ( ObjRef1 , ObjRef2 , ' . . . ' ) ; (2 Punktobjekte , Pfad-Zeichenkette)
Pfad relativ zum Pfad von 'jsp4.jar' und ohne '../'!

JavaSketchPad erlaubt die Einbindung von Bilddateien in das Appletfenster. Der entweder mittels Applet-Koordinaten oder mittels Punktobjekten anzugebende Ort stellt dann die linke obere Ecke des Bildes dar. Der Pfad der Bilddatei muss immer relativ zum CodeBase-Verzeichnis, also zu dem Verzeichnis, das das JSP-Archiv 'jsp4.jar' enthält, angegeben werden. Außerdem muss die Bilddatei aus Sicherheitsgründen entweder im CodeBase-Verzeichnis oder in einem Unterverzeichnis davon liegen!

Kopieren Sie die Übungsdatei 03_Bilder.gen in den JSP-Generator, führen Sie die Arbeitsaufträge durch und speichern Sie Ihren Code!

 

2.7   Maßobjekte        Syntax im JSP-Generator
 
 
Maßobjekt Syntax Argument(e)
Länge Length ( ObjRef , xa , ya , ' . . . ' ) ; (Strecke , Applet-Koordinaten , Textvorspann)
Winkel Angle ( ObjRef1 , ObjRef2 , ObjRef3 , xa , ya , ' . . . ' ) ; (3 Winkelpunkte , Applet-Koordinaten , Textvorspann)
Vielecksumfang Perimeter ( ObjRef , xa , ya , ' . . . ' ) ; (Vieleck , Applet-Koordinaten , Textvorspann)
Kreisumfang Circumference ( ObjRef , xa , ya , ' . . . ' ) ; (Kreisobjekt / Kreisscheibe , Applet-Koordinaten , Textvorspann)
Radius Radius ( ObjRef , xa , ya , ' . . . ' ) ; (Kreisobjekt / Kreisscheibe , Applet-Koordinaten , Textvorspann)
Fläche Area ( ObjRef , xa , ya , ' . . . ' ) ; (Kreisobjekt / Kreisscheibe / Vieleck , Applet-Koordinaten , Textvorspann)
Steigung Slope ( ObjRef , xa , ya , ' . . . ' ) ; (Linienobjekt , Applet-Koordinaten , Textvorspann)
Distanz Distance ( ObjRef1 , ObjRef2 , xa , ya , ' . . . ' ) ; (Punktobjekt / Linienobjekt , Punktobjekt , Applet-Koordinaten , Textvorspann)
Streckenverhältnis Ratio/Segments ( ObjRef1 , ObjRef2 , xa , ya , ' . . . ' ) ; (2 Strecken , Applet-Koordinaten , Textvorspann)
Ratio/Points ( ObjRef1 , ObjRef2 , ObjRef3 , xa , ya , ' . . . ' ) ; (3 Punktobjekte , Applet-Koordinaten , Textvorspann)
Punktkoordinaten Coordinates ( ObjRef1 , ObjRef2 , xa , ya , ' . . . ' ) ; (Punktobjekt , Gitternetzobjekt , Applet-Koordinaten , Textvorspann)
Berechnung Calculate ( xa , ya , ' . . . ' , ' . . . ' ) ( ObjRef1 , . . . ) ; (Applet-Koordinaten , Textvorspann , Rechenterm in umgekehrter polnischer Notation) (n Maßobjekte)
Ferndefinierter Parameter Parameter ( r , xa , ya , ' . . . ' ) ; (Anfangswert , Applet-Koordinaten , Textvorspann)

Maßobjekte geben eine geometrische Maßzahl aus. Der Ort dieser Ausgabe wird mit den in der Argumentliste enthaltenen Applet-Koordinaten festgelegt. Damit die Maßzahl nicht völlig isoliert erscheint, besteht die Möglichkeit der Eingabe eines Textvorspanns (letztes, bei 'Calculate' vorletztes Argument) sowie des Hinzufügens eines Textnachspanns (s. Objektformatierung: Formatierung von Maß- und Textobjekten weiter unten).
Soll ein geometrisches Objekt mit einer Maßzahl versehen werden, so ist eine Direktplatzierung des Maßobjekts nicht sinnvoll, da sich der Ort des geometrischen Objekts während der Applet-Laufzeit verändern kann. In diesem Fall empfiehlt es sich, das Maßobjekt zu verstecken und seinen Ausgabetext mit 'PeggedText' an einen geeigneten Punkt des geometrischen Objekts zu binden.

Für Berechnungen dient das Maßobjekt „Calculate“, das in seiner ersten (festen) Argumentliste einen Rechenterm enthält. Der Aufbau dieses Terms muss nach der umgekehrten polnischen Notation erfolgen, die ohne Klammern auskommt. Z. B. lautet der Term '' in der umgekehrten polnischen Notation: 'A2-2^B3+2^+@sqrt', d. h. der Operator (+; -; *; /; ^; @sqrt usw.) steht erst nach den Operanden. Sind diese keine Platzhalter, sondern Zahlen, so werden sie durch ein Leerzeichen getrennt: '2²*3.14' wird also zu '2 2^3.14*'. Für die Vorzeichenfunktion, die Betragsfunktion, die Wurzelfunktion, die Rundungsfunktionen sowie die transzendenten Funktionen (trigonometrische Funktionen mit Bogenmaß-Argumenten!) steht das Symbol '@xxxx' zur Verfügung: @sgn_; @abs_; @sqrt; @rond; @trnc; @sin_; @cos_; @tan_; @asin; @acos; @atan; @ln__; @log_. Dem Klammeraffen müssen also 4 Zeichen folgen; ggf. wird mit dem Unterstrich '_' aufgefüllt.
Die Platzhalter A, B, C . . . im Rechenterm beziehen sich auf die erste bzw. zweite bzw. dritte . . . Objektreferenz in der zweiten (variablen) Argumentliste von „Calculate“. Weist die (beispielsweise erste) Objektreferenz in der variablen Argumentliste auf die Koordinaten eines Punktes (Maßobjekt „Coordinates“), so lässt sich mit '#A1' die erste, mit '#A2' die zweite Koordinate des Punktes auslesen. Analog zu den normalen Platzhaltern muss hier 'A' durch 'B' oder 'C' . . . ersetzt werden, wenn es sich erst um die zweite bzw. dritte . . . Objektreferenz in der variablen Argumentliste handelt.

Kopieren Sie die Übungsdatei 04_Masse.gen in den JSP-Generator, führen Sie die Arbeitsaufträge durch und speichern Sie Ihren Code!

 

2.8   Gitternetzobjekte        Syntax im JSP-Generator
 
 
Gitternetzobjekt Syntax Argument(e)
Koordinatensystem (ohne Achsen) Origin&Unit ( ObjRef1 , ObjRef2 ) ; (Zentrum , Punktobjekt)
UnitCircle ( ObjRef ) ; (Kreisobjekt)
Koordinatensystem (vordefinierte Achsen) CoordSysByAxes ( ObjRef1 , ObjRef2 ) ; (HorizontalAxis , VerticalAxis)

Beachten Sie, dass die Konstruktion eines der ersten beiden Gitternetzobjekte nicht automatisch die Achsen einschließt. Diese müssen im Bedarfsfall eigens konstruiert werden (s. Linienobjekte)!
Ein Gitternetzobjekt wird normalerweise nur mit Gitterpunkten dargestellt, die mit der Option hidden ausgeblendet werden können. Sollen statt Gitterpunkten Gitterlinien dargestellt werden, so muss das Gitternetzobjekt mit der Option thick definiert werden. In diesem Fall ist es sinnvoll, die Gitterlinien farblich abzustufen, z. B. mit color(200,200,200).

Kopieren Sie die Übungsdatei 05_Gitternetze.gen in den JSP-Generator, führen Sie die Arbeitsaufträge durch und speichern Sie Ihren Code!

 

2.9   Ortsobjekt        Syntax im JSP-Generator
 
 
Ortsobjekt Syntax Argument(e)
Geometrischer Ort,
auch Funktionsgraph
Locus ( ObjRef1 , ObjRef2 , ObjRef3 , n ) ; (Punkt- / Linienobjekt (Bild) , Freier Punkt (Urbild) , Kreisobjekt / Linienobjekt / Vieleck (Bahn des Urbilds) , Feinheit der Bildkurve)

Funktionsgraphen können mit „Locus“ folgendermaßen dargestellt werden:

    { 1} Point(250,275);                       {Ursprung z. B. bei (250,275) definieren}
    { 2} UnitPoint(1,50);                      {beweglicher Einheitspunkt z. B. 50 Pixel rechts vom Ursprung}
    { 3} RectangularUnitPoint(2,50);           {2. beweglicher Einheitspunkt z. B. 50 Pixel über dem Ursprung}
    { 4} HorizontalAxis(1,2);                  {x-Achse}
    { 5} VerticalAxis(1,3);                    {y-Achse}
    { 6} CoordSysByAxes(4,5);                  {Koordinatensystem}
    { 7} Point on object(4,0.5)[hidden];       {Gleiter auf x-Achse}
    { 8} Ratio/Points(1,2,7,0,0,'')[hidden];   {x-Koordinate des Gleiters}
    { 9} Calculate(0,0,'','A2^')(8)[hidden];   {y = f(x), z. B. y = x2, umgekehrte polnische Notation!}
    {10} PlotXY(9,6,8)[hidden];                {Graphenpunkt (x | f(x))}
    {11} Locus(10,7,4,200);                    {Ortskurve des Graphenpunktes}

Kopieren Sie die Übungsdatei 06_geo_Ort.gen in den JSP-Generator, führen Sie die Arbeitsaufträge durch und speichern Sie Ihren Code!
Setzen Sie Ihre Arbeit mit der Datei 07_Graph.gen fort und speichern Sie wieder Ihren Code!

 

2.10   Abbildungsobjekte        Syntax im JSP-Generator
 
 
Abbildungsobjekt Syntax Argument(e)
Spiegelung Reflection ( ObjRef1 , ObjRef2 ) ; (beliebiges Objekt , Linienobjekt)
Zentrische Streckung Dilation ( ObjRef1 , ObjRef2 , r ) ; (beliebiges Objekt , Zentrum , Streckungsfaktor)
Dilation/SegmentRatio ( ObjRef1 , ObjRef2 , ObjRef3 , ObjRef4 ) ; (beliebiges Objekt , Zentrum , 2 Strecken)
Streckungsfaktor = |1. Strecke| / |2. Strecke|
Dilation/3PtRatio ( ObjRef1 , ObjRef2 , ObjRef3 , ObjRef4 , ObjRef5 ) ; (beliebiges Objekt , Zentrum , 3 Punktobjekte)
Streckungsfaktor = |O3O5| / |O3O4|
Dilation/MarkedRatio ( ObjRef1 , ObjRef2 , ObjRef3 ) ; (beliebiges Objekt , Zentrum , Maßobjekt)
Drehung Rotation ( ObjRef1 , ObjRef2 , r ) ; (beliebiges Objekt , Zentrum , Bogenmaß)
Rotation/MarkedAngle ( ObjRef1 , ObjRef2 , ObjRef3 , ObjRef4 , ObjRef5 ) ; (beliebiges Objekt , Zentrum , 3 Punktobjekte)
Bogenmaß des Winkels O3O4O5
Rotation/MeasuredAngle ( ObjRef1 , ObjRef2 , ObjRef3 ) ; (beliebiges Objekt , Zentrum , Bogenmaß)
Verschiebung Translation ( ObjRef , dxa , dya ) ; (beliebiges Objekt , dxa , dya)
Vektorielle Verschiebung VectorTranslation ( ObjRef1 , ObjRef2 , ObjRef3 ) ; (beliebiges Objekt , 2 Punktobjekte)
Verschiebungsvektor O2O3
Verschiebung mit Polarkoordinaten Translation/FixedAngle/MarkedDistance ( ObjRef1 , ObjRef2 , r ) ; (beliebiges Objekt , Distanzmaß , Bogen)
Translation/MarkedAngle/FixedDistance ( ObjRef1 , ObjRef2 , r ) ; (beliebiges Objekt , Bogenmaß , Distanz)
Translation/MarkedAngle/MarkedDistance ( ObjRef1 , ObjRef2 , ObjRef3 ) ; (beliebiges Objekt , Bogenmaß , Distanzmaß)

Kopieren Sie die Übungsdatei 08_Abbildungen.gen in den JSP-Generator, führen Sie die Arbeitsaufträge durch und speichern Sie Ihren Code!
Schauen Sie sich anschließend die Lösungsdatei 08_Abbildungen_Lsg.gen an und vergleichen Sie sie mit der alternativen Lösungsdatei 08_Abbildungen_Lsg_modul.gen!

 

2.11   Schaltflächenobjekte        Syntax im JSP-Generator
 
 
Schaltflächenobjekt Syntax Argument(e)
Zeigeschaltfläche ShowButton ( xa , ya , ' . . . ' ) ( ObjRef1 , . . . ) ; (Applet-Koordinaten , Text) (n Objekte)
Versteckeschaltfläche HideButton ( xa , ya , ' . . . ' ) ( ObjRef1 , . . . ) ; (Applet-Koordinaten , Text) (n Objekte)
Bewegeschaltfläche MoveButton ( xa , ya , n , ' . . . ' ) ( ObjRef1 , ObjRef2 , . . . ) ; (Applet-Koordinaten , Geschwindigkeit , Text) (n Paare von Ziel- und Quellpunkten)
Animationsschaltfläche AnimateButton ( xa , ya , ' . . . ' ) ( ObjRef1 , ObjRef2 , . . . ) ( v1 , . . . ) ( a1 , . . . ) ( b1 , . . . ) ; (Applet-Koordinaten , Text) (n Paare von Quellpunkten und ihren Bahnen) (n Geschwindig-keitsangaben) (n Werte: Endlosanimation-0 oder Einmalanimation-1) (n Werte: Hin-und-her-Bewegung-0 oder nur in einer Richtung-1)
Multiple Schaltfläche SimultaneousButton ( xa , ya , ' . . . ' ) ( ObjRef1 , . . . ) ; (Applet-Koordinaten , Text) (n Schaltflächenobjekte)

MoveButton erfordert im Gegensatz zu AnimateButton keine „Bahn“ für den/die bewegten Punkt/e. SimultaneousButton simuliert das gleichzeitige Betätigen mehrerer Schaltflächen.
Statt des üblichen Text-Kästchens kann auch ein Bild (*.gif oder *.jpg) als Schaltfläche dienen. In diesem Fall muss die Angabe image('(relativer Bildpfad bzgl. jsp4.jar)') in der Schaltflächenformatierung stehen.

Kopieren Sie die Übungsdatei 09_Buttons.gen in den JSP-Generator, führen Sie die Arbeitsaufträge durch und speichern Sie Ihren Code!
Setzen Sie Ihre Arbeit mit der Datei 10_Animationen.gen fort und speichern Sie wieder Ihren Code!

 

3. Objektformatierung        Syntax im JSP-Generator

Schon im Beispiel-Quellcode haben Sie gesehen, dass zwischen der Konstruktionsanweisung und dem Strichpunkt am Zeilenende im Regelfall noch ein Ausdruck in eckigen Klammern steht. Dieser (stets optionale) Ausdruck enthält Formatierungsanweisungen für das aktuelle Konstruktionsobjekt, die mit Kommata getrennt werden. Fehlt der Formatierungsausdruck, so wird das Objekt in dem von JSP voreingestellten Format dargestellt.

3.1       Allgemeine Formatierungsmöglichkeiten
 
 
Objekteigenschaft Syntax Erläuterung
versteckt hidden

Mit Hilfe der Zeigeschaltfläche „ShowButton“ lässt sich ein verstecktes Objekt wieder sichtbar machen. Mit Hilfe der Zeigeschaltfläche „HideButton“ lässt sich ein sichtbares Objekt wieder verstecken.

Priorität layer (n)

Überlappen sich zwei Objekte, so kann man hiermit festlegen, welches Objekt an der Überlappungsstelle Priorität haben, d. h. das andere überdecken soll. Ein größeres n bedeutet höhere Priorität.

Linienstärke thick

Extradicke Linienstärke. Diese Eigenschaft ist nur für Linien-, Kreis- und entsprechende Abbildungsobjekte anwendbar. Voreingestellt ist die normale Linienstärke von 1 Pixel.
Bei Gitternetzobjekten werden Gitterlinien statt Gitterpunkten dargestellt.

Objektfarbe black
white
red
green
blue
yellow
magenta
cyan
color (rgb)

Mit „color(r, g, b)“ lassen sich beliebige Objektfarben anhand ihres Rotanteils r, ihres Grünanteils g und ihres Blauanteils b definieren. Alle drei Werte sind natürliche Zahlen zwischen 0 und 255.
Voreingestellte Objektfarben: freie Punkte, Linienobjekte, Kreisobjekte, Flächenobjekte. Alle anderen Objekte werden schwarz dargestellt. (Bei den Abbildungsobjekten haben die Bilder dieselbe Farbe wie die ursprünglichen Objekte.)

Spur traced

Ist diese Eigenschaft gesetzt, hinterlässt ein sich bewegendes Objekt eine Spur. Im rechten unteren Eck des Appletfensters erscheint ein rotes Kreuz, durch dessen Anklicken sich die Spur wieder entfernen lässt.


 
3.2 Formatierung von Punktobjekten
 
 
Objekteigenschaft Syntax Erläuterung
Beschriftung per Label label ('...')

Es ist sicher ein Nachteil von JavaSketchPad, dass sich nur Punktobjekte beschriften lassen. Will man andere Objekte beschriften, so muss man auf ihnen erst versteckte Punkte definieren und diese dann beschriften.

Beschriftung per Text PeggedText ( Punktobjekt , FixedText / Maßobjekt ) ;

Diese Anweisung ist keine Formatierungsanweisung, sondern eine Konstruktionsanweisung. Allerdings lässt sich mit ihr ein Punktobjekt mit einem Text ausstatten, für den im Gegensatz zu den bescheidenen Label-Formatierungsmöglichkeiten die ganze Palette der Formatierung von Maß- und Textobjekten (3.3) zur Verfügung steht.

Grafische Gestaltung ImageOnPoint ( Punktobjekt, Pfad der Grafik ) ;

Auch hier handelt es sich nicht um eine Formatierungsanweisung, sondern um eine Konstruktionsanweisung. Trotzdem wird sie hier aufgeführt, weil mit ihr ein Punkt statt mit einer Beschriftung mit einem Bild „geschmückt“ werden kann, dessen Pfad relativ zum Pfad von 'jsp4.jar' angegeben werden muss.


 
3.3 Formatierung von Maß- und Textobjekten
 
 
Objekteigenschaft Syntax Erläuterung
Schriftart font ('...')

Das Argument ist eine verfügbare Java-Schriftart, also 'Helvetica' (voreingestellt) oder 'TimesRoman' oder 'Courier' usw.
Vorsicht: Java-Fonts sind von normalen Fonts wie 'Arial', 'Symbol' usw. zu unterscheiden!

Schriftgröße size (n)

Die natürliche Zahl n ist die Größe der Schrift in Pixeln. Voreingestellt ist n = 10.

Schriftstil plain
bold
italic

Diese Schriftstile bedeuten „schlicht“ (voreingestellt), „fett“ und „kursiv“.

Textnachspann suffix ('...')

Der Textnachspann ist nur bei Maßobjekten anwendbar.
Beispiel: Stehen in Zeile 9 die Koordinaten des Graphenschnittpunktes einer Funktion f mit der x-Achse, so könnte die 10. Konstruktionszeile lauten:
Calculate ( 10 , 20 , 'Die Funktion f hat bei x = ' , '#A1' ) ( 9 ) [ suffix (' eine Nullstelle.') ] ;

Textausrichtung justifyLeft
justifyRight
justifyCenter

Die Textausrichtung bezieht sich auf die Platzierung des Textes relativ zum angegebenen Textausgabepunkt: bei „justifyLeft“ (voreingestellt) liegt dieser Punkt links zum ausgegebenen Text, bei „justifyRight“ rechts und bei „justifyCenter“ in der Mitte des Textes.


 
3.4 Formatierung von Schaltflächenobjekten
 
 
Objekteigenschaft Syntax Erläuterung
Grafische Gestaltung image ('...')

An Stelle des eher schlichten Aussehens einer beschrifteten JSP-Schaltfläche lässt sich ein Bild eigener Wahl als Schaltfläche verwenden, dessen Pfad (relativ zum Pfad von 'jsp4.jar'!) das Argument von „image“ darstellt.

Autostart auto

Mit dieser Eigenschaft gilt ein Schaltflächenobjekt beim Applet-Start automatisch als bereits gedrückt. Dadurch lassen sich z. B. Animationen schon zu Beginn automatisch starten.


 


Weitere Übungsaufgaben mit dem JSP-Generator
 

1. Übungsaufgabe

Es soll ein Applet erstellt werden, das empirisch belegt, dass die Innenwinkelsumme im Dreieck 180º beträgt. Dabei sollen die drei farblich unterschiedlich und mit variablem Radius markierten und beschrifteten Innenwinkel durch Verschiebung bzw. Spiegelung an der Dreiecksspitze so aneinander gereiht sein, dass ihre Summe direkt ersichtlich ist.

Das fertige Produkt könnte dann etwa folgendermaßen aussehen:

Die Innenwinkel α, β und γ des nebenstehenden Dreiecks sind durch Verschiebung bzw. Spiegelung an der Dreiecksspitze zusammengestellt worden.

 

Was fällt Ihnen in Bezug auf die Summe dieser drei Winkel auf?

 

Bestätigen Sie Ihre Vermutung, indem Sie mit der Maus die drei Ecken des Dreiecks verschieben und dabei weiter die an der Dreiecksspitze dargestellte Winkelsumme beobachten!

 

 

Initialisieren Sie das Applet durch Drücken der Taste   ' r '.

 

Applet starten

 

 

Öffnen Sie nun die Datei ‚Uebung1.gen‘, die die Anleitung zur Erstellung des Generator-Codes für dieses Applet enthält. Kopieren Sie den gesamten Text in das linke Fenster des JSP-Generators. Tragen Sie anschließend zeilenweise nach dem Kommentar-Ende */ unter Zuhilfenahme der Code-Hilfe und des Drag-and-drop-Verfahrens die einzelnen Konstruktionsschritte im Generator-Code ein. Beginnen Sie mit dem Hauptprogramm (nicht mit der Funktion). Zur besseren Kontrolle verzichten Sie zunächst darauf, falls gefordert, Objekte zu verstecken, und holen Sie das später nach. Klicken Sie nach jedem Konstruktionsschritt auf die Schaltfläche „Generator → JSP“ und dann auf „Applet starten“ und überzeugen Sie sich von der Fehlerfreiheit Ihrer Eingabe. Die Lösung dieser Aufgabe ist in der Datei ‚Uebung1_Lsg.gen‘ zu finden.

Wenn Sie mit der gesamten Konstruktion fertig sind, geben Sie ihr den Projektnamen „Uebung1“, legenn Sie ggf. die Breite und Höhe des Applets fest und aktivieren Sie vor der Code-Konvertierung „Sichern“ durch einen Mausklick. Im Downloads-Verzeichnis finden Sie nun Ihre erstellte JSP-Applet-Datei „Uebung1.app“. Verschieben Sie diese Datei in das Unterverzeichnis „Uebungen“ zu dieser Anleitung. Damit wird die bereits vorhandene Datei gleichen Namens überschrieben. Öffnen Sie nun die Arbeitsblatt-Vorlage Uebung1.htm und starten Sie durch Klicken auf „Applet starten“ Ihr erstelltes Applet.
(Zum Vergleich: Uebung1_Lsg.htm)

 

2. Übungsaufgabe

Es soll ein Applet mit Koordinatensystem erstellt werden, in dem die (rote) Normalparabel  y = x2  mit einem Parabelpunkt P und der (schwarzen) Parabeltangente durch P dargestellt wird. Der Punkt P soll mit Hilfe eines Schiebers auf einer waagrechten (schwarzen) Schiene im unteren Teil des Applets verstellbar sein. Der Benutzer soll entscheiden können, ob die mitwandernde Tangente eine Spur hinterlässt oder nicht, und auch zwischen beiden Möglichkeiten hin- und herschalten können. Außerdem soll der Schieber animierbar sein, sodass sich dann der Punkt P mitsamt seiner Tangente automatisch bewegt. Dem Applet sollen passende Arbeitsaufträge beigefügt werden.

Das fertige Produkt könnte dann etwa folgendermaßen aussehen:

Verschieben Sie den roten Gleiter auf der unteren grauen Schiene! Was beobachten Sie?

Lesen Sie die Steigungen der Normalparabel an den folgenden Stellen ab:
x = 0;   x = 1;   x = 2;   x = 3;
x = –1;   x = –2;   x = –3.

Stellen Sie die Tangente mit der Steigung   m = 1   ein. Welche Abszisse hat der Berührpunkt?

Welcher Bereich wird von keiner Tangente geschnitten?
Klicken Sie zur Kontrolle auf die Buttons 'Spur' und 'Animation'.
(Den vorigen Zustand stellen Sie durch Anklicken der Buttons 'keine Spur' und 'X' wieder her.)

 

Initialisieren Sie das Applet durch Drücken der Taste   ' r '.

 

Applet starten

 

 

Öffnen Sie diesmal die Datei ‚Uebung2.gen‘ und verfahren Sie wie in Beispiel 1. Die Lösung dieser Aufgabe ist in der Datei ‚Uebung2_Lsg.gen‘ zu finden. Öffnen Sie auch diesmal die zugehörige Arbeitsblatt-Vorlage Uebung2.htm und starten Sie durch Klicken auf „Applet starten“ Ihr erstelltes Applet.
(Zum Vergleich: Uebung2_Lsg.htm)


Modul-Bibliothek zum JSP-Generator
 

1. Markierung eines Winkels

Autor (Name, Dienststelle, evtl. email):
Peter Starfinger, BOS Sozialwesen München, Peter.Starfinger@gmx.de

Aufruf:
MarkAngle(A,S,B,r,n,txt,opt_legs,opt_sector,opt_arc,opt_txt)

Leistung:
Diese Funktion stellt den Winkel ASB dar und beschriftet ihn mit txt (Stil: opt_txt). Sie zeichnet die Schenkel SA and SB (Stil: opt_legs), einen Kreissektor (eigentlich ein Polygon mit n+2 Ecken) mit einem Radius, der der Länge der Strecke r entspricht. Sie färbt den Sektor ein (Stil: opt_sector) und zeichnet den zugehörigen Kreisbogen (Stil: opt_arc). Der voreingestellte Wert für den Parameter 'DirectedAngles' im Aufruf des Applets muss 1 sein.

Quellcode:

function MarkAngle(A,S,B,r,n,txt,opt_legs,opt_sector,opt_arc,opt_txt) {
var acc_sector = ','
var acc_txt = ','
if (opt_sector == '') acc_sector = ''
if (opt_txt == '') acc_txt = ''
var s1 = Ray(A,S,opt_legs)
var s2 = Ray(B,S,opt_legs)
var kS = Circle_by_radius(S,r,'hidden')
var S1 = Intersect2(s1,kS,'hidden')
var S2 = Intersect2(s2,kS,'hidden')
var rad=Angle(A,S,B,10,10,'','hidden')
rad=Calculate(10,30,'',Math.PI+' 2*A+',[rad],'hidden')
rad=Calculate(10,50,'','AA2 '+Math.PI+'*/@trnc2*'+Math.PI+'*-',[rad],'hidden')
var rad_n=Calculate(10,50,'','A'+n+'/',[rad],'hidden')
var S_ = new Array(n+2)
S_[0] = S1
for (var i=1; i<n; i++)
{S_[i] = RotationMeasuredAngle(S_[i-1],S,rad_n,'hidden')
Segment(S_[i],S_[i-1],opt_arc)}
S_[n] = S2
Segment(S_[n],S_[n-1],opt_arc)
S_[n+1] = S
Polygon(S_,'layer(1)'+acc_sector+opt_sector)
var rad_2=Calculate(10,50,'','A2/',[rad],'hidden')
var S_2=RotationMeasuredAngle(S1,S,rad_2,'hidden')
var M=Dilation(S_2,S,0.6,'hidden')
var T = FixedText(0,0,txt,'hidden')
PeggedText(M,T,'justifyCenter'+acc_txt+opt_txt)
}