Sha256: 468d4544e7c6c98dd8fc5964d8c48046cfa2ebb8869c2b231474595590585e5d

Contents?: true

Size: 1.76 KB

Versions: 6

Compression:

Stored size: 1.76 KB

Contents

########################################################
# A Peano fractal implemented using a
# Lindenmayer System in ruby-processing by Martin Prout
########################################################
load_libraries :grammar, :fastmath, :vecmath

class Peano
  include Processing::Proxy 
  
  attr_reader :draw_length, :vec, :theta, :axiom, :grammar
  DELTA  = 60  # degrees
  def initialize vec
    @axiom = 'XF'       # Axiom
    rules = {
      'X' => 'X+YF++YF-FX--FXFX-YF+',      # LSystem Rules
      'Y' => '-FX+YFYF++YF+FX--FX-Y'
    }    
    @grammar = Grammar.new(axiom, rules)
    @theta   = 0  
    @draw_length = 100
    @vec = vec
  end
  
  def generate gen
    @draw_length = draw_length * 0.6**gen
    grammar.generate gen
  end
  
  def translate_rules(prod)
    points = []               # An empty array to store line vertices as Vec2D
    prod.each do |ch|
      case ch
      when 'F'
        points << vec.copy << Vec2D.new(vec.x += draw_length * DegLut.cos(theta), vec.y -= draw_length * DegLut.sin(theta))
      when '+'
        @theta += DELTA        
      when '-'
        @theta -= DELTA        
      when 'X', 'Y'        
      else
        puts("character #{ch} not in grammar")        
      end      
    end
    return points
  end
end

attr_reader :points, :renderer

def setup
  size(800, 800)
  @renderer = AppRender.new(self)
  peano = Peano.new(Vec2D.new(width * 0.65, height * 0.9))
  production = peano.generate 4                  # 4 generations looks OK
  @points = peano.translate_rules(production)  
  no_loop
end

def draw
  background(0)
  render points
end

def render points
  no_fill
  stroke 200.0
  stroke_weight 3
  begin_shape
  points.each_slice(2) do |v0, v1|
    v0.to_vertex(renderer) 
    v1.to_vertex(renderer)
  end
  end_shape 
end


Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
ruby-processing-2.6.3 samples/processing_app/topics/lsystems/peano.rb
ruby-processing-2.6.2 samples/processing_app/topics/lsystems/peano.rb
ruby-processing-2.6.1 samples/processing_app/topics/lsystems/peano.rb
ruby-processing-2.6.0 samples/processing_app/topics/lsystems/peano.rb
ruby-processing-2.5.1 samples/processing_app/topics/lsystems/peano.rb
ruby-processing-2.5.0 samples/processing_app/topics/lsystems/peano.rb