fractalkitty looking for math? fractalkitty.com

early works

TreeRings

#random#trig#curves#interactive#math#plants

ringArrayXringArrayYnPointsringMakerringMakerInitdrawRing

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();
  
}