ゴボウ製

サンプルに使う画像を作ろうと思って、五芒星を描画してみようとしたらえらい苦労した。

線画なら簡単なのだが、パスを作って中を塗るとかそういった機能は無いので、座標を計算して三角形で描かなければならない。
どうにかできたのでメモ。

require 'dxruby'

image = Image.new(300,300)

bx = 0
by = -50

x1 = []
y1 = []
(0..4).each do |i|
  x1[i] = bx * Math.cos(Math::PI / 180 * (i * 72 - 36)) - by * Math.sin(Math::PI / 180 * (i * 72 - 36)) + image.width/2
  y1[i] = bx * Math.sin(Math::PI / 180 * (i * 72 - 36)) + by * Math.cos(Math::PI / 180 * (i * 72 - 36)) + image.height/2
end
sx = x1[0] + (x1[1] - x1[0]) / 2 - image.width/2
sy = y1[0] - (x1[1] - x1[0]) / 2 * Math.tan(Math::PI / 180 * 72) - image.height/2
x2 = []
y2 = []
(0..4).each do |i|
  x2[i] = sx * Math.cos(Math::PI / 180 * i * 72) - sy * Math.sin(Math::PI / 180 * i * 72) + image.width/2
  y2[i] = sx * Math.sin(Math::PI / 180 * i * 72) + sy * Math.cos(Math::PI / 180 * i * 72) + image.height/2
end

image.triangle_fill(x2[0], y2[0], x1[2], y1[2], x1[4], y1[4], C_WHITE)
image.triangle_fill(x2[1], y2[1], x1[3], y1[3], x1[0], y1[0], C_WHITE)
image.triangle_fill(x2[2], y2[2], x1[4], y1[4], x1[1], y1[1], C_WHITE)
image.triangle_fill(x2[3], y2[3], x1[0], y1[0], x1[2], y1[2], C_WHITE)
image.triangle_fill(x2[4], y2[4], x1[1], y1[1], x1[3], y1[3], C_WHITE)

Window.loop do
  Window.draw(0,0,image)
end