Created
June 16, 2010 04:23
-
-
Save yogthos/440158 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import java.awt.Canvas; | |
import java.awt.Color; | |
import java.awt.Dimension; | |
import java.awt.Graphics; | |
import java.awt.image.BufferStrategy; | |
import java.awt.image.ImageObserver; | |
import javax.swing.JFrame; | |
import javax.swing.JPanel; | |
public class Mandelbrot extends Canvas implements ImageObserver { | |
private static final long serialVersionUID = 1L; | |
public static final int WIDTH = 1200; | |
public static final int HEIGHT = 1200; | |
private static int BAILOUT = 256; | |
private static int MAX_ITERATIONS = 64; | |
public BufferStrategy strategy; | |
public Mandelbrot () { | |
setBounds(0,0,WIDTH,HEIGHT); | |
setBackground(Color.BLACK); | |
JPanel panel = new JPanel(); | |
panel.setPreferredSize(new Dimension(WIDTH, HEIGHT)); | |
panel.setLayout(null); | |
panel.add(this); | |
JFrame frame = new JFrame("Mandelbrot"); | |
frame.add(panel); | |
frame.setBounds(0,0,WIDTH, HEIGHT); | |
frame.setResizable(false); | |
frame.setVisible(true); | |
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); | |
//create a double buffer | |
createBufferStrategy(2); | |
strategy = getBufferStrategy(); | |
requestFocus(); | |
} | |
private int checkBounds(float x, float y) { | |
float cr = x; | |
float ci = y; | |
float zi = 0.0f; | |
float zr = 0.0f; | |
int i = 0; | |
while (true) { | |
i++; | |
float temp = zr * zi; | |
float zr2 = zr * zr; | |
float zi2 = zi * zi; | |
zr = zr2 - zi2 + cr; | |
zi = temp + temp + ci; | |
if (zi2 + zr2 > BAILOUT) | |
return i; | |
if (i > MAX_ITERATIONS) | |
return 0; | |
} | |
} | |
private void draw() { | |
float x = -2.1f, y = -1.5f, z = 3.0f; | |
int i, j; | |
Graphics g = strategy.getDrawGraphics(); | |
g.clearRect(0, 0, getWidth(), getHeight()); | |
for (i = 0; i < HEIGHT; i++) { | |
for (j = 0; j < WIDTH; j++) { | |
int value = checkBounds((x + z*(i/(float)WIDTH)), (y + z*(j/(float)HEIGHT))); | |
if (value > 0) { | |
g.setColor(new Color(value*255/MAX_ITERATIONS)); | |
g.drawRect(i, j, 0, 0); | |
} | |
} | |
} | |
strategy.show(); | |
} | |
public static void main(String args[]) { | |
Mandelbrot m = new Mandelbrot(); | |
long startTime = System.currentTimeMillis(); | |
m.draw(); | |
System.out.println((System.currentTimeMillis() - startTime)/1000); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment