自作の Gem 'oekaki' を使っています。
oekaki | RubyGems.org | your community gem host
GTK+でお絵かきしてみた(Ruby) - Camera Obscura
oekaki_sample17.rb
require 'oekaki' Width = 500 circles = [] #作った円の情報を保持しておく配列 check = ->(x, y, r) { return false if x < r or y < r or x > Width - r or y > Width - r circles.each do |x1, y1, r1| l = Math.sqrt((x1 - x) ** 2 + (y1 - y) ** 2) return false if l < r + r1 end circles << [x, y, r] true } Oekaki.app width: Width, height: Width do draw do clear(color(0xadff, 0xd8ff, 0xe6ff)) #lightblue end id = timer(100) do catch(:jump) do x = y = r = i = 0 #円を一個生成する loop do x, y = rand(Width), rand(Width) r = rand(10..100) break if check.(x, y, r) i += 1 if i > 10000 #円が混み過ぎたら終了 timer_stop(id) puts "stop" throw(:jump) end end color(rand(0x10000), rand(0x10000), rand(0x10000)) circle(true, x, y, r) end true end end
つまらないものなのですけれど、じつは Kernel#rand の引数に Range オブジェクトを使ってみたかっただけなのでした…。一箇所だけ、わかりますかね。