Skip to content

Instantly share code, notes, and snippets.

@kjunichi
Last active August 29, 2015 14:02
Show Gist options
  • Save kjunichi/26374db048646e26374b to your computer and use it in GitHub Desktop.
Save kjunichi/26374db048646e26374b to your computer and use it in GitHub Desktop.
プログラムでシダを描画する WebRuby版

プログラムでシダを描画するのWebRuby版

1時間くらいブラウザの操作できなくなります。

簡単に実行するには

Jsdo.itのWebRubyの実験ページを開いて、コードを消して、このGistのコードを貼り付けて、 runを押して、ブラウザがほどなく固まるので、1時間くらい待つと完成w。

QiitaのRuby版のコード利用してます

WebRubyで動かせない箇所をコメントアウトしてます。

WebRubyなのでRmagicの代わりにCanvasで描画してます。

Link

Link

class ShidaGenerator
# include Magick
N = 20
DEFAULT_WIDTH = 500
DEFAULT_HEIGHT = 500
# FILE_NAME = "shida.jpg"
W1x = -> (x, y) { 0.836 * x + 0.044 * y }
W1y = -> (x, y) { -0.044 * x + 0.836 * y + 0.169 }
W2x = -> (x, y) { -0.141 * x + 0.302 * y }
W2y = -> (x, y) { 0.302 * x + 0.141 * y + 0.127 }
W3x = -> (x, y) { 0.141 * x - 0.302 * y }
W3y = -> (x, y) { 0.302 * x + 0.141 * y + 0.169 }
W4x = -> (x, y) { 0 }
W4y = -> (x, y) { 0.175337 * y }
def initialize(width = DEFAULT_WIDTH, height = DEFAULT_HEIGHT)
@width = width
@height = height
window = MrubyJs.get_root_object
container = window.call('$', '#container')
container.call("html", "")
container.call("append", "<canvas id=\"cs\"></canvas>")
cs = window.call("$","#cs")
cs[0].width=500
cs[0].height=500
@ctx = cs[0].call("getContext","2d")
end
def self.show(width = DEFAULT_WIDTH, height = DEFAULT_HEIGHT)
self.new(width, height).show
end
def generate
#image = Magick::Image.new(@width, @height)
f = -> (k, x, y) do
if 0 < k
f.(k - 1, W1x.(x, y), W1y.(x, y))
f.(k - 1, W2x.(x, y), W2y.(x, y)) if Random.rand < 0.3
f.(k - 1, W3x.(x, y), W3y.(x, y)) if Random.rand < 0.3
f.(k - 1, W4x.(x, y), W4y.(x, y)) if Random.rand < 0.3
else
xx = (x * 490 + @width * 0.5).to_i
yy = (@height - y * 490).to_i
#image.store_pixels(xx, yy, 1, 1, [green_pixel])
@ctx.call("fillRect",xx,yy,1,1)
end
end
-> (k, x, y) { f.(k, x, y) }.(N, 0, 0)
#image
end
def show
#self.generate.write(image_path)
self.generate
#system("open -a Preview #{image_path}") if open_command_exists?
end
private
def green_pixel
# @pixel ||= Magick::Pixel.new(0, 128 * 256, 0)
end
def image_path
# current_dir = File.expand_path(File.dirname(__FILE__))
# File.join(current_dir, FILE_NAME)
end
def open_command_exists?
#Open3.capture3("which open").first.empty?.!
end
end
ShidaGenerator.show
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment