Sha256: 35f585dade941b90d0f3b08c164045c5a95732fb5baf8210a71f97252287b9db
Contents?: true
Size: 1.72 KB
Versions: 5
Compression:
Stored size: 1.72 KB
Contents
# http://processing.org/learning/topics/tree.html # by Joe Holt def setup size 200, 200 color_mode RGB, 1 frame_rate 30 smooth @x = 0.0 @dx = width / 100 @start_time = Time.now @frame_time = nil end def draw t = Time.now if @frame_time fps = 1.0 / (t - @frame_time) # printf "%0.1f fps\n", fps end @frame_time = t background 0 stroke 1, 1, 1 # Let's pick an angle 0 to 90 degrees based on the mouse position a = (@x / width) * 90 # Convert it to radians @theta = a.radians # Start the tree from the bottom of the screen translate(width / 2, height) # Draw a line 60 pixels h = height / 3 line(0, 0, 0, -h) # Move to the end of that line translate(0,-h) # Start the recursive branching! branch(h) @x += @dx if @x < 0 puts "Time after this iteration: " + (Time.now - @start_time).to_s end if @x > width || @x < 0 @dx = - @dx @x += @dx * 2 end end def branch(h) # Each branch will be 2/3rds the size of the previous one h *= 0.66 # All recursive functions must have an exit condition!!!! # Here, ours is when the length of the branch is 2 pixels or less if h > 2 push_matrix # Save the current state of transformation (i.e. where are we now) rotate(@theta) # Rotate by theta line(0, 0, 0, -h) # Draw the branch translate(0, -h) # Move to the end of the branch branch(h) # Ok, now call myself to draw two new branches!! pop_matrix # Whenever we get back here, we "pop" in order to restore the previous matrix state # Repeat the same thing, only branch off to the "left" this time! push_matrix rotate(- @theta) line(0, 0, 0, -h) translate(0, -h) branch(h) pop_matrix end end
Version data entries
5 entries across 5 versions & 1 rubygems