let ringArrayX = [];//Tree x variable
let ringArrayY = [];//Tree y variable
let nPoints = 15;//number of points in curves
function setup(){
cnv = createCanvas(620,620)//create canvas
noLoop();
angleMode(DEGREES);
}
function draw(){
background(random(10,70),random(10,70),random(10,70))//random background
translate(width/2,width/2)//make origin be in center
rIn = random(2,12)
nRings = int(random(10,50))//random number of rings
ringMakerInit(rIn,0.5);//initial ring
for (let i = 0;i<=nRings; i ++){//build array for each ring
v = random(3,20)
ringMaker(2,i);//ring function
}
for (let i = nRings;i>=0;i--){//draw each ring from the outside in
stroke(random(0,90),random(0,90),random(0,90));//random stroke color
strokeWeight(random(0.1,2))//random stroke size
fill(random(170,190),random(130,150),random(90,110))//random color for ring
drawRing(ringArrayX[i],ringArrayY[i]);//draw ring function
}
}
function ringMaker(m,n){
ringArrayX[n+1] = []
ringArrayY[n+1] = []
for (let i =0; i<=nPoints;i++){//create points for curve ring
ringArrayX[n+1][i] = ringArrayX[n][i] + random(v-m,v+m)*sin(i*(360/nPoints));
ringArrayY[n+1][i] = ringArrayY[n][i] + random(v-m,v+m)*cos(i*(360/nPoints));
}
}
function ringMakerInit(r,v){//initial growth
ringArrayX[0] = [];
ringArrayY[0] = [];
for (let i =0; i<=nPoints;i++){
ringArrayX[0][i] = random(r-v,r+v)*sin(i*(360/nPoints));
ringArrayY[0][i] = random(r-v,r+v)*cos(i*(360/nPoints));
}
}
function drawRing(X,Y){//draw ring
beginShape();
for (let i = 0;i<=nPoints;i++){
curveVertex(X[i],Y[i]);
}
curveVertex(X[1],Y[1]);
curveVertex(X[1],Y[1]);
endShape()
}
function mousePressed(){//reset with mousepress
translate(-width/2,-width/2)
draw();
}