Sha256: a64f7fc48b4b852f11f953927cb7545ba2cba5465ed0f6ed11c8be97465f0605

Contents?: true

Size: 1.02 KB

Versions: 6

Compression:

Stored size: 1.02 KB

Contents

# The Fern Fractal
# by Luis Correia

attr_reader :boundary
  
def setup
  size 500, 500
  @boundary = Boundary.new(0, width )
  no_loop
  puts "Be patient. This takes about 10 seconds to render."
end

def draw
  background 0
  load_pixels
  x0, y0 = 0.0, 0.0
  x, y, r = 0.0, 0.0, 0.0
  i, j = 0, 0
  max_iterations = 200000
  
  max_iterations.times do
    r = rand(0 .. 100.0)
    if r <= 1
      x = 0.0
      y = 0.16 * y0
    elsif r <= 7
      x = 0.2 * x0 - 0.26 * y0
      y = 0.23 * x0 + 0.22 * y0
    elsif r <= 14
      x = -0.15 * x0 + 0.28 * y0
      y = 0.26 * x0 + 0.24 * y0
    else 
      x = 0.85 * x0 + 0.04 * y0
      y = -0.004 * x0 + 0.85 * y0 + 1.6
    end
    
    i = height - (y * 45).to_i
    j = width / 2 + (x * 45).to_i
    pixels[i * height + j] += 2560 if (boundary.include?(i) && boundary.include?(j))
    x0, y0 = x, y
  end
  
  update_pixels
end

# Abstract boundary checking to this
# lightweight class
#
  
Boundary = Struct.new(:lower, :upper) do
  def include? x
    (lower ... upper).cover? x
  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
ruby-processing-2.6.2 samples/contributed/fern.rb
ruby-processing-2.6.1 samples/contributed/fern.rb
ruby-processing-2.6.0 samples/contributed/fern.rb
ruby-processing-2.5.1 samples/contributed/fern.rb
ruby-processing-2.5.0 samples/contributed/fern.rb
ruby-processing-2.4.4 samples/contributed/fern.rb