GTK+ で落書き 9(Ruby)
自作の Gem 'oekaki' で落書きしてみました。蚊取り線香? 何だか目が回ります。
コードは以下。何も考えずにテキトーにいきあたりばったりでコーディングしました。
require 'oekaki' R = 7 Width, Height = 500, 500 Oekaki.app width: Width, height: Height do draw do color(0, 0, 0) rectangle(true, 0, 0, Width, Height) end p = Vector[0, 0] np = p.dup deg = 90 r = 0 step = 1.5 b_line = lambda do |p1, p2| l = (p2 - p1).r pt = p1.dup 0.upto(l) do color(0, 65535, 0) arc(true, Width / 2 + pt[0] - R, Height / 2 - pt[1] - R, R * 2, R * 2, 0, 64 * 360) pt += (p2 - p1) / l end end id = timer(50) do b_line.call(p, np) p = np θ = PI * deg / 180 np = Vector[cos(θ), sin(θ)] * r r += step step_d = 20 - r / 35 deg -= step_d Gtk.timeout_remove(id) if r > 220 true end end
関数 b_line は点 p1 から p2 へ太い線を引きます(円を動かしてやっています)。
お絵かきするのに標準添付ライブラリの Vector クラスや(ここでは使っていませんが)Matrix クラスは役立ちます。計算がだいぶ楽になりますよ。
Gen 'oekaki' については以下。
oekaki | RubyGems.org | your community gem host
GTK+でお絵かきしてみた(Ruby) - Camera Obscura