「Ruby でグラフィックス」— サンプルプログラム


このグラフィックスはアイディア次第でいろいろなことができる。これまでに出て来たプログラムの バリエーションだけでも楽しめるはずだ。

ここではいくつかの新しい手法を紹介した後,サンプルとしてさまざまの プログラムを挙げてみることにする。それらをいじり回して,自分のオリジナルな パターンを作ってみよう。

斜めのグラデーションも入れる

# ex-005.rb
nx = 600
ny = 480
puts "P6"
puts "# Love Kyojo!"
puts "#{nx} #{ny}"
puts "255"
for i in 0 .. ny - 1
  for j in 0 .. nx - 1
    r = i % 240        # 縦のグラデーション
    g = (i + j) % 240  # ここで斜めのグラデーションが得られる
    b = j % 240        # 横のグラデーション
    print r.chr + g.chr + b.chr
  end
end
gr005

乱数で金の粉をまぶしてみる

# ex-006.rb
nx = 600
ny = 480
puts "P6"
puts "# Love Kyojo!"
puts "#{nx} #{ny}"
puts "255"
for i in 0 .. ny - 1
  for j in 0 .. nx - 1
    if rand(15) == 0 then   # 0 .. 14 の乱数のうち 0 が出れば
      r = 255               # 黄色に指定する
      g = 255
      b = 0
    else                    # そうでなかったら
      r = i % 240           # 3つのグラデーションの合成パターン
      g = (i + j) % 240
      b = j % 240
    end
    print r.chr + g.chr + b.chr
  end
end
gr006

あとはソースだけ — 何ができるかお楽しみ!

# ex-007.rb
nx = 240
ny = 180
cx = nx / 2
cy = ny / 2
puts "P6"
puts "# Love Kyojo!"
puts "#{nx} #{ny}"
puts "255"
for i in 0 .. ny - 1
  for j in 0 .. nx - 1
    x = j - cx
    y = i - cy
    b = (x*x/40-y*y/10)  % 120
    g = 255
    r = ((x * y)/40 ) % 60 + 196 
    print r.chr + g.chr + b.chr
  end
end

# ex-008.rb
nx = 240
ny = 180
cx = nx / 2
cy = ny / 2
puts "P6"
puts "# Love Kyojo!"
puts "#{nx} #{ny}"
puts "255"
for i in 0 .. ny - 1
  for j in 0 .. nx - 1
    x = j - cx
    y = i - cy
    b = (x * x / 100 + y * y / 70)  % 120
    r = 0
    g = (x * x / 60 - y * y / 20) % 256
    print r.chr + g.chr + b.chr
  end
end
# ex-009.rb
nx = 600
ny = 480
puts "P6"
puts "# Love Kyojo!"
puts "#{nx} #{ny}"
puts 255
for i in 0 .. ny - 1
  for j in 0 .. nx - 1
    if j * 4 - i * 5 < 0 then
      b = 180
      r = 0
      g = ((j * 4 + i * 5) / 3) % 256
    else
      b = 127
      r = 127
      g = (j * 4 - i * 5) % 256
    end
    print r.chr + g.chr + b.chr
  end
end
# ex-010.rb
nx = 600
ny = 480
cx1 = nx / 3
cy1 = ny / 3
cx2 = nx * 2 / 3
cy2 = ny * 2 / 3
puts "P6"
puts "# Love Kyojo!"
puts "#{nx} #{ny}"
puts 255
for i in 0 .. ny - 1
  y1 = i - cy1
  y2 = i - cy2
  for j in 0 .. nx - 1
    x1 = j - cx1
    x2 = j - cx2
    r = (x2 * x2 / 160 + y2 * y2 / 120) % 256  
    g = (x1 * x1 / 40 + y1 * y1 / 20) % 256  
    b = ((j * 5 + i * 4) / 50) % 100 + 156 
    print r.chr + g.chr + b.chr
  end
end

もどる