[JAVA] Mandelbrotmenge zeichnen mit MVC Struktur und GUI

kyanthos

Grünschnabel
Hi Leute,
Ich soll ein Programm in MVC Struktur schreiben, welches mit der Mandelbrotmenge z.b. das Apfelmännchen zeichnet. (http://de.wikipedia.org/wiki/Mandelbrot-Menge).

Ich hab es endlich hinbekommen die GUI für das Zeichnen des Mandelbrot - Apfelmännchens zu erstellen.

Nun hab ich allerdings das Problem das Punkte, die in einem Schritt gezeichnet wurden im nächsten einfach wieder gelöscht werden und immer nur ein Punkt auf dem Canvas zu sehen ist. Ich vermute ja, dass das an der repaint() Methode liegt. Ich weß allerdings nicht, wie ich das beheben kann.

Hier der Ausschnitt des Codes des Canvas Elementes:
Java:
        /**
	 * Zeichnen eines Punktes in Abhängikeit, ob ein Punkt in der Mandelbrotmenge liegt
	 * oder nicht und in welcher Iterationstiefe die Iteration abgebrochen wurde
	 */
	public void paint(Graphics g)
	{
		Color farbe = Color.white;
		int farbwahl;
		
		if(maxTiefe == iterationstiefe)
			farbe = Color.white;
		if(maxTiefe != iterationstiefe)
		{
			farbwahl = iterationstiefe%7;
			
			switch(farbwahl){
				case 0: farbe = Color.yellow; break;
				case 1: farbe = Color.green;  break;
				case 2: farbe = Color.red;    break;
				case 3: farbe = Color.blue;   break;
				case 4: farbe = Color.pink;   break;
				case 5: farbe = Color.orange; break;
				case 6: farbe = Color.black;  break;
			}
		}
		
		g.setColor(farbe);
		g.drawRect(x, y, 0, 0);		
	}
	
	/**
	 * Setzt die Koordinaten des Punktes und die Werte zur Berechnung der Farbe eines 
	 * Punktes neu und ruft die repaint() Methode auf
	 * @param x x - Koordinate
	 * @param y y - Koordinaten
	 * @param maxTiefe Die maximale, vom Nutzer eingegebene, Iterationstiefe.
	 * @param iterationstiefe Die Iterationstiefe, in welcher die Iteration angebrochen wurde
	 */
	public void setPixel(int x, int y, int maxTiefe, int iterationstiefe)
	{
		this.x = x;
		this.y = y;
		this.iterationstiefe = iterationstiefe;
		this.maxTiefe = maxTiefe;
				
		repaint();
	}

Auszug aus dem View, der setPixel aufruft:
Java:
	public void update(Observable m, Object o)
	{
		if(model == m)
		{
			canvasElement.setPixel(model.getX(), model.getY(),Integer.parseInt(getTFI()), model.getPunktSetzen());
		}
		
	}

Auszug aus dem Model:
Java:
	public void berechne()
	{
		//uebergabe der MbDaten an die MbBerechnung 
		MbBerechnung.setMandelDaten(MbDaten);
		
		//----------------------------------------------------------------
		
		//durchlauf der Y Koordinaten
		for(koordinateY = 0 ; koordinateY <= MbDaten.getHight(); koordinateY++)
		{
			//Ausfueren der Berechnung des Imaginaerteil fuer die Y Koordinate
			MbBerechnung.Imaginaerteil(koordinateY);
			
			//durchlauf der X Koordinaten
			for(koordinateX = 0 ; koordinateX <= MbDaten.getWidth(); koordinateX++)
			{
				//Ausfueren der Berechnung des Realteil fuer die X Koordinate
				MbBerechnung.Realteil(koordinateX);
				
				//Ausfueren der Berechnung der Iterationstiefe und deren Bestimmung
				punktSetzen = MbBerechnung.IterationsBerechnung();
				
				//Test---------------------------------------------------------------------------------
				System.out.println("Y : "+ koordinateY +"  X : "+ koordinateX +"  Tiefe: "+ punktSetzen  );
				///------------------------------------------------------------------------------------*/
				
				//ueberpruefung auf Verenderung der Iterationstiefe
				setChanged();
				notifyObservers(new Integer(punktSetzen));
				
				
				
			}
		}

Und zum Schluss noch ein Auszug aus dem Controller :) :
Java:
	public void actionPerformed(ActionEvent ae)
	{
		String command = ae.getActionCommand();
		
		if(command.equals(view.ACTION_START))
		{
			
			daten.setAA(Double.parseDouble(view.getTFCa_Real()));
			daten.setAE(Double.parseDouble(view.getTFCa_Imag()));
			daten.setBA(Double.parseDouble(view.getTFCb_Real()));
			daten.setBE(Double.parseDouble(view.getTFCb_Imag()));
			daten.setIterationstiefe(Integer.parseInt(view.getTFI()));
			
			model.setMandelDaten(daten);
			model.berechne();
			
		}
        //...........
        }
 
Zuletzt bearbeitet:
Zurück