Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.awt.Color;
- import java.awt.Graphics;
- import java.awt.event.*;
- import java.awt.image.BufferedImage;
- import java.security.Key;
- import javax.swing.JFrame;
- public class Mandelbrot extends JFrame implements KeyListener
- {
- private final int SCREEN_WIDTH = 800;
- private final int SCREEN_HEIGHT = 600;
- private BufferedImage fractal;
- private int maxIter = 500;
- private double zoom = 150;
- private double xPos = SCREEN_WIDTH / 2;
- private double yPos = SCREEN_HEIGHT / 2;
- private Complex z, c;
- private double tmp;
- public static void main(String[] args)
- {
- new Mandelbrot().setVisible(true);
- }
- public Mandelbrot()
- {
- super("Mandelbrot Set");
- setSize(SCREEN_WIDTH, SCREEN_HEIGHT);
- setDefaultCloseOperation(EXIT_ON_CLOSE);
- setLocationRelativeTo(null);
- addKeyListener(this);
- setResizable(false);
- ComputeFractal();
- }
- public void ComputeFractal()
- {
- fractal = new BufferedImage(SCREEN_WIDTH, SCREEN_HEIGHT, BufferedImage.TYPE_INT_RGB);
- for (int y = 0; y < fractal.getHeight(); y++)
- {
- for (int x = 0; x < fractal.getWidth(); x++)
- {
- z = new Complex(0.0,0.0);
- c = new Complex();
- c.setRe((x - xPos) / zoom);
- c.setIm((y - yPos) / zoom);
- int iter;
- for (iter = 0; iter < maxIter && z.abs()<2; iter++)
- {
- tmp = z.re()*z.re() - z.im()*z.im() + c.re();
- z.setIm(2.0*z.re()*z.re() + c.im());
- z.setRe(tmp);
- }
- // If the point is in the set
- if (iter == maxIter)
- {
- Color color = new Color(0, 0, 0);
- fractal.setRGB(x, y, color.getRGB());
- }
- else
- {
- double r = iter | (iter << 2);
- while (r > 255) { r-=255; }
- double g = iter | (iter << 4);
- while (g > 255) { g-=255; }
- double b = iter | (iter << 8);
- while (b > 255) { b-=255; }
- Color color = new Color((int) r, (int) g, (int) b);
- fractal.setRGB(x, y, color.getRGB());
- }
- }
- }
- repaint();
- }
- public void paint(Graphics g){
- // Draw the fractal
- g.drawImage(fractal, 0, 0, this);
- }
- public void keyReleased(KeyEvent e){
- if (e.getKeyCode() == KeyEvent.VK_SPACE)
- {
- zoom += 100;
- ComputeFractal();
- }
- else if (e.getKeyCode() == KeyEvent.VK_LEFT)
- {
- xPos += 50;
- ComputeFractal();
- }
- else if (e.getKeyCode() == KeyEvent.VK_RIGHT)
- {
- xPos -= 50;
- ComputeFractal();
- }
- else if (e.getKeyCode() == KeyEvent.VK_UP)
- {
- yPos += 50;
- ComputeFractal();
- }
- else if (e.getKeyCode() == KeyEvent.VK_DOWN)
- {
- yPos -= 50;
- ComputeFractal();
- }
- }
- public void keyTyped(KeyEvent e){
- }
- public void keyPressed(KeyEvent e){
- }
- }
Add Comment
Please, Sign In to add comment