Sha256: 98c122b56daa2b061ba234c9f6177c0eb4d037fd258852780e4063fe1fb89ce5

Contents?: true

Size: 1.99 KB

Versions: 11

Compression:

Stored size: 1.99 KB

Contents

# http://processing.org/learning/topics/tree.html
# by Joe Holt

require 'ruby-processing'

class Sketch < Processing::App
  
  def setup
    color_mode RGB, 1
    frameRate 30
    smooth
    @x = 0.0
    @dx = width / 100
    @start_time = Time.now
    @frame_time = nil
  end

  def radians(x)
      return x * (Math::PI / 180)
  end
  
  def draw
    t = Time.now
    if @frame_time
      fps = 1.0 / (t - @frame_time)
#     printf "%0.1ffps\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 = radians(a)
    # 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
      pushMatrix       # 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!!
      popMatrix        # 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!
      pushMatrix
      rotate(- @theta)
      line(0,0,0,-h)
      translate(0,-h)
      branch(h)
      popMatrix
    end
  end

end


Sketch.new(:width => 200, :height => 200, :title => "Auto Tree")

Version data entries

11 entries across 11 versions & 1 rubygems

Version Path
ruby-processing-1.0.11 samples/contributed/tree.rb
ruby-processing-1.0.10.1 samples/contributed/tree.rb
ruby-processing-1.0.9 samples/tree.rb
ruby-processing-1.0.1 samples/tree.rb
ruby-processing-1.0.2 samples/tree.rb
ruby-processing-1.0.3 samples/tree.rb
ruby-processing-1.0.4 samples/tree.rb
ruby-processing-1.0.5 samples/tree.rb
ruby-processing-1.0.6 samples/tree.rb
ruby-processing-1.0.7 samples/tree.rb
ruby-processing-1.0.8 samples/tree.rb