xxxxxxxxxx
let pathPoints = []
let startTime = 0.0;
let drawTime = 0.0;
function setup() {
createCanvas(650, 650);
background(0);
}
function draw() {
//create the path
pathPoints = circlePoints();
stroke(255,50);
//line(pathPoints[0].x,pathPoints[0].y,pathPoints[1].x,pathPoints[1].y);
// return;
for(let j=0;j<6;j++){
pathPoints = complexifyPath(pathPoints);
}
//draw the path
stroke(255,15);
for(let i=0;i<pathPoints.length -1;i++){
let v1 = pathPoints[i];
let v2 = pathPoints[i+1];
line(v1.x,v1.y,v2.x,v2.y);
}
}
function circlePoints() {
let r0 = 100;
let r1 = 100;
let t = ( millis() - startTime )*0.005;
let dt = t - drawTime;
// background(245);
//This is the inner ball
let center = createVector(0.5*width, 0.5*height);
//fill(255);
let orbit = createVector(cos(2.0*t),sin(2.0*t)).mult(r0) ;
let origin = p5.Vector.add(center, createVector(cos(3.0*t),sin(3.0*t)).mult(r0)) ;
let p1 = p5.Vector.add(center,orbit);
let p = p1.mult(2.0).sub(origin);
return [origin,p];
}
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;
}