Gem 'Ruby 2D' でお絵かきしてみる

これまで Ruby でのグラフィック描画には自作の Gem 'oekaki' を使ってきましたが、高機能で簡単に使える Gem 'Ruby 2D' がリリースされたのでちょっと使ってみました。
www.ruby2d.com

インストール

Window, Mac, Linux で使えるようですが、WindowsMinGW 環境が必要なようです。自分は Linux Mint 19.1, Ruby 2.6.0 で確認しました。
とりあえず Linux 環境でのインストール方法です。上のサイトの手順どおりです。

まず SDL を使っているようなので、パッケージをインストールします。

$ sudo apt install libsdl2-dev libsdl2-image-dev libsdl2-mixer-dev libsdl2-ttf-dev

 
「simple2d」をインストールします。ここから「Source code」をダウンロード、解凍してフォルダ内に入り、

$ make && sudo make install

でインストールされます。(追記:現在はこれは不要なようです。4/27記)
 
Gem をインストールします。'gem install ruby2d' あるいは Bundler でインストール可能です。確認は例えば

$ pry
[1] pry(main)> require 'ruby2d'
=> true

となれば OK です。

(追記:現在 Windows では Gem のインストールだけで使えます。ただし MinGW-64bit 環境のみです。4/27記)
 

ヒルベルト曲線を描いてみる

Ruby 2D の使い方はシンプルで、上のサイトを見れば簡単にわかります。ヒルベルト曲線を描画してみます。
20190302102935
 
コード。
ruby2d_sample1.rb

require 'ruby2d'
require 'matrix'

Width = 600
N = 5

class Pen
  def initialize
    @po = Vector[35, Width - 35]
    @dir = Vector[1, 0]
  end
  
  def go
    step = (Width - 50) / (2 ** N - 1)
    next_po = @po + @dir * step
    c = Color.new("red")    #色
    Line.new(x1: @po[0], y1: @po[1], x2: next_po[0], y2: next_po[1],    #線を描く
       width: 1, color: c)
    @po = next_po
  end
  
  def left(a)
    @dir = Matrix[[0, -1], [1, 0]] * @dir * a
  end
  
  def right(a)
    @dir = Matrix[[0, 1], [-1, 0]] * @dir * a
  end
end

set title: "Hilbert curve", width: Width, height: Width    #ウィンドウの大きさなどの指定
set background: "#F8F8FF"    #背景色
pen = Pen.new

draw = ->(depth, a) {
  return if depth.zero?
  pen.right(a)
  draw.(depth - 1, -a)
  pen.go
  pen.left(a)
  draw.(depth - 1,  a)
  pen.go
  draw.(depth - 1,  a)
  pen.left(a)
  pen.go
  draw.(depth - 1, -a)
  pen.right(a)
}

draw.(N, 1)
show    #描画

 
Ruby 2D はまだまだ機能がたくさんあります。もっと使ってみたいと思います。