xxxxxxxxxx
var pathPoints = []
function setup() {
createCanvas(800,800)
background(0);
}
function draw() {
//stroke(255,opacity);
translate(400,height);
//var angle = random(0,6.14);
var angle = 0.6//random(0.5,0.7);
let opacity = 50
branch(281,angle,opacity);
}
function branch(len,theta,opacity) {
//line(0,0,0,-len);
var start = createVector(0,0)
var end = createVector(0,-len)
drawComplexPath(start,end,opacity)
translate(0,-len);
opacity *= 0.7
//var a = random(1.0);
var a = 0 //random(0,0.1)
if(len>2){
push();
rotate(theta);
branch(0.618*len,theta,opacity);
pop();
push();
rotate(-theta);
branch(0.618*len,theta,opacity);
pop();
}
}
function drawComplexPath(start,end,opacity) {
let pathPoints = [start,end]
for(var j=0;j<6;j++){
pathPoints = complexifyPath(pathPoints);
}
//draw the path
stroke(255,opacity);
for(var i=0;i<pathPoints.length -1;i++){
var v1 = pathPoints[i];
var v2 = pathPoints[i+1];
line(v1.x,v1.y,v2.x,v2.y);
}
}
function complexifyPath(pathPoints){
//create a new path array from the old one by adding new points inbetween the old points
var newPath = [];
for(var i=0;i<pathPoints.length -1;i++){
var v1 = pathPoints[i];
var v2 = pathPoints[i+1];
var midPoint = p5.Vector.add(v1, v2).mult(0.5);
var distance = v1.dist(v2);
//the new point is halfway between the old points, with some gaussian variation
var standardDeviation = 0.125*distance;
var v = createVector(randomGaussian(midPoint.x,standardDeviation),randomGaussian(midPoint.y,standardDeviation))
append(newPath,v1);
append(newPath,v);
}
//don't forget the last point!
append(newPath,pathPoints[pathPoints.length-1]);
return newPath;
}