Jsdo.itのWebRubyの実験ページを開いて、コードを消して、このGistのコードを貼り付けて、 runを押して、ブラウザがほどなく固まるので、1時間くらい待つと完成w。
WebRubyで動かせない箇所をコメントアウトしてます。
WebRubyなのでRmagicの代わりにCanvasで描画してます。
Jsdo.itのWebRubyの実験ページを開いて、コードを消して、このGistのコードを貼り付けて、 runを押して、ブラウザがほどなく固まるので、1時間くらい待つと完成w。
WebRubyで動かせない箇所をコメントアウトしてます。
WebRubyなのでRmagicの代わりにCanvasで描画してます。
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 |