xxxxxxxxxx
/**
Tahnks for graet library "BMWalker.js"!
https://github.com/tetunori/BMWalker.js
*/
let pal = [
['#87DC81','#153231'],
['#FBB503','#4D196F'],
['#F76D48','#024A41'],
['#EDE51C','#16526E'],
];
let c1, c2;
let walkers;
let N=4;
let conn = [0,4,7,11,14];
// let conn = [14];
let win, eff;
let seed=0;
function setup() {
createCanvas(w=600,w);
background(230);
colorMode(HSB,360,100,100,100);
// angleMode(DEGREES);
// noLoop();
let _pal = random(pal);
c2 = _pal[0];
c1 = _pal[1];
bgColor = c1;
win = genWindow();
eff = genEffect();
seed = random(1e+4);
walkers = [];
let wa = Math.PI/2; // wa=0;
let wh = 80;
let ws = 0.8;
let we = 0;
let wr = 0;
let pos = createVector(w/2,w/2);
// wa = random(-Math.PI, Math.PI);
// we = random(-Math.PI, Math.PI);
we = random(0, Math.PI/2); we = Math.PI/3; // we = 0;
for (let i = 0; i < N; i++) {
wh = map(i,0,N-1,80,260);
ws = map(i,0,N-1,1.5,0.5);
// wa = random(-Math.PI, Math.PI);
// we = random(-Math.PI, Math.PI);
// wr = random(-Math.PI, Math.PI);
walkers[i] = new myWalker(wh);
// walkers[i].updateParam('position', pos);
walkers[i].updateParam('walkerHeight', wh);
walkers[i].updateParam('speed', ws);
walkers[i].updateParam('azimuth', wa);
walkers[i].updateParam('elevation', we);
// walkers[i].updateParam('roll', wr);
}
background(c1);
}
function draw() {
background(c1);
randomSeed(seed);
let h = hue(c2);
let s = saturation(c2);
let b = brightness(c2);
// noStroke(); fill(hue(c1),saturation(c1),brightness(c1),60);
// rect(0,0,w,w);
walkers.forEach((w)=>{ w.update(); });
// walkers.forEach((ww)=>{ ww.forEach((w)=>{ w.update(); }) });
let wp = [];
conn.forEach((c) => { wp[c] = createVector(walkers[N-1].markers[c].x, walkers[N-1].markers[c].y); });
drawWalkerFructal(
// createVector(walkers[N-1].markers[8].x+walkers[N-1].pos.x,walkers[N-1].markers[8].y+walkers[N-1].pos.y),
createVector(walkers[N-1].pos.x,walkers[N-1].pos.y),
wp,N-2);
// walkers.forEach((w)=>{ w.draw(); });
push();
translate(-walkers[N-1].markers[8].x, -walkers[N-1].markers[8].y);
stroke(h,s,b); fill(h,s,b,15); strokeWeight(1); // noFill();
walkers[N-1].drawPolygon();
stroke(c2); fill(c2); strokeWeight(1); // noFill();
walkers[N-1].draw();
pop();
// for (let i = 0; i < N-1; i++) {
// push();
// translate(-w/2+w/4*(i+1),0);
// let wp = [];
// conn.forEach((c) => { wp[c] = createVector(walkers[i+1].markers[c].x, walkers[i+1].markers[c].y); });
// drawWalkerFructal(wp,i);
// stroke(c2); fill(c2); strokeWeight(1); noFill();
// // walkers.forEach((w)=>{ w.draw(); });
// walkers[i+1].drawPolygon();
// walkers[i+1].draw();
// pop();
// }
for (let i = 0; i < N; i++) {
let wa = walkers[i].azimuth;
walkers[i].updateParam('azimuth', wa+1e-2);
// walkers[i].updateParam('elevation', we);
}
// image(win,0,0);
// image(eff,0,0);
}
function drawWalkerFructal(o,p,n=0){
let h = hue(c2);
let s = saturation(c2);
let b = brightness(c2);
let r = 3;
if (n>0) {
conn.forEach((c) => {
let new_p = [];
let wm = walkers[n].markers;
for (let i = 0; i < 15; i++) {
new_p[i] = p5.Vector.add(p[c], createVector(wm[i].x, wm[i].y));
// new_p[i] = p5.Vector.add(new_p[i], createVector(-wm[0].x, -wm[0].y));
}
drawWalkerFructal(createVector(walkers[n].pos.x+p[c].x*r, walkers[n].pos.y+p[c].y*r), new_p, n-1);
});
}
conn.forEach((c) => {
push();
translate(p[c].x*r, p[c].y*r);
translate(-walkers[n].markers[8].x, -walkers[n].markers[8].y);
stroke(h,30+n*10,b+n*10,100/N*n+10); fill(h,30+n*10,b+n*10,100/N*n/4); strokeWeight(1); // noFill();
noFill();
walkers[n].drawPolygon();
pop();
stroke(h,30+n*10,b+n*10,100/N*n+10); fill(h,30+n*10,b+n*10,100/N*n); strokeWeight(1); // noFill();
noFill();
// line(p[c].x*3+walkers[n].pos.x, p[c].y*3+walkers[n].pos.y, o.x, o.y);
line(p[c].x*r+walkers[n].pos.x, p[c].y*r+walkers[n].pos.y,
o.x - walkers[n+1].markers[8].x + walkers[n+1].markers[c].x,
o.y - walkers[n+1].markers[8].y + walkers[n+1].markers[c].y);
});
}