JRubyでマンデルブロート集合

JRubyを使えば、Javaの豊富なライブラリを使うことができます。
とりあえず、マンデルブロート集合を書いてみました。
RubyなのにJavaのJFrameやGraphicsを使っています。
チョット遅いです。40秒ぐらいかかります。

require 'java'
import java.awt.Color
import javax.swing.JFrame
import javax.swing.JComponent

class Canvas < JComponent
  WIDTH = 200
  HEIGHT = 200
  MAX_COUNT = 50
  def paint(g)
    for y in 0..HEIGHT
      for x in 0..WIDTH
        cx = 4.0 * (x - WIDTH / 2.0) / WIDTH
        cy = 4.0 * (y - HEIGHT / 2.0) / HEIGHT
        count = get_count(cx, cy)
        #puts "#{cx} #{cy} #{count}"
        if count == -1 then
          g.setColor(Color::BLACK)
        else
          b = 1.0 * count / MAX_COUNT
          g.setColor(Color.getHSBColor(0.0, 0.0, b))
        end
        g.drawRect(x, y, 1, 1)
      end
    end
  end

  def get_count(cx, cy)
    count = 0
    zx = 0.0
    zy = 0.0
    MAX_COUNT.times do
      zx2 = zx * zx
      zy2 = zy * zy
      if zx2 + zy2 >= 4.0 then
        return count
      end
      zx, zy = (zx2 - zy2 + cx), (2.0 * zx * zy + cy)
      count += 1
    end
    -1
  end
  def getPreferredSize()
    java.awt.Dimension.new(WIDTH, HEIGHT)
  end
end

frame = JFrame.new "Mandelbrot Set"
canvas = Canvas.new
frame.get_content_pane.add(canvas)
frame.set_default_close_operation JFrame::EXIT_ON_CLOSE
frame.pack
frame.visible = true