Hemofobia

Untitled

Nov 21st, 2016
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.36 KB | None | 0 0
  1. import java.awt.Color;
  2. import java.awt.Graphics;
  3. import java.awt.event.*;
  4. import java.awt.image.BufferedImage;
  5. import java.security.Key;
  6.  
  7. import javax.swing.JFrame;
  8.  
  9. public class Mandelbrot extends JFrame implements KeyListener
  10. {
  11.     private final int SCREEN_WIDTH = 800;
  12.     private final int SCREEN_HEIGHT = 600;
  13.  
  14.     private BufferedImage fractal;
  15.  
  16.     private int maxIter = 500;
  17.     private double zoom = 150;
  18.     private double xPos = SCREEN_WIDTH / 2;
  19.     private double yPos = SCREEN_HEIGHT / 2;
  20.  
  21.     private Complex z, c;
  22.     private double tmp;
  23.  
  24.     public static void main(String[] args)
  25.     {
  26.         new Mandelbrot().setVisible(true);
  27.     }
  28.  
  29.     public Mandelbrot()
  30.     {
  31.         super("Mandelbrot Set");
  32.         setSize(SCREEN_WIDTH, SCREEN_HEIGHT);
  33.         setDefaultCloseOperation(EXIT_ON_CLOSE);
  34.         setLocationRelativeTo(null);
  35.         addKeyListener(this);
  36.         setResizable(false);
  37.         ComputeFractal();
  38.     }
  39.  
  40.     public void ComputeFractal()
  41.     {
  42.         fractal = new BufferedImage(SCREEN_WIDTH, SCREEN_HEIGHT, BufferedImage.TYPE_INT_RGB);
  43.  
  44.         for (int y = 0; y < fractal.getHeight(); y++)
  45.         {
  46.             for (int x = 0; x < fractal.getWidth(); x++)
  47.             {
  48.                 z = new Complex(0.0,0.0);
  49.                 c = new Complex();
  50.                 c.setRe((x - xPos) / zoom);
  51.                 c.setIm((y - yPos) / zoom);
  52.  
  53.                 int iter;
  54.  
  55.                 for (iter = 0; iter < maxIter && z.abs()<2; iter++)
  56.                 {
  57.                     tmp = z.re()*z.re() - z.im()*z.im() + c.re();
  58.                     z.setIm(2.0*z.re()*z.re() + c.im());
  59.                     z.setRe(tmp);
  60.                 }
  61.  
  62.                 // If the point is in the set
  63.                 if (iter == maxIter)
  64.                 {
  65.                     Color color = new Color(0, 0, 0);
  66.                     fractal.setRGB(x, y, color.getRGB());
  67.                 }
  68.                 else
  69.                 {
  70.                     double r = iter | (iter << 2);
  71.                     while (r > 255) { r-=255; }
  72.                     double g = iter | (iter << 4);
  73.                     while (g > 255) { g-=255; }
  74.                     double b = iter | (iter << 8);
  75.                     while (b > 255) { b-=255; }
  76.  
  77.                     Color color = new Color((int) r, (int) g, (int) b);
  78.                     fractal.setRGB(x, y, color.getRGB());
  79.                 }
  80.             }
  81.         }
  82.  
  83.         repaint();
  84.     }
  85.  
  86.     public void paint(Graphics g){
  87.         // Draw the fractal
  88.         g.drawImage(fractal, 0, 0, this);
  89.     }
  90.  
  91.     public void keyReleased(KeyEvent e){
  92.         if (e.getKeyCode() == KeyEvent.VK_SPACE)
  93.         {
  94.             zoom += 100;
  95.             ComputeFractal();
  96.         }
  97.         else if (e.getKeyCode() == KeyEvent.VK_LEFT)
  98.         {
  99.             xPos += 50;
  100.             ComputeFractal();
  101.         }
  102.         else if (e.getKeyCode() == KeyEvent.VK_RIGHT)
  103.         {
  104.             xPos -= 50;
  105.             ComputeFractal();
  106.         }
  107.         else if (e.getKeyCode() == KeyEvent.VK_UP)
  108.         {
  109.             yPos += 50;
  110.             ComputeFractal();
  111.         }
  112.         else if (e.getKeyCode() == KeyEvent.VK_DOWN)
  113.         {
  114.             yPos -= 50;
  115.             ComputeFractal();
  116.         }
  117.     }
  118.  
  119.     public void keyTyped(KeyEvent e){
  120.     }
  121.     public void keyPressed(KeyEvent e){
  122.     }
  123. }
Add Comment
Please, Sign In to add comment