rcairoで星型を描いてみる

だんだん描き方がみえてきた。
rubyのリファレンスを読みながら、
使ったことのない便利なメソッドなんか試してる。
こうなると、おもしろくてしかたない。

#!usr/bin/env ruby

require 'cairo'
require 'matrix'

mtrx = Cairo::Matrix.rotate(-0.5 * Math::PI)
a= []
(0 .. 359).step(360 / 5) do |d|
r= d * Math::PI / 180
a << Vector.elements(mtrx.transform_point(Math::cos(r), Math::sin(r))) * 80
end
star = []
(a * 2).inject(true) do |b, v|
star << v if b
b = !b
end
image = Cairo::ImageSurface.new(200,200)
context = Cairo::Context.new(image)
context.matrix = Cairo::Matrix.translate(image.width / 2, image.height / 2)
context.set_source_color(Cairo::Color::ORANGE)
context.set_line_width(10)
star.inject(true) do |b, v|
x, y = v.to_a
if b
context.move_to(x, y)
else
context.line_to(x, y)
end
b = false
end
context.close_path
context.stroke
image.write_to_png("/tmp/image")
`display /tmp/image`
[PR]
by gaziya | 2011-05-16 19:00