Revised as of 27 December 2009 to use my custom grammar library. See Cesàro fractal in a later post for code.
##
# Lindenmayer System in ruby-processing by Martin Prout
###
require 'dragon'
class Dragon_Test < Processing::App
load_libraries 'grammar'
attr_reader :dragon
def setup
size 600, 480
@dragon = Dragon.new
dragon.create_grammar 10
no_loop
end
def draw
background 0
dragon.render
end
end
############################
# dragon.rb
# Dragon Fractal
###########################
class Dragon
include Processing::Proxy
attr_accessor :axiom, :grammar, :start_length, :theta, :production, :draw_length
def initialize
@axiom = "FX"
@grammar = Grammar.new(axiom)
grammar.add_rule "X", "+FX--FY+" # replace X rule see 'grammar' library
grammar.add_rule "Y", "-FX++FY-" # replace Y rule see 'grammar' library
@start_length = 240.0
@draw_length = start_length
@theta = (Math::PI/180) * 45.0 # convert degrees to radians
@production = axiom
stroke 255
end
def render # using affine transforms
translate(width/3, height/3)
rotate theta * 2
production.each_char do |element|
case element
when 'F'
line(0, 0, 0, -draw_length)
translate(0, -draw_length)
when '+'
rotate theta
when '-'
rotate -theta
when 'X','Y' # do nothing except recognize the grammar
else
puts "Character '#{element}' is not in grammar"
end
end
end
##############################
# create grammar from axiom and
# rules (adjust scale)
##############################
def create_grammar(gen)
@draw_length *= 0.64**gen
@production = grammar.generate gen
end
end
Experiments with ruby-processing (processing-2.2.1) and JRubyArt for processing-3.0
Sunday 22 November 2009
Dragon Fractal Using L-Systems and ruby-processing
Labels:
heighway dragon,
Lindenmayer system,
ruby processing
Subscribe to:
Post Comments (Atom)
Followers
Blog Archive
-
▼
2009
(50)
-
▼
November
(18)
- Koch curve using l-systems
- Towards a forest, or too many matrix calls
- Seaweed using Lindenmayer system on ruby processing
- A basic example of a plant Lindenmayer systems in...
- Pentagonal Fractal
- Minkowski island using L-System in ruby processing
- Sierpinski Fractal Implemented in ruby-processing ...
- Snake Kolam Ruby Processing
- Penrose Snowflake L-Systems using ruby-processing
- Dragon Fractal Using L-Systems and ruby-processing
- Koch Island Using Lindemayer System in Ruby Proces...
- Lindenmayer system in ruby-processing
- Tessellated "curvy" triangles in ruby-processing
- Dynamic rand with ruby-processing context-free DSL
- Flower in ruby-processing DSL
- Heighway Dragon in ruby-processing context free DSL
- Lévy curve implemented in ruby-processing context ...
- jEdit as a cross platform GUI?
-
▼
November
(18)
About Me
- monkstone
- I have developed JRubyArt and propane new versions of ruby-processing for JRuby-9.1.5.0 and processing-3.2.2
No comments:
Post a Comment