Anonymous user
Hilbert curve: Difference between revisions
→{{header|Ruby}}
(→{{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
|