Advertisement
Guest User

Untitled

a guest
Jan 5th, 2013
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. import java.awt.*;
  2. import java.awt.image.*;
  3. import javax.imageio.*;
  4. import java.io.*;
  5.  
  6. /*
  7.   Autore     : Marco 'RootkitNeo'
  8.   Descrizione: Classe che si occupa della creazione del frattale
  9.   Dipendenza : http://pastebin.com/jfTDFE8W
  10. */
  11.  
  12.  
  13. class Fractal {
  14.   // Variabili
  15.   // -----------------------------------------------------------------------------------------------------------
  16.   private Image img;                                     // Frattale
  17.   private double X0,X1, Y0, Y1, modulo, x, y;            // [X0,Y0][X0,Y1] punti luce; modulo: valore temporaneo abs(); x,y valori temporanei pixel immagine
  18.   private int cicli,profondita, width, height;           // profondita: dettaglio immagine
  19.   private Complex c1, c2;                                // Numeri complessi
  20.   // -----------------------------------------------------------------------------------------------------------
  21.  
  22.  
  23.   Fractal(int width, int height, double X0, double X1, double Y0, double Y1, int profondita) {
  24.     this.width = width;
  25.     this.height= height;
  26.     this.X0 = X0;
  27.     this.X1 = X1;
  28.     this.Y0 = Y0;
  29.     this.Y1 = Y1;
  30.     this.profondita = profondita;
  31.    
  32.   }
  33.  
  34.   void generaFrattale() {
  35.     int[] pixels = new int[width*height];
  36.     int k = 0;
  37.     img = null;
  38.    
  39.     for(int i=0; i<height; i++) {
  40.       y = Y1 + (((double)i * (Y0-Y1)) / (double)height);
  41.      
  42.       for(int j = 0; j<width; j++) {
  43.         x = X1 + (((double)j * (X0-X1)) / (double)width);
  44.        
  45.         c1 = new Complex(x,y);
  46.         c2 = c1;
  47.        
  48.        
  49.         for(cicli = 0; cicli < profondita; cicli++) {
  50.           c1 = c1.somma(c1.prodotto(c1,c1),c2);
  51.           modulo = c1.abs();
  52.          
  53.           if(modulo > 4.0) break;
  54.         }
  55.        
  56.         if(modulo<=4.0) {
  57.           pixels[k++] = (255 << 24) | 0;
  58.         } else {
  59.           int r, g, b;
  60.          
  61.           r =  (cicli>>2);
  62.           g =  (cicli>>1);
  63.           b =  10+(cicli<<2);
  64.          
  65.           r = (r>128) ? 128 : r;
  66.           g = (g>128) ? 128 : g;
  67.           b = (b>255) ? 255 : b;
  68.          
  69.           pixels[k++] = (255 << 24) | (r << 16) | (g << 8) | b;
  70.          
  71.         }
  72.       }
  73.     }
  74.  
  75.     try {
  76.       Toolkit tk = Toolkit.getDefaultToolkit();
  77.       img = tk.createImage(new MemoryImageSource(width, height,pixels,0,width));
  78.     } catch(Exception e) {
  79.       e.printStackTrace();
  80.     }
  81.   }
  82.  
  83.  
  84.   void salvaImmagine(String name) {
  85.     if(img == null) return;
  86.     BufferedImage b = new BufferedImage(width,height,BufferedImage.TYPE_INT_ARGB);
  87.     Graphics g = b.getGraphics();
  88.  
  89.     try {
  90.       g.drawImage(img.getScaledInstance(width,height,Image.SCALE_SMOOTH),0,0,null);
  91.    
  92.       ImageIO.write(b,"PNG",new File(name+".png"));
  93.     } catch(Exception e) {e.printStackTrace();}
  94.   }
  95.  
  96.  
  97.   Image getImage() {
  98.     return img;
  99.   }
  100. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement