mirror of
https://github.com/Cametendo/EMVs-Creative-coding.git
synced 2026-06-20 17:45:02 +02:00
commit.sh
This commit is contained in:
68
week-4/l-system.js
Normal file
68
week-4/l-system.js
Normal file
@@ -0,0 +1,68 @@
|
||||
let angle;
|
||||
let axiom = "F";
|
||||
let sentence = axiom;
|
||||
let len = 100;
|
||||
let rules = [];
|
||||
rules[0] = {
|
||||
a: "F",
|
||||
// b: "FF-[-F-F-F]+[+F+F+F]",
|
||||
c: "FF*[*F/F/F]/[/F*F*F]",
|
||||
};
|
||||
|
||||
function generate() {
|
||||
len *= 0.5;
|
||||
let nextSentence = "";
|
||||
for (let i = 0; i < sentence.length; i++) {
|
||||
let current = sentence.charAt(i);
|
||||
let found = false;
|
||||
for (let j = 0; j < rules.length; j++) {
|
||||
if (current == rules[j].a) {
|
||||
found = true;
|
||||
nextSentence += rules[j].b;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!found) {
|
||||
nextSentence += current;
|
||||
}
|
||||
}
|
||||
sentence = nextSentence;
|
||||
createP(sentence);
|
||||
turtle();
|
||||
}
|
||||
|
||||
function turtle() {
|
||||
background(51);
|
||||
resetMatrix();
|
||||
translate(width / 2, height);
|
||||
stroke(255, 100);
|
||||
for (let i = 0; i < sentence.length; i++) {
|
||||
let current = sentence.charAt(i);
|
||||
if (current == "F") {
|
||||
line(0, 0, 0, -len);
|
||||
translate(0, -len);
|
||||
} else if (current == "+") {
|
||||
rotate(angle);
|
||||
} else if (current == "-") {
|
||||
rotate(-angle);
|
||||
} else if (current == "*") {
|
||||
rotate(angle * 2);
|
||||
} else if (current == "/") {
|
||||
rotate(angle / 2);
|
||||
} else if (current == "[") {
|
||||
push();
|
||||
} else if (current == "]") {
|
||||
pop();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function setup() {
|
||||
createCanvas(400, 400);
|
||||
angle = radians(10);
|
||||
background(51);
|
||||
createP(axiom);
|
||||
turtle();
|
||||
let button = createButton("generate");
|
||||
button.mousePressed(generate);
|
||||
}
|
||||
Reference in New Issue
Block a user