fractalkitty looking for math? fractalkitty.com

100 days of code

kites_Day20

#random#trig#interactive#animation#sky

kiteArrayXkiteArrayYkiteArrayTkiteArrayUnKiteoldxoldyoldx2oldy2drawKitestepKitecloud

let kiteArrayX = [];
let kiteArrayY = [];
let kiteArrayT = [];
let kiteArrayU = [];
let nKite = 1,oldx = 0,oldy= 0,oldx2=0,oldy2=0,cnt = 0;
function setup() {
  createCanvas(500, 500);
  angleMode(DEGREES);
  kiteArrayX[0]=-40
  kiteArrayY[0]=-40
  kiteArrayT[0]=20
  kiteArrayU[0]=0
  oldx1 = random(-width/2,width/2)
  oldy1 = random(-width/3,0)
  oldx2 = random(-width/2,0)
  oldx3 = random(-width/3,100)
}

function draw() {
  translate(width/2,width/2)
  background(0,200,220);
  fill(50,220,180)
  ellipse(0,width/2,width*2,100)
  cloud(oldx1,oldy1);
  cloud(oldx2,oldy2);
  stroke(0);
  push()
  if (nKite>30){
    translate(0,-cnt)
    cnt = cnt+1
  }
  for (let i=0;i<nKite;i++){
    t = atan(-kiteArrayX[i]/(-width/2-kiteArrayY[i]))
    drawKite(kiteArrayX[i],kiteArrayY[i],kiteArrayT[i])
  }
  stepKite()
  fill(100,100,100)
  circle(0,width/2-10,20)
  pop()
  if(cnt > width){
    cnt = 0
    nKite = 1
    kiteArrayX = []
    kiteArrayY = []
    kiteArrayT = []
    kiteArrayU = []
    kiteArrayX[0]=random(-100,100)
    kiteArrayY[0]=random(-100,100)
    kiteArrayT[0]=20
    kiteArrayU[0]=0
    
  }
}
function drawKite(x,y,c){
  push()
  fill(80+c/2,140-c/2,255-c/2)
  translate(x,y)
  if(x>0){
    rotate(90-atan((y-width/2)/(-x)))
  }
  if(x<=0){
    rotate(270-atan((y-width/2)/(-x)))
  }
  
  beginShape()
  vertex(0,-50)
  vertex(20,-40)
  vertex(0,0)
  vertex(-20,-40)
  endShape(CLOSE)
  pop()
  line(x,y,0,width/2)
}

function mousePressed(){
  nKite=nKite+1
  kiteArrayX[nKite-1]=-width/2+mouseX
  kiteArrayY[nKite-1]=-width/2+mouseY
  kiteArrayT[nKite-1]=-width/2+mouseX
  kiteArrayU[nKite-1]=-width/2+mouseY
}

function stepKite(){
  t = frameCount;
  for (let i=0;i<nKite;i++){
    kiteArrayX[i]=kiteArrayX[i]+kiteArrayT[i]*sin(t+kiteArrayX[i])/1000
    kiteArrayY[i]=kiteArrayY[i]+kiteArrayU[i]*cos(t)/1000
  }
}

function cloud(a,b){
  oldx = a
  oldy = b
  fill(255,255,255,150)
  noStroke()
  push()
  translate(-width+(frameCount/2)%(width*3),0)
  beginShape()
  for (let i=0;i<20;i++){
    vertex(oldx,oldy)
    oldx = oldx-30*sin(10*i) + 5*cos(6*i);
    oldy = oldy-5*cos(10*i)
  }
  endShape(CLOSE)
  pop()
}