fractalkitty looking for math? fractalkitty.com

100 days of code

lightPollution

#random#trig#grid#interactive#animation#accumulates#math#cellular-automata#light

rulesdArraypolygonanglerandomDeadswitchDead

let rules=0 ;
let cnt=0,n=256;
let dArray=[];
function setup(){
  createCanvas(600,600);
  r=10;
  co=floor(width/(2*r));
  ro=floor(height/(2*r));
  randomDead();
  frameRate(10);
  background(0);
}
function draw(){
  scale(1,0.7)
  noStroke();
  translate(width/3-130,width/2-130);
  cnt=0;
  for (let j=0;j<=co;j++){//columns
    for (let i=ro;i>=0;i--){//rows
      x=r*j*1.5;
      y=-r*12+r*sqrt(3)*i+r*j/1.15;
      if(dArray[cnt]===0){
        fill(0,0,0);
        circle(x,y,r/10)
        fill(0,0,0,5);
        
      }
      if(dArray[cnt]===1){
        fill(255,255,255);
        circle(x,y,r/10)
        fill(255,255,255,5)
      }
      
      circle(x,y,r*5)
      circle(x,y,r*4)
      circle(x,y,r*3)
      circle(x,y,r*2)
      circle(x,y,r*1)

      cnt=cnt+1  
  }
}
  switchDead()
}
function polygon(x, y, radius, npoints) {
  let angle = TWO_PI / npoints;
  beginShape();
  for (let a = 0; a < TWO_PI; a += angle) {
    let sx = x + cos(a) * radius;
    let sy = y + sin(a) * radius;
    vertex(sx, sy);
  }
  endShape(CLOSE);
}

function randomDead(){
  n = (co+1)*(ro+1);
  dArray=[]
  for(let i=0;i<n;i++){
    tmp=random(-1,1);
    if(tmp<=0){
      dArray[i]=1;
    }
    if(tmp>0){
      dArray[i]=0;
    }
  }
}

function switchDead(){
  tmp =0
    for(let k=0;k<n;k++){
      if(dArray[k]===true){
        tmp=tmp+1;
      }
    }
  if(tmp===0){
  }
  cnt1=0
  for (let j=0;j<=co;j++){//columns
    for (let i=ro;i>=0;i--){//rows
      if(j!=0&&i!=0&&i!=ro&&j!=co){
      sumd = dArray[cnt1+co+1]+dArray[cnt1+co+2]+dArray[cnt1-co-1]+dArray[cnt1-co-2]+dArray[cnt1+1]+dArray[cnt1-1];  
      }
      if(i===0&&j!=0&&j!=co){
        sumd = dArray[cnt1+co+1]+dArray[cnt1-co-1]+dArray[cnt1-co-2]+dArray[cnt1-1]; 
      }
      if(i===ro&&j!=0&&j!=co){
        sumd = dArray[cnt1+co+1]+dArray[cnt1-co-1]+dArray[cnt1+co+2]+dArray[cnt1+1]; 
      }
      if(j===co&&i!=0&&i!=ro){
        sumd = dArray[cnt1-co-1]+dArray[cnt1-co-2]+dArray[cnt1+1]+dArray[cnt1-1]; 
      }
      if(j===0&&i!=0&&i!=ro){
        sumd = dArray[cnt1+co+1]+dArray[cnt1+co+2]+dArray[cnt1+1]+dArray[cnt1-1];   
      }
      if(i===0&&j===0){
        sumd = dArray[cnt1+co+1]+dArray[cnt1+1];  
      }
      if(i===0&&j===co){
        sumd = dArray[cnt1-1]+dArray[cnt1-co-1]+dArray[cnt1-co-2];  
      }
      if(i===ro&&j===0){
        sumd = dArray[cnt1+1]+dArray[cnt1+co+1]+dArray[cnt1+co+2];  
      }
      if(i===ro&&j===co){
        sumd = dArray[cnt1+1]+dArray[cnt1-co-1];  
      }
     if (rules===0){
          if (dArray[cnt1] === 1 && (sumd === 6 || sumd === 5 || sumd === 1 || sumd === 0)) {
          dArray[cnt1] = 0;
        } else if (dArray[cnt1] === 0 && (sumd === 4)) {
          dArray[cnt1] = 1;
        }
      }
      if (rules===1){
          if (dArray[cnt1] === 1 && (sumd === 6 || sumd === 5 || sumd === 2 || sumd === 1 || sumd === 0)) {
          dArray[cnt1] = 0;
        } else if (dArray[cnt1] === 0 && ( sumd === 3 ||sumd===4||sumd===5)) {
          dArray[cnt1] = 1;
        }
      }
      if (rules===2){
          if (dArray[cnt1] === 1 && (sumd === 6 || sumd === 5 ))   {
          dArray[cnt1] = 0;
        } else if (dArray[cnt1] === 0 && (sumd === 3)) {
          dArray[cnt1] = 1;
        }
      }
      if (rules===3){
          if (dArray[cnt1] === 1 && (sumd === 1 || sumd === 2 || sumd === 3))   {
          dArray[cnt1] = 0;
        } else if (dArray[cnt1] === 0 && (sumd === 3||sumd===4)) {
          dArray[cnt1] = 1;
        }
      }
      if (rules===4){
          if (dArray[cnt1] === 1 && (sumd === 3 ||sumd === 4 || sumd === 5 || sumd === 6))   {
          dArray[cnt1] = 0;
        } else if (dArray[cnt1] === 0 && (sumd===0||sumd===1||sumd===2)) {
          dArray[cnt1] = 1;
        }
      }
      if (rules===5){
          if (dArray[cnt1] === 1 && (sumd === 2 ||sumd === 3 ||sumd === 4 || sumd === 5 || sumd === 6))   {
          dArray[cnt1] = 0;
        } else if (dArray[cnt1] === 0 && (sumd===0||sumd===1||sumd===2)) {
          dArray[cnt1] = 1;
        }
      }
      if (rules===6){
          if (dArray[cnt1] === 1 && (sumd === 4 || sumd === 5 || sumd === 6))   {
          dArray[cnt1] = 0;
        } else if (dArray[cnt1] === 0 && (sumd===3||sumd===4)) {
          dArray[cnt1] = 1;
        }
      }
      if (rules===7){
          if (dArray[cnt1] === 1 && (sumd === 6 || sumd === 5 || sumd === 1 || sumd === 0)) {
          dArray[cnt1] = 0;
        } else if (dArray[cnt1] === 0 && (sumd === 1)) {
          dArray[cnt1] = 1;
        }
      }
      if (rules===8){
          if (dArray[cnt1] === 1 && (sumd === 6   || sumd === 0)) {
          dArray[cnt1] = 0;
        } else if (dArray[cnt1] === 0 && (sumd === 0)) {
          dArray[cnt1] = 1;
        }
      }
      if (rules===9){
          if (dArray[cnt1] === 1 && (sumd === 3 )) {
          dArray[cnt1] = 0;
        } else if (dArray[cnt1] === 0 && (sumd === 0)) {
          dArray[cnt1] = 1;
        }
      }
      if (rules===10){//adds a random death component to the game
          if (dArray[cnt1] === 1 && (sumd === 3 || random(0,1.001)>1)) {
          dArray[cnt1] = 0;
        } else if (dArray[cnt1] === 0 && (sumd === 2||sumd===1 )) {
          dArray[cnt1] = 1;
        }
      }
      cnt1 = cnt1 + 1  
  }
  }
  stroke(255);
  fill(0 )
  push()
  scale(1,1)
  for(let i=0;i<=10 ;i++){
    circle(width/2+190,30*i-70,10)
  }
  fill(100)
  circle(width/2+190,30*rules-70,10)
  pop()
}
function mousePressed(){
    randomDead();
}

function keyPressed() {
  if (keyCode === 32 || keyCode===40) {
    rules = rules+1;
    if (rules>10 ){
      rules=0;
    }
    randomDead();  
  }
  if (keyCode === 38){
  rules = rules-1;
    if (rules<0 ){
      rules=10;
    }
    randomDead(); 
  } 
}