Sieht gut aus nur bekomme ich es nicht zum Laufen. Beim erstellen der class gibt mir javac immer Fehler aus.
Quelltext:
import java.awt.*;
import java.applet.Applet;
public class quadratischeIteration extends Applet
{
// Deklaration und Initialiserung
private static final long serialVersionUID = 1L;
final int breite = 500, hoehe = 500; // Zeichenfläche
final int vertikalerUrsprung = 490,horizontalerUrsprung = 10; // Position des Ursprungs
double pixelProEinheit = 450; // Pixel pro Einheit
double a = 1.8; // Faktor a der Gleichung
int horizontalerPunkt = 0, vertikalerPunkt = 0; // Koordinaten des neuen Punktes
int horizontalerPunktAlt = 0, vertikalerPunktAlt = 0; // Koordinaten des letzten Punkte
double horizontalerGleitpunkt = 0, vertikalerGleitpunkt = 0; // Koordinaten des neuen Punktes für die Lotgeraden
double horizontalerGleitpunktStart = 0.1, vertikalerGleitpunktStart = 0; // Koordinaten für die Lotgeraden
int hoechsterLauf = 300; // Anzahl der Schleifen
int aktuellerLauf = 1; // Schleifenzähler
FlowLayout g1 = new FlowLayout(FlowLayout.CENTER); // Objekt wird gebildet
public void setFaktor(double faktor)
{ // wird aufgerufen aus der HTML
a = faktor;
repaint(); // neu zeichnen
}
public void setIterationen(int iterations)
{ // wird aufgerufen aus der HTML
hoechsterLauf = iterations;
repaint(); // neu zeichnen
}
public void init ()
{
setLayout(g1); // Layout wird auf den Bildschirm gezeichnet
}
public void paint (Graphics g)
{ // alles wird gezeichnet (Koordinatensystem, Parabel, Winkelhalbierende, Näherung an den Schnittpunkt)
int x0, y0, x1, y1; // x- und y-Koordinaten zum Zeichnen der Parabel
double x, y;
// Zeichnen des Koordinatensystems
g.setColor(Color.black); // Farbe schwarz zum Zeichnen
g.drawLine(0,vertikalerUrsprung,breite,vertikalerUrsprung); // x-Achse und die Pfeile
g.drawLine(breite,vertikalerUrsprung,breite-10,vertikalerUrsprung-3);
g.drawLine(breite,vertikalerUrsprung,breite-10,vertikalerUrsprung+3);
g.drawLine(horizontalerUrsprung,0,horizontalerUrsprung,hoehe); // y-Achse und die Pfeile
g.drawLine(horizontalerUrsprung,0,horizontalerUrsprung-3,10);
g.drawLine(horizontalerUrsprung,0,horizontalerUrsprung+3,10);
// Zeichnen der Parabel
x0 = 0; // x-Wert am linken Rand (pixel)
x = -horizontalerUrsprung/pixelProEinheit; // x-Wert berechnen
y = a*x*(1-x); // y-Wert berechnen
y0 = (int)Math.round(vertikalerUrsprung-y*pixelProEinheit); // y-Wert: typecasting und runden
while (x0 < breite)
{ // Kopfgesteuerte Schleife mit Abbruchbedingung: läuft solange, wie das Koordinatensystem breit ist
x1 = x0+1; // Nächster x-Wert (pixel)
x = (x1-horizontalerUrsprung)/pixelProEinheit; // x-Wert berechnen
y = a*x*(1-x); // y-Wert berechnen
y1 = (int)Math.round(vertikalerUrsprung-y*pixelProEinheit); // y-Wert: typecasting und runden
if (y0 < vertikalerUrsprung) g.drawLine(x0,y0,x1,y1); // Linie vom alten zum neu berechneten Punkt
x0 = x1; // der neue Punkt wird zum alten Punkt
y0 = y1;
}
// Winkelhalbierende vom Ursprung nach rechts oben
g.drawLine(horizontalerUrsprung,vertikalerUrsprung,horizontalerUrsprung+breite,vertikalerUrsprung-breite);
// Startpunkte der Lotgeraden werden festgesetzt
vertikalerGleitpunkt = vertikalerGleitpunktStart;
vertikalerPunktAlt = (int)Math.round(vertikalerUrsprung-vertikalerGleitpunkt*pixelProEinheit);
horizontalerGleitpunkt = horizontalerGleitpunktStart;
horizontalerPunktAlt = (int)Math.round(horizontalerGleitpunkt*pixelProEinheit)+horizontalerUrsprung;
// Iterationen für das Näherungsverfahren
aktuellerLauf = 1; // aktuellerLauf muss auf 1 zurückgesetzt werden, da sonst die Iteration bei repaint() nicht ausgeführt wird
while (aktuellerLauf <= hoechsterLauf)
{ // solange bis hoechsterLauf größer als der aktuellerLauf ist
if (aktuellerLauf % 2 != 0) // Bedingung: ist die aktuelle Laufzahl ungerade -> vertikaler Strich
{
// vertikale Lotgerade
vertikalerGleitpunkt = a*horizontalerGleitpunkt*(1-horizontalerGleitpunkt);
vertikalerPunkt = (int)Math.round(vertikalerUrsprung-vertikalerGleitpunkt*pixelProEinheit);
horizontalerPunkt = (int)Math.round(horizontalerGleitpunkt*pixelProEinheit)+horizontalerUrsprung;
g.drawLine(horizontalerPunktAlt,vertikalerPunktAlt,horizontalerPunkt,vertikalerPunkt);
// berechnete Werte werden zu Ausgangspunkten der horizontalen Lotgerade
vertikalerPunktAlt = vertikalerPunkt;
horizontalerPunktAlt = horizontalerPunkt;
}
else // Bedingung: sonst -> horizontaler Strich
{
// horizontale Lotgerade
horizontalerGleitpunkt = vertikalerGleitpunkt;
vertikalerPunkt = (int)Math.round(vertikalerUrsprung-vertikalerGleitpunkt*pixelProEinheit);
horizontalerPunkt = (int)Math.round(horizontalerGleitpunkt*pixelProEinheit)+horizontalerUrsprung;
g.drawLine(horizontalerPunktAlt,vertikalerPunktAlt,horizontalerPunkt,vertikalerPunkt);
// berechnete Werte werden zu Ausgangspunkten der vertikalen Lotgerade
vertikalerPunktAlt = vertikalerPunkt;
horizontalerPunktAlt = horizontalerPunkt;
}
aktuellerLauf+=1; // Iterationszähler inkrementieren
}
}
}