-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathl-system.js
101 lines (81 loc) · 1.58 KB
/
l-system.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
var len = 10 ;
var angle ;
var rules = [] ;
/* Koch curve */
var axiom = "F" ;
rules[0] = {
a: "F",
b: "F+F-F-F+F"
} ;
var angle = 90 ;
/* Sierpinski triangle
var axiom = "F-G-G" ;
rules[0] = {
a: "F",
b: "F-G+F+G-F"
} ;
rules[1] = {
a: "G",
b: "GG"
} ;
var angle = 120 ;*/
/* Tree
var axiom = "F" ;
rules[0] = {
a: "F",
b: "FF+[+F-F-F]-[-F+F+F]"
} ;
var angle = 25 ; */
var sentence = axiom ;
function generate() {
var nextSentence = "" ;
// len *= 0.5 ;
for (var i = 0 ; i < sentence.length ; i++) {
var current = sentence.charAt(i);
var found = false ;
for (var j = 0 ; j < rules.length ; j++) {
if (current == rules[j].a) {
nextSentence += rules[j].b ;
found = true ;
break ;
}
}
if (!found) {
nextSentence += current ;
}
}
sentence = nextSentence ;
createP(sentence) ;
turtle() ;
}
function turtle() {
background(51) ;
stroke(255) ;
translate(width/2,height-10) ;
for (var i=0 ; i<sentence.length; i++) {
var current = sentence.charAt(i) ;
if (current=="F" || current=="G") {
line(0,0,0,-len) ;
translate(0,-len)
} else if (current == "+") {
rotate(angle) ;
} else if (current == "-") {
rotate(-angle) ;
} else if (current == "[") {
push() ;
} else if (current == "]") {
pop() ;
}
}
}
function setup() {
createCanvas(2000,1200);
background(51);
turtle() ;
createP(sentence) ;
angle = radians(angle) ;
var button = createButton("generate") ;
button.mousePressed(generate) ;
}
function draw() {
}