Advertisement
Guest User

FractalCanvas.rb

a guest
Oct 17th, 2012
199
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Ruby 2.08 KB | None | 0 0
  1. class Frac_Canv
  2. #================================================================
  3.     def initialize(shapes, i_lim, start_num)
  4.         @shapes = shapes
  5.         @i_lim = i_lim
  6.         @start_num = start_num
  7.         @p_A = [0,@start_num]
  8.         @p_B = [@start_num,0]
  9.         @running_width = 0
  10.         @running_height = 0
  11.         @max_height = start_num
  12.         @max_width = start_num
  13.         $PHI = 1/(((5 ** 0.5) +1)/2)
  14.     end
  15. #================================================================
  16.     def calc_A(length, prev_length)
  17.         ret_a = []
  18.         @running_width = @running_width + length
  19.         @max_width = @running_width if @running_width > @max_width
  20.         puts "Max Width Exceded" if @running_width > @max_width
  21.         @running_height = @running_height - (prev_length - length)
  22.         ret_a = [@running_width, @running_height]
  23.         puts ret_a
  24.         return ret_a
  25.     end
  26. #================================================================
  27.     def calc_B(length, prev_length)
  28.         ret_b = []
  29.         @running_width = @running_width - (prev_length - length)
  30.         @running_height = @running_height + length
  31.         ret_b = [@running_width, @running_height]
  32.         puts ret_b
  33.         return ret_b
  34.     end
  35. #================================================================
  36.     def recalc_length(length, i)
  37.         ret = $PHI**i
  38.         ret = ret * @max_height
  39.         return ret
  40.     end
  41. #================================================================
  42.     def do_work()
  43.         canvas = TkCanvas.new(:width=>800, :height=>800).pack('fill' => 'both', 'expand'=>true)
  44.         i = 0
  45.         start_point = @p_A
  46.         length = @start_num
  47.         @running_width = length
  48.         @running_height = length
  49.         @shapes[i] = TkcRectangle.new(canvas, @p_A, @p_B)
  50.         switch = true
  51.  
  52.         1.upto(@i_lim) do |i|
  53.             prev_length = length
  54.             length = recalc_length(length, i)
  55.             if switch
  56.                 @p_A = calc_A(length, prev_length)
  57.                 switch = false
  58.             elsif switch != true
  59.                 @p_B = calc_B(length, prev_length)
  60.                 switch = true
  61.             end
  62.             @shapes[i] = TkcRectangle.new(canvas, @p_A, @p_B)
  63.             i+=1
  64.         end
  65.     end
  66. #================================================================
  67.     def enter_loop()
  68.         Tk.mainloop
  69.     end
  70. #================================================================
  71. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement