Frattale di Mandelbrot

Stato
Discussione chiusa ad ulteriori risposte.

imported_AlexZ

Utente Silver
16 Ottobre 2008
68
6
0
70
Beh dopo un pò di tempo e sopratutto varie revisioni del codice sono riuscito a metter su una prima versione del generatore di frattali di Mandelbrot. Putroppo non ho potuto lavorarci molto su date le mie scarse conoscenze matematiche e quindi mi rivolgo a voi per capire meglio in che modo possa far si che il frattale venga disegnato con colori diversi!
(per il momento ho lasciato bianco e nero come colori!)
Code Here
 
decisamente incasinato...indentazione quasi nulla,import delle classi inutili,codice semplificabile...

Codice:
import javax.swing.*;
 import java.awt.*;
 
 public class Mandel extends JFrame{
     
     public static void main(String[] args){
       new Mandel();
     }
 
   public Mandel(){
       
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     
     add(new MyCanvas());
     setSize(500,400);
     setVisible(true);
     show();
   }
 }
  
 class MyCanvas extends Canvas{
 
   private final int MAX=32;
 
  public void paint(Graphics g){
 
     Dimension d = getSize();
     int n;
     double MinRe = -2.0;
     double MaxRe = 1.0;
     double MinIm = -1.2;
     double MaxIm = MinIm+(MaxRe-MinRe)*d.height/d.width;
     double Re_factor = (MaxRe-MinRe)/(d.width-1);
     double Im_factor = (MaxIm-MinIm)/(d.height-1);
     double Z_re, Z_im;
     double Z_re2, Z_im2;
     double value;
 
     for(int y=0; y<d.height; ++y){
       double c_im = MaxIm - y*Im_factor;
       for(int x=0; x<d.width; ++x){
         double c_re = MinRe + x*Re_factor;
         Z_re = c_re; Z_im = c_im;
         boolean isInside = true;
         for( n=0; n<MAX; ++n){
             Z_re2 = Z_re*Z_re;
             Z_im2 = Z_im*Z_im;    
             if( Z_re2 + Z_im2 > 4){ 
                 g.setColor(new Color(0,0,0));
                 g.drawLine(x,y,x,y);
                 break;
             }
             Z_im = 2*Z_re*Z_im + c_im;
             Z_re = Z_re2 - Z_im2 + c_re;
    
             if(Z_re2 + Z_im2 < 4){
                 g.setColor(new Color(255,255,255));
                 g.drawLine(x, y, x, y);
             }else{
                 g.setColor(new Color( MAX/2, n/2, n*4));
                 g.drawLine(x, y, x, y); 
             }     
           }
         }
       }
     }
   }
anche se non condivido molto il fatto di utilizzare due classi nello stesso file...
 
Ti ringrazio per le correzioni Razor..in effetti condivido appieno il tuo punto di vista e puntavo proprio a correzioni di questo tipo per poter migliorare questo codice e per sfruttare questi insegnamenti in altri programmi!! :)
Nessuno sa in che modo possa riuscire a realizzare il frattale con più colori?!
 
utilizzando in modo appropriato il metodo setColor() di classe Graphics.
Utilizzando la classe Color possiamo fare:
Codice:
setColor(Color.red);

e tutti gli altri coloro visibili nella classeColor oppure si utilizza il costruttore impostando i colori attraverso i parametri RGB,tipo:

Codice:
setColor(new Color(R,G,B));
dove R,G,B sono interi o float.
 
R4z0r_Cr4sH ha detto:
utilizzando in modo appropriato il metodo setColor() di classe Graphics.

Su quello ci siamo, penso di utilizzare correttamente il metodo, ma per ottenere le varie sfumature di colore è necessario verificare se il punto appartenga o meno all'insieme per poi colorarlo di conseguenza!!volevo appunto sapere se qualcuno sapesse in che modo farlo correttamente e se sapesse in che modo va corretto il mio!
 
ma ci hai provato almeno a farlo?io non ti so aiutare...1 perchè mi so appena alzato e non mi va,2 perchè non sono bravo in matematica...
 
R4z0r_Cr4sH ha detto:
ma ci hai provato almeno a farlo?io non ti so aiutare...1 perchè mi so appena alzato e non mi va,2 perchè non sono bravo in matematica...
Certo che si che ci ho provato..ma putroppo il risultato che ho ottengo e sempre un'immagine bicromatica!!:-/
 
Stato
Discussione chiusa ad ulteriori risposte.