Jump to content

Hilbert curve: Difference between revisions

(→‎{{header|Processing}}: removing non-essential 'save' feature)
Line 2,398:
# frozen_string_literal: true
 
load_library :grammar
attr_reader :hilbert
def settings
Line 2,413 ⟶ 2,414:
background 0
hilbert.render
end
 
class Grammar
attr_reader :axiom, :rules
def initialize(axiom, rules)
@axiom = axiom
@rules = rules
end
 
def apply_rules(prod)
prod.gsub(/./) { |token| rules.fetch(token, token) }
end
 
def generate(gen)
return axiom if gen.zero?
 
prod = axiom
gen.times do
prod = apply_rules(prod)
end
prod
end
end
 
Line 2,490 ⟶ 2,469:
@draw_length *= 0.6**gen
@production = @grammar.generate gen
end
end
</lang>
 
The grammar library:-
 
<ruby lang>
# common library class for lsystems in JRubyArt
class Grammar
attr_reader :axiom, :rules
def initialize(axiom, rules)
@axiom = axiom
@rules = rules
end
 
def apply_rules(prod)
prod.gsub(/./) { |token| rules.fetch(token, token) }
end
 
def generate(gen)
return axiom if gen.zero?
 
prod = axiom
gen.times do
prod = apply_rules(prod)
end
prod
end
end
Anonymous user
Cookies help us deliver our services. By using our services, you agree to our use of cookies.