Funktionsplotter (SS00 Aufgabe 1)

Beleg WS99/SS00, Studium, Home

Gleich ein Hinweis vorneweg: Das Applet, so wie es jetzt ist, ist schon lange nicht mehr die Version, die ich zur Belegabnahme abgegeben habe. Ich habe inzwischen einiges verändert, die Beleg-Version konnte z.B. nur eine Funktion darstellen, und es waren nur die bekanntesten Standardfunktionen implementiert. Auch der ganze Kram mit Parametern, Klammerungsstufen etc. kam erst später. Ich bin auf dem Weg, den Plotter in eine eierlegende Wollmilchsau zu verwandeln *g*.
Das Applet-Tag wird nicht verstanden! Klicke auf den Button, um das Darstellungsfenster zu öffnen. (Die Größe des Fensters ist für eine Bildschirmauflösung von mindestens 800x600 ausgelegt, du kannst sie aber ändern.) Von dort aus kommst du mit "Einstellungen" in das Einstellungsfenster. Du kannst beide Fenster nebeneinander offen haben.

Nun die Erklärungen zu den einzelnen Feldern im Einstellungsfenster, leider noch völlig ungeordnet:
Wenn du auf Setzen klickst, werden alle Formeln und alle Einstellungen übernommen. Beachte: Wenn du den Darstellungsbereich mit der Maus verschoben oder skaliert hast, musst du die Bereichswerte erst mit Lesen ins Einstellungsfenster übernehmen, wenn du nämlich auf Setzen klickst, wird der Bereich auf die im Einstellungsfenster angegebenen Werte eingestellt.
Klickst du auf Lesen, werden die aktuellen Werte in das Einstellungsfenster kopiert, die Formeln werden dabei je nach Einstellung in Infix- oder Postfix-Notation angezeigt.
Die Checkbox hinter einer Formel gibt an, ob die Funktion dargestellt werden soll oder nicht.
Mehr Einstellungsmöglichkeiten erhälst du, wenn du auf Mehr klickst. Ein nochmaliger Klick auf diesen Button versteckt die zusätzlichen Einstellungen wieder.
Um mehr als eine Funktion darzustellen, wähle aus der Choicebox die gewünschte Anzahl von Funktionen aus. Dann kannst du mehrere Funktionen eingeben. Jede dazustellende Funktion muss aktiviert werden mit der Checkbox hinter der Eingabezeile oder indem du in einem Formel-Feld ENTER drückst.
Wenn die Checkbox Postfix ausgeschaltet ist, wird die Formel in normaler Notation (Infix) eingegeben. Ist Postfix aktiviert, muss in sie Postfix-Notation angegeben werden, mit mindestens einem Leerzeichen zwischen den Operanden und Operatoren.
Die Parameter p und q sind beliebige feste Zahlen, die in den Formeln verwendet werden können.

Im Darstellungsbereich ist der Mauscursor ein Pfeilkreuz oder eine Hand. Mit einem Klick der rechten Maustaste wird zwischen den beiden Modi umgeschaltet. Im "Kreuz-Modus" kann man durch Ziehen mit gedrückter linker Maustaste den angezeigten Bereich verschieben. Im "Hand-Modus" wird der Bereich beim "Drag-and-Drop" skaliert, und zwar unabhängig für beide Achsen. Das Zentrum der Skalierung ist der Punkt, an dem die Maus beim Anklicken war.

Zahlen sind vom Typ double und können mit oder ohne Dezimalpunkt angegeben werden. Es funktioniert auch die e-Darstellung (z.B. 2.5e3 = 2500).
Erlaubte Operatoren sind:
zwei Operanden
+Addition
-Subtraktion
*Multiplikation
/Division
\Division mit Rundung in Richtung Null
%Rest bei Division mit Rundung in Richtung Null
^Potenz (Wenn du das Zeichen nicht eingeben kannst, dann kannst du auf die Funktionen pow() und root() ausweichen.)
ein Operand
-Vorzeichenumkehr in Infix
_Vorzeichenumkehr in Postfix

Erlaubte Konstanten und Variablen sind:
xdie Variable x
pParameter p
qParameter q
iSchleifenzaehler fuer sum und sum3
pidie Kreiskonstante pi=3.141592653589793
edie Eulersche Konstante e=2.718281828459045

Erlaubte Funktionen sind:
(Zusätzliche Namen für die gleiche Funktion stehen in Klammern)

Funktionen ohne Parameter: (die runden Funktionsklammern muessen trotzdem gesetzt werden, z.B. rnd() )
rndGleichverteilte Zufallszahl in [0..1)
Es wird bei jedem Aufruf eine neue Zahl produziert (also auch beim Neuzeichnen)
rndnStandardnormalverteilte Zufallszahl
Es wird bei jedem Aufruf eine neue Zahl produziert (also auch beim Neuzeichnen)

Funktionen mit einen Parameter: (der wird wie üblich in runden Klammern angegeben, z.B. sin(x) )
Winkelfunktionen
sin, asin (=arcsin)Sinus, Arcussinus
cos, acos (=arccos)Cosinus, Arcuscosinus
tan, atan (=arctan)Tangens, Arcustangens
cot, acot (=arccot)Cotangens, Arcuscotangens
sinh, arsinh(Area) Sinus hyperbolicus
cosh, arcosh(Area) Cosinus hyperbolicus
tanh, artanh(Area) Tangens hyperbolicus
coth, arcoth(Area) Cotangens hyperbolicus
andere
expExponentialfunktion: exp(wert) = e^wert
lnnatürlicher Logarithmus
lg (=log10)Zehnerlogarithmus
ld (=log2)Zweierlogarithmus
sqrQuadrat
sqrtQuadratwurzel
absAbsolutbetrag
sgnVorzeichen
intganzzahliger Anteil, Rundung zur nächstkleineren ganzen Zahl
fracgebrochener Anteil, Differenz zur nächstkleineren ganzen Zahl
invKehrwert: inv(wert) = 1/wert
fac (=fak)Fakultät fac(x)=int(x)!
gammaGammafunktion (zwischen Hundertsteln wird linear interpoliert)

Funktionen mit zwei oder mehr Parametern: (werden durch Komma getrennt, z.B. pow(x,3) )
pow(wert, exponent)wert^exponent
root(wert, r)wert^(1/r) = r-te Wurzel von wert
ungerade ganze Wurzeln werden auch aus negativen Zahlen gezogen, z.B. root(x,3)
log(basis, wert)Logarithmus von wert zur Basis basis
mpow(wert, index)index-fache Potenz: mpow(x,3) = x^(x^x)
min(wert1, wert2)Minimum von wert1 und wert2
max(wert1, wert2)Maximum von wert1 und wert2
sum(ende, ausdruck)Summe für i=1...ende von ausdruck
Der Summationsindex ist die neue Variable i (die ausserhalb von Schleifen den Wert 0 hat). Bei geschachtelten Schleifen bezeichnet i im ersten Argument (ende) den Schleifenzaehler der äusseren Schleife, im zweiten Argument (ausdruck) den Schleifenzaehler der inneren Schleife.
sum3(start, ende, ausdruck)Summe für i=start...ende von ausdruck
Der Summationsindex ist die neue Variable i (die ausserhalb von Schleifen den Wert 0 hat). Bei geschachtelten Schleifen bezeichnet i im ersten und zweiten Argument (start und ende) den Schleifenzaehler der äusseren Schleife, im letzten Argument (ausdruck) den Schleifenzaehler der inneren Schleife.
if(bedingung, wert1, wert2)Liefert wert1, wenn bedingung>0, sonst wert2
Es wird nur der Teilausdruck berechnet, der zurueckgegeben wird.

Source
PlotApplet.java
PlotFrame.java
GraphFlaeche.java
Graph.java
Line.java
NodeBase.java
FuncNode.java
NodeConstructor.java
NodeConstructorHelp.java
Zoomer.java
GraphZoomer.java
DialogFenster.java
Source (34kb)
Kompiliert (51kb)

Für Hinweise, Kommentare, Anregungen, Kritik und Fehlermeldungen wäre ich dankbar. Bei Exceptions schick bitte die komplette Fehlermeldung. Wenn sie beim Auswerten einer Formel auftritt, hätte ich auch gern die Formel dazu.


updated 08.02.2001
Christian Semrau