Jörg Kliemann, Höhere landwirtschaftliche Bundeslehranstalt St. Florian
 
Ein Funktionsplotter- selbst gebaut

Mathematische Inhalte, Lehrplanbezug:
Funktionen, Funktionsgraphen

Kurzzusammenfassung:
Darstellung von Funktionsgraphen auf Webseiten mit einem kleinen JavaScript-Programm und der Verwendung von Stilvorlagen.

Mediales Umfeld:
PC, MS Internet Explorer 5 (siehe auch letztes Kapitel), Dateien von der AMMU-Homepage: plot.htm, black.gif , red.gif, grau.gif

1. So wird das Ergebnis aussehen

Ergänzend zu meinen bisherigen Beiträgen "Web-Browser als Arbeitsoberfläche für den Mathematikunterricht" möchte ich dieses Mal einen Funktionsplotter demonstrieren, der mit einem einfachen JavaScript-Programm und so genannten Stilvorlagen arbeitet.
 
 



 






Funktionsplotter für Web-Browser gibt es schon Dutzende im Internet, diese sind aber mit Hilfe von Java-Applets realisiert. Applets sind fertige, kompilierte Java-Programme, bei denen der Quelltext nicht mehr erkennbar ist.

Mir kommt es aber darauf an, genau diesen Quelltext der zu Grunde liegenden Prozeduren sichtbar zu machen. Dazu kommt, dass Java-Programmierung nicht jedens Sache ist. Vielleicht ist dieser Beitrag auch ein Anlass, dass Sie – sofern Sie das nicht ohnehin schon getan haben – sich mit der Programmiersprache JavaScript beschäftigen.

Die Prozeduren sind mit Erläuterungen versehen, sodass ein Nachvollziehen der einzelnen Schritte leicht möglich ist.

Der Kern der Darstellung von Funktionsgraphen ist die Umrechnung vom Benutzer-Koordinatensystem ins Fenster-Koordinatensystem.

Benutzer-Koordinatensystem:
 
 



 






Fenster-Koordinatensystem:
 
 



 






Die Umrechnung ergibt sich aus der Gegenüberstellung der jeweiligen Koordinaten und einer linearen Interpolation zwischen beiden:
 
 




x - xmin = (xmax - xmin)/(199 - 0) * (i - 0) bzw. i - 0 = (199 - 0)/(xmax - xmin) * (x - xmin)


y - ymax = (ymin - xmax)/(199 - 0) * (j - 0) bzw. j - 0 = (199 - 0)/(ymin - ymax) * (y - ymax)


 






2. Erstellen des Eingabeformulars

Ich bevorzuge zur Erstellung von Web-Seiten inklusive ihrer Programmierung das Microsoft Programm Frontpage Express, das bei einer vollständigen Installation des MS Internet Explorers mit installiert wird.

Ich erläutere im Folgenden Schritt für die Schritt die Erstellung des HTML-Dokumentes mit Frontpage Express. Sollten Sie sich diese Arbeit nicht antun wollen, verwenden Sie einfach das fertige HTML-Dokument plot.htm von der AMMU-Homepage – Link Aussendungen.

Öffnen Sie Frontpage Express (meist in der Programmgruppe Internet Explorer).

Speichern Sie zu aller erst das noch leere Dokument: Menüpunkt Datei/Speichern – Schaltfläche [Als Datei] – plot.htm – [Speichern]

Mit diesem Trick umgehen Sie alle Schwierigkeiten, die sich mit den Pfadangaben bei Bildern und Links ergeben könnten, da mit der Benennung des Stammdokumentes alle Relationen zu externen Dateien eindeutig festgelegt werden.

Fügen Sie mit dem Menüpunkt Einfügen/Formularfeld/Einzeiliges_Textfeld ein Textfeld ein und bearbeiten Sie es nach einem Doppelklick auf das Textfeld
 
 



 






Setzen Sie die Beschriftung vor das Textfeld.

Erweitern Sie nun das Formular nach folgendem Muster und vergeben Sie die angegebenen Namen
 
 



 






Fügen Sie mit dem Menüpunkt Einfügen/Formularfeld/Schaltfläche eine Schaltfläche ein und bearbeiten Sie sie nach einem Doppelklick auf die Schaltfläche.
 
 



 






Klicken Sie die Schaltfläche [Erweitert] und fügen sie mit [Hinzufügen] ein weiteres Attribut hinzu:
 
 



 






Das bedeutet, dass später bei Klick auf diese Schaltfläche die Prozedur graph() gestartet wird.

Abschließend benennen Sie noch das gesamte Formular, indem Sie irgendwo im Formularbereich die rechte Maustaste drücken und im Kontextmenü den Menüpunkt Formulareigenschaften klicken und im Feld Formularname den Namen parameter eingeben.

3. Einfügen des Zeichenhintergrundes

Mit dem Menüpunkt Einfügen/Bild setzen Sie das Bild (eine Graphik mit 200*200 Pixel, Dateiname grau.gif) an eine beliebige Stelle des Dokuments.
Klicken Sie das Bild mit der rechten Maustaste und klicken Sie im Kontextmenü den Menüpunkt Bildeigenschaften. Fügen Sie dem Bild mit den Schaltflächen [Erweitert] dann [Hinzufügen] weitere Attribute hinzu:
Name: id
Wert: hg
Und noch einmal die Schaltfläche [Hinzufügen] klicken:
Name: style
Wert: position:absolute;visible:show;left:100px;top:200px;z-index:1

Damit bekommt das Hintergrund-Bild für die Zeichenfläche die Bezeichnung hg und folgende Stildefinition:
Sichtbar, linke obere Ecke bei den absoluten Fensterkoordinaten (100 Pixel, 200 Pixel) mit dem Koordinatenursprung in der linken oberen Fensterecke.
Der z-Index gibt die Position in der Reihenfolge an, in der die Objekte des Dokuments einander überdeckend auf den Bildschirm gelegt werden.

Beachten Sie, dass es egal ist an welcher Stelle Sie das Bild ins Dokument einfügen, da es durch die Stildefinition ohnehin an die richtige Stelle verschoben wird.

4. Programmierung

Der Menüpunkt Einfügen/Skript läßt Sie vorzugsweise am Beginn des Dokuments in einem Fenster (Markierung auf ¤ JavaScript) folgende Prozeduren eingeben:

// -----------------------------------------------------------------------------------------------------------------------
// Kommentare beginnen mit einem Doppelschrägstrich
// und müssen nicht eingetippt werden, sie sind hier auch in einer anderen Schriftart gesetzt
// -----------------------------------------------------------------------------------------------------------------------
// -----------------------------------------------------------------------------------------------------------------------
// Prozedur (=function) die ein entsprechendes Objekt an die Position (x,y) setzt
// -----------------------------------------------------------------------------------------------------------------------

function moveto(objectId,x,y) {
  objectId.style.pixelLeft = x + document.body.scrollLeft
  objectId.style.pixelTop = y + document.body.scrollTop
}
// -----------------------------------------------------------------------------------------------------------------------
// Prozedur die den Graphen der Funktionen zeichnet
// -----------------------------------------------------------------------------------------------------------------------
function graph() {
  var x = 0
  var y = 0
  var j = 0
// Die Inhalte der Eingabefelder im Formular parameter werden übernommen
// Die Multiplikation mit 1 wandelt den Inhalt der Textfelder in Zahlen um
  var xmin = document.parameter.xmin.value*1
  var xmax = document.parameter.xmax.value*1
  var ymin = document.parameter.ymin.value*1
  var ymax = document.parameter.ymax.value*1
  var term1 = document.parameter.term1.value
  var term2 = document.parameter.term2.value
  var dx = document.parameter.dx.value*1
  var dy = document.parameter.dy.value*1
// Die Koeffizienten für die Umrechnung zwischen Benutzer- und Fensterkoordinaten werden berechnet
  var kx = (xmax-xmin)/199
  var ky = (ymin-ymax)/199
// Das Objekt hg (der Zeichenhintergrund) wird an die Position (dx,dy) gesetzt.

moveto(hg,dx,dy)

// Weiterhin werden mathematische Funktionen dem Objekt Math entnommen
// Das sind z.B. sqrt, pow, exp, ln, sin, cos, tan, acos, asin, atan, round, ...
// Man erspart sich so die Schreibweise Math.sqrt, Math.pow, Math.exp, ...

  with (Math) {
// Für jeden der 200 Zeichenpunkte mit den Fensterkoordinaten (i,j) wird ...
    for (var i=0; i<=199; i++) {
// ... für jede Benutzerkoordinate x ...
      x = kx*i+xmin
// ... diese in den Funktionsterm eingesetzt, der Funktionswert berechnet, ...
      y = eval(term1)
// ...die Benutzerkoordinate y auf die Zeichenfläche begrenzt, ...
      y = min(y,ymax) 
      y = max(y,ymin)
// ... die Fensterkoordinate j berechnet ...
      j = round((y-ymax)/ky)
// ... und der Punkt an die Fenster-Position (i,j) verschoben.
      eval("moveto(black"+i+",i+dx,j+dy)")
    }
  }
// Die Zeichenpunkte werden weiter unten über eine Stildefinition mit black1, black2, black3, ... bezeichnet.
// Für den ersten Zeichenpunkt müsste die Anweisung, ihn an die Stelle (1,j) zu verschieben, lauten:
// moveto(black1,1+dx,j+dy)
// Für den zweiten Zeichenpunkt müsste die Anweisung, ihn an die Stelle (2,j) zu verschieben, lauten:
// moveto(black2,2+dx,j+dy)
// Für den dritten Zeichenpunkt müsste die Anweisung, ihn an die Stelle (3,j) zu verschieben, lauten:
// moveto(black3,3+dx,j+dy)
// Und so weiter bis zu: moveto(black199,199+dx,j+dy)
// Da nun die Objekte nicht mit einem Index benannt werden können, sondern der Index direkt in den
// Namen des Objektes eingeht, kann man sich nur wie folgt behelfen:
// Man setzt die moveto-Anweisung als Textkonstante aus einzelnen Teilen zusammen
// "moveto(black" + i + ",i+dx, j+dy)"
// und lässt diesen Text über die eval-Funktion auswerten (=ausführen).
// Bei der Zusammensetzung des Textes mit dem Operator + aus den drei Teilen
// "moveto(black" und i und ",i+dx, j+dy)" wird die numerische Variable i automatisch
// in einen Text umgewandelt
//
// Das gleiche wie oben passiert nun mit dem zweiten Funktionsterm
  with (Math) { 
    for (var i=0; i<=199; i++) {
      x = kx*i+xmin
      y = eval(term2) ; y = min(y,ymax) ; y = max(y,ymin)
      j = round((y-ymax)/ky)
      eval("moveto(red"+i+",i+dx,j+dy)")
    }
  }
}
// -----------------------------------------------------------------------------------------------------------------------
// Definition der 200 schwarzen und 200 roten Zeichenpunkte (black.gif, red.gif)
// -----------------------------------------------------------------------------------------------------------------------
for (var i=0 ; i<=199 ; i++) {
  document.write("<img src='black.gif' width='1' height='1' id='black" + i +
      "' style='position:absolute; visible:show; left:1px; top:1px; z-index:2'>")
  document.write("<img src='red.gif' width='1' height='1' id='red" + i +
      "' style='position:absolute; visible:show; left:1px; top:1px; z-index:2'>")
}
// Jeder dieser insgesamt 400 Zeichenpunkte ist ein Bild mit dem Ausmaß 1*1 Pixel mit der
// HTML-Definiton: <img src="black.gif" width="1" height="1"> bzw.
// <img src="red.gif" width="1" height="1">
//
// Jeder dieser insgesamt 400 Zeichenpunkte müßte einzeln als Bild in das HTML-Dokument eingefügt
// werden und anschließend mit den weiteren Attributen für die Stildefinition
// id = "black1", style="position:absolute;visible:show;left:1px,top:1px;z-index:2" bzw.
// id = "black2", style="position:absolute;visible:show;left:1px,top:1px;z-index:2" bzw.
// id = "black3", style="position:absolute;visible:show;left:1px,top:1px;z-index:2" bis
// id = "red199", style="position:absolute;visible:show;left:1px,top:1px;z-index:2" versehen werden.
//
// Um das zu automatisieren, werden die Bild- und Stildefinitionen in einer Schleife über die Prozedur
// document.write in das Dokument geschrieben.
// Die 400 Bilder werden dabei beinahe unsichtbar alle an die Stelle (1,1) im Fenster gesetzt.
// Beachten Sie, dass die Verschachtelung der Anführungszeichen über doppelte und einfache
// Anführungszeichen gelöst wird.
// P.S.: Der Operator ++ erhöht die betroffenen Variable um 1

Quitieren Sie die Eingabe des Skript-Textes mit der Schaltfläche [OK].
Speichern Sie zum Abschluss das Dokument (Menüpunkt Datei/Speichern – [Als Datei] – ...)

Öffnen Sie den Internet Explorer und laden Sie mit dem Menüpunkt Datei/Öffnen – Schaltfläche [Durchsuchen] – plot.htm – [Öffnen] – [OK] das HTML-Dokument.
Sollten beim Ablauf des Dokuments Fehler auftreten, so wechseln Sie zum (noch offenen) Frontpage Express, korrigieren dort den Fehler, speichern erneut ab, wechseln zum Internet Explorer und aktualisieren (Funktionstaste [F5]) das Dokument bzw. laden es neu.

5. Schlussbemerkungen

Diese Webseite wird durch die verwendeten Stilvorlagen nicht von allen Web-Browsern angezeigt. Die beschriebene Web-Seite funktioniert klaglos mit dem MS Internet Explorer 5.
Die Version 4 des Internet Explorer kann die große Anzahl (insgesamt 401) an Objekten mit Stilvorlagen nicht so schnell abhandeln, es kann daher zu Verzögerungen beim ersten Aufbau des Dokuments im Browser-Fenster kommen, im Task-Manager von Windows kann minutenlang "keine Rückmeldung" angezeigt werden, hier braucht es nur ein wenig Geduld.
Für die Darstellung der Stilvorlagen im Netscape Navigator muss allerdings die Prozedur moveto umgeschrieben werden, da Netscape und Microsoft die Sprachdefinition von JavaScript für die Behandlung von Objekten des HTML-Dokuments wieder auseinander entwickelt haben.

Die entsprechenden Anpassungen finden auf der Homepage (plot.htm)