import java.awt.image.BufferedImage
import java.awt.Color
class Mandelbrot {
def createImage(mx:Double, my:Double, zoom:Double, maxCount:Int):BufferedImage = {
var image = new BufferedImage(500, 500, BufferedImage.TYPE_3BYTE_BGR)
for (y <- 0 until image.getHeight) {
for (x <- 0 until image.getWidth) {
val cx = mx + (x-image.getWidth / 2) / zoom
val cy = my - (y-image.getHeight / 2) / zoom
val count = calcMandelbrot(cx, cy, maxCount)
if (count != -1) {
val color = Color.HSBtoRGB(count/100.0f, 1.0f, 1.0f)
image.setRGB(x, y, color)
}
else {
image.setRGB(x, y, 0)
}
}
}
image
}
def calcMandelbrot(cx:Double, cy:Double, maxCount:Int):Int = {
var zx = 0.0
var zy = 0.0
for (i <- 0 until maxCount) {
val sx = zx * zx
val sy = zy * zy
if ((sx + sy) >= 4.0)
return i
zy = 2.0 * zx * zy + cy
zx = sx - sy + cx
}
-1
}
}
import javax.swing._
import javax.imageio.ImageIO
class MandelbrotFrame extends JFrame("Mandelbrot Set") {
val mandelbrot = new Mandelbrot()
val image = mandelbrot.createImage(-0.745428, 0.113009, 100000, 1000)
var label = new JLabel(new ImageIcon(image))
getContentPane().add(label)
pack()
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)
setVisible(true)
}
object MandelbrotTest {
def main(args:Array[String]) {
new MandelbrotFrame()
}
}