Schriftzug: Fachbereich Mathematik 
  UHH > Fakultäten > MIN-Fakultät > Mathematik > Java-Kurs   STiNE |  KUS-Portal |  Sitemap Suchen Hilfe there is no english version of this page  
 Index   Buch   DOC   API  Kompaktkurs JAVA   
 <<    <     >    >>  Bock / Löbnitz / Werner

9. Zeichnen von (mehreren) Funktionsgraphen

Die folgenden Grafikprogramme dienen dem Zeichnen von (mehreren) Graphen von reellen Funktionen, von parametrisierten ebenen Kurven und eines Punktfeldes (etwa die Interpolationspunkte) in der Ebene. Sie wurden von Jolanta Bajorska im Jahre 1999 erstellt und sollen als "Black Box" verwendet werden.

Sie sollten in ein eigenes (Unter-)Verzeichnis heruntergeladen und entpackt werden (blackbox.zip), ganz entsprechend wie die Java-Programme.

Eine "Bedienungsanleitung" schließt sich an.


9.1 Übersicht über die Black-Box-Programme

Die folgenden Dateien stammen dem eben geladenen und entpackten Archiv "blackbox.zip" und enthalten die Java-Klassen (Quellprogramme), die von einer Applikationsklasse benutzt werden, wenn gezeichnet werden soll. Sie können nach Drücken der rechten Maustaste und Auswahl von Save Link as einzeln herunter geladen werden. Ich empfehle, alle folgenden Dateien erst einmal in ein gesondertes Verzeichnis zu schreiben, damit die Übersicht nicht verloren geht. (Nicht nötig, wenn Sie oben das Archiv geladen und entpackt haben!)

Zunächst die drei (z.T. abstrakten) Klassen Funktion.java (diese Klasse ist wesentlich maechtiger als die bisher besprochenen Klassen Funktion1, Funktion2, ...), ParamKurve.java, InterpolPunkte.java, mit deren instanziierten (Unter-)Klassen die entprechenden grafischen Objekte erzeugt werden können. In diesen Klassen werden die folgenden Klassen, bzw. Interfaces verwendet: Grafik.java, Bild.java, MinMax.java, Darstellbar.java.

Die Klasse GIFEncoder.java enthält mehrere technischen Klassen, die erst nach der Compilierung sichtbar werden. Ferner gibt es noch SpeichernDialog.java.

Es gibt die Applikationsklasse Funktionendarstellung.java zum Testen. Sie verwendet die folgenden drei Unterklassen der Klasse Funktion Sinus.java, Wurzel.java, Quadrat.java, die beiden Unterklassen Ellipse.java, Gerade.java der Klasse ParamKurve; ferner wird ein Objekt der Klasse InterpolPunkte in der Applikationsklasse selbst erzeugt.

Um alle grafischen Objekte in einem Fenster zu zeichnen, wird die Klasse Liste in Liste.java benötigt. Als erstes sollte man den Test durch Compilierung von Funktionendarstellung.java machen. Dann sollten sich eine Fülle von neuen *.class-Dateien bilden. Die Ausführung von Funktionendarstellung.class sollte dann zu folgendem Bild führen:

diverse Graphen


Um eigene Zeichnungen nach dem folgenden Muster zu erstellen, empfehle ich, "nur" die folgenden 16 *.class-Dateien in das aktuelle Verzeichnis zu kopieren:

Bild.class, BitFile.class, BitUtils.class, Darstellbar.class, Funktion.class, GIFEncoder.class, Grafik.class, ImageDescriptor.class, InterpolPunkte.class, Liste.class, LZWCompressor.class, LZWStringTable.class, MinMax.class, ParamKurve.class, ScreenDescriptor.class, SpeichernDialog.class

Man kann aber auch ein neues Verzeichnis, z.B. unter Windows namens EigeneKlassen als Unterverzeichnis von D:\ erstellen, diese 16 Klassen dort hinein kopieren und mit dem Kommando SET CLASSPATH=.;D:\EigeneKlassen den Javacompiler zwingen, in diesem und dem aktuellen Verzeichnis nach Klassen zu suchen.


9.2 Zeichnen des Graphen einer Funktion

Dies ist außerordentlich einfach. Man erstellt eine Unterklasse der Klasse Funktion, die die Abbildungsvorschrift in Gestalt der Methode getY() enthält. Der Konstruktor ermöglicht die Übergabe des Intervalls, das der Zeichnung zu Grunde liegt und kann einen Namen festsetzen, der in der Zeichnung erscheinen wird.

Wir nehmen als Beispiel die Wurzel-Funktion:

 public class Wurzel extends Funktion{
   public Wurzel(double xMin, double xMax){
     super(xMin,xMax);
     Name="Sqrt(x)";
   }

   public double getY(double x){
     return Math.sqrt(x); //negative Eingaben werden nicht abgefangen
   }
 }//Ende Wurzel

Dann ist eine Applikationsklasse (wie Funktionendarstellung, aber viel einfacher) zu erstellen, in der ein Objekt der eben geschaffenen Unterklasse instanziert wird. Hier legt man sich auf das Intervall fest:

 public class ZeichneWurzel{
   public static void main(String[] args){
     Wurzel f=new Wurzel(0,1); //Intervall ist also [0,1]
     Grafik g= new Grafik(f);
   }//Ende main()
 }//Ende ZeichneWurzel

Die Initialisierung des Grafik-Objektes g, dem die Funktion f übergeben wird, bewirkt, dass sich ein Grafikfenster mit dem gesuchten Graphen von f öffnet. Interakiv kann danach nur noch die Auflösung geändert werden, etwa um durch Erhöhung ein "glatteres" Bild zu erhalten (wenn die Voreinstellung nicht ausreicht).

Danach kann man das Bild als *.gif-File abspeichern, wenn man den Menupunkt Grafik anklickt. Die Endung .gif wird automatisch angefügt. Mit anderen Programmen kann man danach mit Hilfe dieses gif-Files die Grafik ausdrucken oder in einen Text einfügen, z.B. in dieses html-Dokument.

Bei dieser Anwendung muss man neben der Klasse Funktion nur noch die Klasse Grafik namentlich kennen. Alle anderen Klassen arbeiten unbemerkt im Hintergrund.


9.3 Zeichnen zweier Graphen mit ausgezeichneten Punkten

Diese Anwendung kommt bei der numerischen Interpolation zum Tragen, wenn man eine zu interpolierende Funktion, eine Interpolationsfunktion und Interpolationspunkte in der Ebene zeichnen will.

Als Beispiel sei die zu interpolierende Funktion wieder die Wurzel-Funktion, die drei Interpolationspunkte seien (0,0),(0.49,0.7) und (1,1), die Interpolationsfunktion sei das zugehörige Interpolationspolynom vom Grade 2. Das Interpolationspolynom werde als Objekt einer Unterklasse namens SpPol von Funktion definiert. Die Applikationsklasse hat dann das folgende Aussehen:

 /**
 Graphische Darstellung einer zu interpolierenden Funktion, einer
 Interpolationsfunktion und von Interpolationspunkten
 */
 public class ZeichneInterp{
   public static void main(String[] args){
     Liste fr=new Liste();
     Wurzel f1=new Wurzel(0,1);
     fr.addDarstellbar(f1);

     SpPol f2=new SpPol(0,1);
     fr.addDarstellbar(f2);

     double kX[]={0, 0.49, 1};
     double kY[]={0, 0.7 , 1};
     InterpolPunkte f3=new InterpolPunkte(kX,kY);
     fr.addDarstellbar(f3);

     Grafik g=new Grafik(fr);
   }
 }

Hier werden direkt neben den Klassen Funktion, Grafik die Klassen InterpolPunkte, Liste, letztere mit ihrer Methode addDarstellbar() verwendet.

Die Grafik sieht dann so aus:
Funktion sqrt(x)

Da wir es mit drei Objekten f1, f2, f3 zu tun haben, aus der die Grafik bestehen soll, ist das Erzeugen einer Grafik etwas komplexer als im ersten Beispiel einer Funktion. Die drei Objekte werden mittels einer Methode addDarstellba() einer Liste namens fr hinzugefügt und dann dem Konstruktor des Grafikobjekts übergeben.

Der Vollständigkeit gebe ich auch die Klasse SpPol.java an:

 class SpPol extends Funktion{
   public SpPol(double xMin, double xMax){
     super(xMin,xMax);
     Name="Interpolationspolynom";
   }
   public double getY(double x){
     double y=x-0.84033614*x*(x-1) ;
     return y;
   }
 }

9.4 Zeichnen einer parametrisierten Kurve

Hier muss eine Unterklasse der Klasse ParamKurve gebildet werden, z.B. eine Ellipse:

 public class Ellipse extends ParamKurve{
   public Ellipse(double min, double max){
     super(min, max);
     Name="x=2*cos(t), y=4*sin(t)";
   }

   public double getX(double t)
     {return 2*Math.cos(t);}

   public double getY(double t)
     {return 4*Math.sin(t);}
 }

Dann kann die folgende sehr kurze Applikationsklasse benutzt werden:

 public class ZeichneEllipse{
   public static void main(String[] args){
     Ellipse f1=new Ellipse(0,2*Math.PI);
     Grafik g=new Grafik(f1);
   }
 }

9.5 Die wichtigsten Daten und Methoden zum Zeichnen

Hier stelle ich alle diejenigen (öffentlichen!) Daten und Methoden dar, die ein Benutzer dieser Black-Box-Klassen zum Zeichnen kennen sollte (siehe auch: javadoc).

  • Funktion
    • double xMin, double xMax (Definitionsbereich)
    • Funktion() (1. Konstruktor)
    • Funktion(double xMin, double xMax) (2. Konstruktor)
    • String Name (Name der Funktion, wird als Überschrift im Grafikfenster verwendet)
    • void setName(String name) (Methode zum Setzen des Namens)
    • abstract double getY(double x) (Abbildungsvorschrift, muss in jeder Unterklasse implementiert werden)
    • void setIntervall(double xMin, double xMax) (nachträgliches Definieren des x-Bereichs des Grafikfensters)
  • InterpolPunkte
    • InterpolPunkte(double[] x, double[] y) (Konstruktor)
    • String Name, void setName(String name) (wie bei Funktion)
  • ParamKurve
    • ParamKurve(double a, double b) (Konstruktor)
    • abstract double getX(double t), abstract double getY(double t) (Die beiden Parametrisierungen, t in [a,b])
    • Name String, void setName(String name) (wie bei Funktion)
  • Liste
    • Liste() (Konstruktor)
    • void addDarstellbar(Darstellbar f) (eine Methode, die ein grafisches Objekt f zur Liste hinzufügt. Dabei ist f ein Objekt der Klasse Funktion, der Klasse InterpolPunkte oder der Klasse ParamKurve, die alle das Interface Darstellbar implentieren.
  • Grafik
    • Grafik(Liste fr) (1. Konstruktor)
    • Grafik(Darstellbar f) (2.Konstruktor, wobei f ein Grafikobjekt der Klasse Funktion, InterpolPunkt, ParamKurve ist.)


Weiter mit 10. Einführung in Grafik.


 Index   Buch   DOC   API  Kompaktkurs JAVA   
 <<    <     >    >>  Bock / Löbnitz / Werner

  Seitenanfang  Impressum 2009-03-14, wwwmath (WL)