32 lines
759 B
Ruby
32 lines
759 B
Ruby
Point = Struct.new(:x, :y)
|
|
Line = Struct.new(:start, :stop)
|
|
|
|
Shoes.app(:width => 800, :height => 600, :resizable => false) do
|
|
|
|
def split_segments(n)
|
|
dir = 1
|
|
@segments = @segments.inject([]) do |new, l|
|
|
a, b, c, d = l.start.x, l.start.y, l.stop.x, l.stop.y
|
|
|
|
mid_x = a + (c-a)/2.0 - (d-b)/2.0*dir
|
|
mid_y = b + (d-b)/2.0 + (c-a)/2.0*dir
|
|
mid_p = Point.new(mid_x, mid_y)
|
|
|
|
dir *= -1
|
|
new << Line.new(l.start, mid_p)
|
|
new << Line.new(mid_p, l.stop)
|
|
end
|
|
end
|
|
|
|
@segments = [Line.new(Point.new(200,200), Point.new(600,200))]
|
|
15.times do |n|
|
|
info "calculating frame #{n}"
|
|
split_segments(n)
|
|
end
|
|
|
|
stack do
|
|
@segments.each do |l|
|
|
line l.start.x, l.start.y, l.stop.x, l.stop.y
|
|
end
|
|
end
|
|
end
|