class Oekaki::Star

Public Class Methods

new(fill, x1, y1, x2, y2, color) click to toggle source
Calls superclass method Oekaki::Tool::new
# File lib/oekaki.rb, line 159
def initialize(fill, x1, y1, x2, y2, color)
  @fill = fill
  @o = []; @a = []; @b = []
  @o[0], @o[1] = x1, y1
  @a[0] = Vector[x2 - x1, y1 - y2]
  θ = PI / 5
  rt1 = Matrix[[cos(θ), -sin(θ)], [sin(θ), cos(θ)]]
  rt2 = rt1 * rt1
  1.upto(4) {|i| @a[i] = rt2 * @a[i - 1]}
  t = cos(2 * θ) / cos(θ)
  @b[0] = rt1 * @a[0] * t
  1.upto(4) {|i| @b[i] = rt2 * @b[i - 1]}
  super()
  @color = color
end

Public Instance Methods

draw() click to toggle source
# File lib/oekaki.rb, line 181
def draw
  if @fill
    5.times {|i| draw_triangle(i)}
    ar = []
    5.times {|i| ar << @b[i].to_w(@o)}
    polygon(@fill, ar)
  else
    ar = []
    5.times {|i| ar << @a[i].to_w(@o); ar << @b[i].to_w(@o)}
    polygon(@fill, ar)
  end
end

Private Instance Methods

draw_triangle(n) click to toggle source
# File lib/oekaki.rb, line 175
def draw_triangle(n)
  ar = [@a[n].to_w(@o), @b[n].to_w(@o), @b[(n - 1) % 5].to_w(@o)]
  polygon(@fill, ar)
end