Skip to content

Commit 0531523

Browse files
committed
sierpinski arrowhead
1 parent 3b2a59d commit 0531523

File tree

2 files changed

+84
-3
lines changed

2 files changed

+84
-3
lines changed

processing_app/topics/lsystems/data/java_args.txt

Lines changed: 0 additions & 3 deletions
This file was deleted.
Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
2+
load_libraries :grammar
3+
attr_reader :points
4+
5+
def setup
6+
sketch_title 'Sierpinski Arrowhead'
7+
sierpinski = SierpinskiArrowhead.new(Vec2D.new(width * 0.15, height * 0.7))
8+
production = sierpinski.generate 6 # 6 generations looks OK
9+
@points = sierpinski.translate_rules(production)
10+
no_loop
11+
end
12+
13+
def draw
14+
background(0)
15+
render points
16+
end
17+
18+
def render(points)
19+
no_fill
20+
stroke 200.0
21+
stroke_weight 3
22+
begin_shape
23+
points.each_slice(2) do |v0, v1|
24+
v0.to_vertex(renderer)
25+
v1.to_vertex(renderer)
26+
end
27+
end_shape
28+
end
29+
30+
def renderer
31+
@renderer ||= GfxRender.new(g)
32+
end
33+
34+
def settings
35+
size(800, 800)
36+
end
37+
38+
# SierpinskiArrowhead class
39+
class SierpinskiArrowhead
40+
include Processing::Proxy
41+
attr_reader :draw_length, :pos, :theta, :axiom, :grammar
42+
DELTA = PI / 3 # 60 degrees
43+
def initialize(pos)
44+
@axiom = 'XF' # Axiom
45+
rules = {
46+
'X' => 'YF+XF+Y',
47+
'Y' => 'XF-YF-X'
48+
}
49+
@grammar = Grammar.new(axiom, rules)
50+
@theta = 0
51+
@draw_length = 200
52+
@pos = pos
53+
end
54+
55+
def generate(gen)
56+
@draw_length = draw_length * 0.6**gen
57+
grammar.generate gen
58+
end
59+
60+
def forward(pos)
61+
pos + Vec2D.from_angle(theta) * draw_length
62+
end
63+
64+
def translate_rules(prod)
65+
[].tap do |pts| # An array to store line vertices as Vec2D
66+
prod.scan(/./) do |ch|
67+
case ch
68+
when 'F'
69+
new_pos = forward(pos)
70+
pts << pos << new_pos
71+
@pos = new_pos
72+
when '+'
73+
@theta += DELTA
74+
when '-'
75+
@theta -= DELTA
76+
when 'X', 'Y'
77+
else
78+
puts("character #{ch} not in grammar")
79+
end
80+
end
81+
end
82+
end
83+
end
84+

0 commit comments

Comments
 (0)