tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
0
ZUGRIFFE
484
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    kyanthos kyanthos ist offline Rookie
    Registriert seit
    May 2011
    Beiträge
    9
    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:
    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    
            /**
         * 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:
    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    
        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:
    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    
        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 :
    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    
        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();
                
            }
            //...........
            }
    Geändert von kyanthos (02.07.11 um 11:26 Uhr)
     

Ähnliche Themen

  1. Graphen zeichnen / Java Swing
    Von JavaNewbo im Forum Swing, Java2D/3D, SWT, JFace
    Antworten: 9
    Letzter Beitrag: 28.10.10, 16:45
  2. Java Canvas Zeichnen
    Von nathaniells freak im Forum Swing, Java2D/3D, SWT, JFace
    Antworten: 24
    Letzter Beitrag: 29.05.08, 14:09
  3. Pfeile zeichnen in Java
    Von jorgeHX im Forum Swing, Java2D/3D, SWT, JFace
    Antworten: 4
    Letzter Beitrag: 15.06.07, 11:52
  4. Zeichnen in Java
    Von jorgeHX im Forum Swing, Java2D/3D, SWT, JFace
    Antworten: 4
    Letzter Beitrag: 20.12.04, 20:15
  5. Struktur aus Datei lesen [C++] -> [Java]
    Von sisela im Forum Java
    Antworten: 13
    Letzter Beitrag: 25.11.04, 15:56

Stichworte