xxxxxxxxxx
113
let system;
/*
[coding challenge] fractal tree
variables : F
constants : +(PI/6) -(-PI/6) [(위치저장) ](위치불러오기)
axiom : F
rules : (F -> FF+ [+F-F-F]-[-F+F+F])
*/
function setup() {
createCanvas(500, 500);
background(51);
let rule = getAlgaeRule();
system = new LSystem(rule);
// exeT(t());
}
function exeT(func) {
let m = func;
let f1 = m.get("a");
f1();
}
function t() {
function f1() {
print("f1");
}
function f2() {
print("f2");
}
let m = new Map();
m.set("a", f1);
m.set("b", f2);
return m;
}
function mousePressed() {
system.generate();
}
function getFractalTreeRule() {
let axiom = "F";
let map = new Map();
map.set("F", "FF+[+FF-F-F]-[-F+F+F]");
let drawMap = new Map();
function moveToFirst() {
translate(width / 2, height);
}
function F() {
line(0, 0, 0, -this.len);
translate(0, -this.len);
}
// 졸려서 다음에 더 하기..
let rule = new Rule(map, axiom);
return rule;
}
drawProduction() {
// matrix 초기화 (그림 세팅 초기화라고 봐도 됨)
resetMatrix();
// 다시 처음그리는 구간으로 이동
translate(width / 2, height);
stroke(255);
for (let i = 0; i < this.production.length; i++) {
switch (this.production[i]) {
case "F": // F: 선 그리기
line(0, 0, 0, -this.len);
translate(0, -this.len);
break;
case "+": // 각도 우회전
// random(5, 7)
rotate(PI / random(5, 7));
break;
case "-": // 각도 좌회전
rotate(-PI / random(5, 7));
break;
case "[": // 그리기 포인트 save
push();
break;
case "]": // 그리기 포인트 load
pop();
break;
}
}
}
function getAlgaeRule() {
let axiom = "A";
let map = new Map();
map.set("A", "AB");
map.set("B", "A");
let rule = new Rule(map, axiom);
return rule;
}