mirror of
https://github.com/Cametendo/EMVs-Creative-coding.git
synced 2026-06-20 17:45:02 +02:00
69 lines
1.4 KiB
JavaScript
69 lines
1.4 KiB
JavaScript
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);
|
|
}
|