rubyでシェルピンスキーのガスケット
require "RMagick" class Gasket include Magick def initialize @start = [ [60, 0], [0, 120], [120, 120] ] @img = Magick::ImageList.new @img.new_image(120, 120){self.background_color = "white"} @gc = Magick::Draw.new end def gasket(p0, p1, p2) m0 = middle_point(p0, p1) m1 = middle_point(p0, p2) m2 = middle_point(p1, p2) @gc.fill("black") @gc.polygon(p0[0], p0[1], p1[0], p1[1], p2[0], p2[1]) @gc.fill("white") @gc.polygon(m0[0], m0[1], m1[0], m1[1], m2[0], m2[1]) if (p0[0] - m0[0]).abs > 2 gasket(p0, m0, m1) gasket(p1, m0, m2) gasket(p2, m1, m2) else @stack += 1 return end end def middle_point(s, e) middleX = s[0] - (s[0] - e[0])/2 middleY = s[1] - (s[1] - e[1])/2 return [middleX, middleY] end def run gasket(@start[0], @start[1], @start[2]) @gc.draw(@img) @img.write("gasket.bmp") end end gasket = Gasket.new gasket.run
正三角形の各点の中点を結んでできた逆正三角形を白く、それ以外のエリアは黒くぬりつぶす。
で、その処理を再帰的に行う。
メソッドgasketの中身が汚いのでもう少しなんとかしたいんだけど…なんとかしたいんだけど…方法がわからん…