fractalkitty looking for math? fractalkitty.com

weekly creative coding

sashiko

#random#trig#interactive#home#wcc

patternDrawborder


let n=0;
let c;
let s=5
let t=true
function setup(){
  cnv = createCanvas(windowWidth, windowHeight);
  c=min(width,height);
  d = (c-20)/s
  stroke(250,250,255);
  noLoop();
}
function draw(){
  background(random(0,50),random(0,50),random(20,70));
  translate(width/2,height/2);
  if (t){
  for(let i=-s;i<s;i++){
    for(let j=-s;j<s;j++){
      push()
      translate(10+d*i,10+d*j)
      fill(random(0,50),random(0,50),random(20,70))
      noStroke()
      rect(0,0,d,d)
      strokeWeight(d/300)
      stroke(255,255,250)
 patternDraw(floor(random(0,18.9)),d)
      pop()
    }
  }
  }else{
    for(let i=-s;i<s;i++){
    for(let j=-s;j<s;j++){
      push()
      translate(10+d*i,10+d*j)
      fill(random(0,50),random(0,50),random(20,70))
      noStroke()
      d=int(random(c/s/2,c/s*2))
      rotate(random(0,PI))
      rect(0,0,d,d)
      stroke(255,255,250)
      strokeWeight(d/300)
 patternDraw(floor(random(0,18.9)),d)
      pop()
    }
  }
  }
}

function patternDraw(n,d){
  push()
  border();
  noFill();
  if(n===0){
    a=5;
    b=8;
    k=2;
    for(let k=1;k<6;k++){
      for(let i=0;i<=a;i++){
        for(let j=1;j<b;j++){
          x1=d/(a*2)+d/a*i +d/(a*2)*cos(PI+PI/b*j)
          x2=d/(a*2)+d/a*i +d/(a*2)*cos(PI+PI/b*(j+1)-PI/10)
          y1=d/(a)*k +d/(a*2)*sin(PI+PI/b*j)
          y2=d/(a)*k +d/(a*2)*sin(PI+PI/b*(j+1)-PI/10)
          if (x1>1&& x2<d){
            line(x1,y1,x2,y2 )
          }
           x1=d/a*i +d/(a*2)*cos(PI+PI/b*j+0.01)
          x2=d/a*i +d/(a*2)*cos(PI+PI/b*(j+1)-PI/10)
          y1=d/(a)*k-d/(a*2)+d/(a*2)*sin(PI+PI/b*j)
          y2=d/(a)*k-d/(a*2)+d/(a*2)*sin(PI+PI/b*(j+1)-PI/10)
          if (x1>1&& x2<d){
            line(x1,y1,x2,y2 )
          }
        }
      }
    }
  }
  if(n===1){
    a=int(random(3,10));
    b=13;
     for(let k=0;k<2*a;k++){
      for(let i=0;i<=a;i++){
        for(let j=1;j<b;j++){
          x1=d/(a*2)+d/a*i +d/(a*2)*cos(TWO_PI/b*j)
          x2=d/(a*2)+d/a*i +d/(a*2)*cos(TWO_PI/b*(j+1)-PI/10)
          y1=d/(a)*k +d/(a*2)*sin(TWO_PI/b*j)
          y2=d/(a)*k +d/(a*2)*sin(TWO_PI/b*(j+1)-PI/10)
          if (x1>1&& x2<d&&y1>0&&y2<d){
            line(x1,y1,x2,y2 )
          }
           x1=d/a*i +d/(a*2)*cos(TWO_PI/b*j+0.01)
          x2=d/a*i +d/(a*2)*cos(TWO_PI/b*(j+1)-PI/10)
          y1=d/(a)*k-d/(a*2)+d/(a*2)*sin(TWO_PI/b*j)
          y2=d/(a)*k-d/(a*2)+d/(a*2)*sin(TWO_PI/b*(j+1)-PI/10)
          if (x1>1&& x2<d&&y1>0&&y2<d){
            line(x1,y1,x2,y2 )
          }
        }
      }
    }
  }
  if(n===2){
    m=random(0.3,1.8);
    a=55
    for(let j=-30;j<30;j++)
    for(let i=0;i<a;i++){
      x1=d/a*i
      y1=m*x1-j*30
      x2=d/a*(i+1)-random(2,3)
      y2=m*x2-j*30
      if (x1>1&& x2<d&&y1>0&&y2<d){
        line(x1,y1,x2,y2)
      }
      x1=d/a*i
      y1=-m*x1+j*30
      x2=d/a*(i+1)-random(2,3)
      y2=-m*x2+j*30
      if (x1>1&& x2<d&&y1>0&&y2<d){
        line(x1,y1,x2,y2)
      }
    }
  }
  if(n===3){
    a=int(random(5,12))
    b=int(random(20,50))
    for(let i=0;i<a;i++){
      for(let j=0;j<b;j++){
        x1=i*d/a;
        y1=j*d/b;
        y2=(j+1)*d/b-random(2,4);
        line(x1,y1,x1,y2);
        x1=i*d/a;
        y1=j*d/b;
        y2=(j+1)*d/b-random(2,4);
        line(y1,x1,y2,x1);
      }
    }
  }
  if(n===4){
    m=int(random(4,10));
    a=int(random(30,50));
    b=int(random(10,20));
    for(let j=1;j<b;j++)
    for(let i=0;i<a;i++){
      x1=d/a*i
      y1=d/b*j+m*sin(i)
      x2=d/a*(i+1)-random(3,4)
      y2=d/b*j+m*sin(i+0.2)
      
      if (x1>1&& x2<d&&y1>0&&y2<d){
        line(x1,y1,x2,y2)
      }
    }
  }
  if(n===5){
    m=int(random(4,6));
    a=int(random(20,30));
    b=int(random(10,20));
    for(let j=1;j<b;j++)
    for(let i=0;i<a;i++){
      if(j%2===0){
        x1=d/a*i
        y1=d/b*j+m*cos(i)
        x2=d/a*(i+1)-random(3,4)
        y2=d/b*j+m*cos(i)
      }else{
        x1=d/a*i
        y1=d/b*j+m*sin(i)
        x2=d/a*(i+1)-random(3,4)
        y2=d/b*j+m*sin(i)
      }
      if (x1>1&& x2<d&&y1>0&&y2<d){
        line(x1,y1,x2,y2)
      }
    }
  }
  if(n===6){
    m=int(random(10,20));
    a=int(random(20,30));
    b=int(random(20,20));
    for(let k=-25;k<27;k+=5){
    for(let j=1;j<b;j++)
    for(let i=0;i<a;i+=0.4){
        x1=d/a*(i+k)+m*sin(i)
        y1=d/a*i+m*cos(i)
        x2=d/a*(i+k)+m*sin(i+0.1)
        y2=d/a*i+m*cos(i+0.1)
      if (x1>2&& x2<(d-2)&&y1>2&&y2<(d-2)){
        line(x1,y1,x2,y2)
      }
    }
    }
  }
  if(n===7){
    a=int(random(4,10))
    b=int(random(2,9))
    for(let k=0;k<b;k++){
    for(let i=1;i<a;i++){
      for(let j=0;j<TWO_PI;j+=3/(a+int(random(2,3)))){
        x1=(d/2)+d/(4*a)*i*sin(j);
        y1=d/2+d/(4*a)*i*cos(j);
        x2=d/2+d/(4*a)*i*sin(j+0.2);
        y2=d/2+d/(4*a)*i*cos(j+0.2);
        line(x1+d/4*sin(TWO_PI/b*k),y1+d/4*cos(TWO_PI/b*k),x2+d/4*sin(TWO_PI/b*k),y2+d/4*cos(TWO_PI/b*k))
        
        }
      }
    }
  }
  if(n===8){
    m=int(random(10,15));
    a=int(random(30,30));
    b=int(random(10,10));
    for(let j=1;j<b;j++)
    for(let i=0;i<a;i+=0.5){
      if(j%2===0){
        x1=d/a*i
        y1=d/b*j+m*cos(i-0.05)
        x2=d/a*(i+1)-random(3,4)
        y2=d/b*j+m*cos(i+0.2)
      }else{
        x1=d/a*i
        y1=d/b*j-m*cos(i-0.05)
        x2=d/a*(i+1)-random(3,4)
        y2=d/b*j-m*cos(i+0.2)
      }
      if (x1>1&& x2<d&&y1>0&&y2<d){
        line(x1,y1,x2,y2)
      }
    }
  }
  if(n===9){
    a=int(random(10,10))
    b=(d)/(a*3)
    for(let i=0;i<a;i+=1){
      for(let j=0;j<a*3;j+=2){
        x1=b*j
        y1=b*sqrt(j+i)+i*b;
        x2=b*j+random(3,5);
        if (x1>2&& x2<(d-2)&&y1>2&&y1<(d-2)){
          line(x1,y1,x2,y1)
        }
        x1=b*j
        y1=d-b*sqrt(j+i)-i*b;
        x2=b*j+random(3,5);
        if (x1>2&& x2<(d-2)&&y1>2&&y1<(d-2)){
          line(x1,y1,x2,y1)
        }
        
        x1=d-b*j
        y1=b*sqrt(j+i)+i*b;
        x2=d-b*j+random(3,5);
        if (x1>2&& x2<(d-2)&&y1>2&&y1<(d-2)){
          line(x1,y1,x2,y1)
        }
        x1=d-b*j
        y1=d-b*sqrt(j+i)-i*b;
        x2=d-b*j+random(3,5);
        if (x1>2&& x2<(d-2)&&y1>2&&y1<(d-2)){
          line(x1,y1,x2,y1)
        }
      }
    }
  }
  if(n===10){
    a=int(random(8,20))
    b=int(random(20,25))
    for(let j=1;j<=a;j++) {
      for(let i = 0; i<=b-(j*2);i++){
      x1=i*d/b
      x2=x1 -random(3,5)
        if (x1>2&& x2<d-2&&x2>0&&y1>2&&y2<d-2){
      line(x1,d/a*j,x2,d/a*j)
        }
        y1=d-i*d/b
      y2=y1 -random(3,5)
        if (x1>2&& x2<d-2&&x2>0&&y1>2&&y2<d-2){
      line(d-d/a*j,y2,d-d/a*j,y1)
        }
      
    }
    }
    a=int(random(8,20))
    b=int(random(20,25))
    for(let j=1;j<=a;j++) {
      for(let i = 0; i<=b-(j*2);i++){
      x1=i*d/b
      x2=x1 -random(3,5)
        if (x1>2&& x2<d-2&&x2>0&&y1>2&&y2<d-2){
      line(x1,d/a*j,x2,d/a*j)
        }
        y1=d-i*d/b
      y2=y1 -random(3,5)
        if (x1>2&& x2<d-2&&x2>0&&y1>2&&y2<d-2){
      line(d-d/a*j,y2,d-d/a*j,y1)
      }
      
    }
    }
    } 
  if(n===11){
    a=int(random(8,20))
    b=int(random(15,30))
    for(let j=0;j<=a;j++) {
      for(let i = 0; i<=b-(j*2);i++){
      x1=d-i*d/b
      x2=x1 +random(3,5)
        if (x1>1&& x2<(d)&&y1>2&&y2<(d)){
      line(x1,d/a*j/2,x2,d/a*j/2)
        }
        y1=d-i*d/b
      y2=y1 -random(3,5)
        if (x1>2&& x2<(d)&&y1>2&&y2<(d)){
      line(d-d/a*j/2,y2,d-d/a*j/2,y1)
        }
      x1=i*d/b
      x2=x1 -random(3,5)
        if (x1>2&& x2<(d)&&y1>2&&y2<(d)){
      line(x1,d-d/a*j/2,x2,d-d/a*j/2)
        }
      y1=i*d/b
      y2=y1 -random(3,5)
      if (x1>2&& x2<d-2&&x2>0&&y1>2&&y2<d-2&&y2>2&&y1<d-2){
      line(d/a*j/2,y2,d/a*j/2,y1)
      }
    }
    }
      

    } 
  if(n===12){
     m=int(random(10,15));
    a=int(random(10,30));
    b=int(random(5,15));
    for(let j=1;j<b;j++)
    for(let i=0;i<a;i+=0.5){
      if(j%2===0){
        x1=d/a*i
        y1=d/b*j+m*cos(i-0.05)*sin(i/2)
        x2=d/a*(i+1)-random(3,4)
        y2=d/b*j+m*cos(i+0.2)*sin(i/2)
      }else{
        x1=d/a*i
        y1=d/b*j-m*cos(i-0.05)*sin(i/2)
        x2=d/a*(i+1)-random(3,4)
        y2=d/b*j-m*cos(i+0.2)*sin(i/2)
      }
     if (x1>2&& x2<d-2&&x2>0&&y1>2&&y2<d-2&&y2>2&&y1<d-2){
        line(x1,y1,x2,y2)
      }
    }
  }
   if(n===13){
     m=int(random(10,15));
    a=int(random(10,30));
    b=int(random(5,15));
    for(let j=1;j<b;j++)
    for(let i=0;i<a;i+=0.5){
      if(j%2===0){
        x1=d/a*i
        y1=d/b*j+m*sin(i-0.05)
        x2=d/a*(i+1)-random(3,4)
        y2=d/b*j+m*cos(i/2+0.2)
      }else{
        x1=d/a*i
        y1=d/b*j-m*sin(i-0.05)
        x2=d/a*(i+1)-random(3,4)
        y2=d/b*j-m*cos(i/2+0.2)
      }
      if (x1>2&& x2<d-2&&x2>0&&y1>2&&y2<d-2&&y2>2&&y1<d-2){
        line(x1,y1,x2,y2)
      }
    }
  }
  if(n===14){
     m=int(random(10,15));
    a=int(random(10,30));
    b=int(random(5,15));
    for(let j=1;j<b;j++)
    for(let i=0;i<a;i+=0.5){
      if(j%2===0){
        x1=d/a*i
        y1=d/b*j+m*sin(i-0.05)-m/2*sin(i)
        x2=d/a*(i+1)-random(3,4)
        y2=d/b*j+m*sin(i-0.01)-m/2*sin(i)
      }else{
        x1=d/a*i
        y1=d/b*j-m*cos(i-0.05)*cos(i/3)
        x2=d/a*(i+1)-random(3,4)
        y2=d/b*j-m*sin(i+0.2)
      }
      if (x1>2&& x2<d-2&&x2>0&&y1>2&&y2<d-2&&y2>2&&y1<d-2){
        line(x1,y1,x2,y2)
      }
    }
  }
  if(n===15){
     m=int(random(10,20));
    a=int(random(5,6));
    b=int(random(5,10));
    for(let j=1;j<b;j++)
    for(let i=0;i<a;i+=0.5){
      if(j%2===0){
        x1=d/b*i+m*sin(i/2-0.05)
        y1=d/b*j+m*cos(i/2-0.05)
        x2=d/b*i+m*sin(i/2-0.01)
        y2=d/b*j+m*cos(i/3-0.01)
      }else{
        x1=d-d/b*i+m*sin(i/2-0.05)
        y1=d/b*j+m*cos(i/2-0.05)
        x2=d-d/b*i+m*sin(i/2-0.01)
        y2=d/b*j+m*cos(i/3-0.01)
      }
      if (x1>2&& x2<d-2&&x2>0&&y1>2&&y2<d-2&&y2>2&&y1<d-2){
        line(y1,x1,y2,x2)
      }
    }
  }
  if(n===16){
    m=int(random(10,20));
    a=int(random(50,82));
    b=int(random(5,10));
		f=random(-6,6)
    for(let j=-a/2;j<a/2;j+=5)
    for(let i=0;i<a;i++){
        x1=d/2+i*d/(a-j)*sin(i/f-0.05)
        y1=d/2+i*d/(a-j)*cos(i/f-0.05)
        x2=d/2+i*d/(a-j)*sin(i/f-0.01)
        y2=d/2+i*d/(a-j)*cos(i/f-0.01)
      if (x1>2&& x2<d-2&&x2>0&&y1>2&&y2<d-2&&y2>2&&y1<d-2){
        line(x1,y1,x2,y2)
      }
    }
  }
  if(n===17){
    m=int(random(10,20));
    a=int(random(80,142));
    b=int(random(5,10));
		f=random(-6,6)
    for(let j=-a/2;j<a/2;j+=5)
    for(let i=0;i<a;i++){
        x1=d/2+i*d/(a-j)
        y1=d/2+i*d/(a-j)*cos(i-0.05)
        x2=d/2+i*d/(a-j)
        y2=d/2+i*d/(a-j)*cos(i-0.01)
      if (x1>2&& x2<d-2&&x2>0&&y1>2&&y2<d-2&&y2>2&&y1<d-2){
        line(y1,x1,y2,x2)
      }
    }
		for(let i=10;i<m*int(random(2,5));i+=int(random(5,10))){
			for(let j=0;j<TWO_PI;j+=0.1){
				h=random(1,5)
				x1=2*d/3+(i+h)*sin(j+random(0.05));
				y1=d/3+(i+h)*cos(j+random(0.05));
				x2=2*d/3+(i+h)*sin(j+random(0.2));
				y2=d/3+(i+h)*cos(j+random(0.2));
				if (x1>2&& x2<d-2&&x2>0&&y1>2&&y2<d-2&&y2>2&&y1<d-2){
        line(x1,y1,x2,y2)
      }
			}
		}
		for(let i=2;i<12;i++){
			for(let j=0;j<TWO_PI;j+=0.3){
				x1=2*d/3+(i)*sin(j);
				y1=d/3+(i)*cos(j);
				x2=2*d/3+(i)*sin(j+0.1);
				y2=d/3+(i)*cos(j+0.1);
				if (x1>2&& x2<d-2&&x2>0&&y1>2&&y2<d-2&&y2>2&&y1<d-2){
        line(x1,y1,x2,y2)
      }
			}
		}
  }
  if(n===18){
    a=int(random(20,32));
    b=int(random(5,10));
		f=random(3,5)
		
    for(let j=0;j<a;j+=0.7)
    for(let i=0;i<PI;i+=0.1){
        x1=j*d/a*sin(i-0.05)
        y1=j*d/(a)*cos(-i-0.05-f)
        x2=j*d/a*sin(i-0.01)
        y2=j*d/(a)*cos(-i-0.01-f)
      if (x1>2&& x2<d-2&&x2>0&&y1>2&&y2<d-2){
        line(x1,y1,x2,y2)
      }
    }
  }
  pop()
}

function border(){
  for(let i = 0; i<12;i++){
      x1=i*d/12-random(2,5)
      x2=x1+d/12 - 1-random(2,5)
      line(x1,0,x2,0)
      x1=i*d/12-random(2,5)
      x2=x1+d/12 - 1-random(2,5)
      line(x1,d,x2,d)
      x1=i*d/12 - 1
      x2=x1+d/12 - 1-random(2,5)
      line(d,x1,d,x2)
      x1=i*d/12+random(2,5)
      x2=x1+d/12 + -random(2,5)
      line(0,x1,0,x2)
    }
  
}

function mousePressed(){
  t=!t
  setup()
  draw()
}

function keyPressed(){
  if(keyCode===38){
    if(s<25){
      s++
    }else{
      s=2
    }
    t=true
    setup()
   draw()
  }
  if(keyCode===40){
    if(s>=2){
      s--
    }else{
      s=10
    }
    t=true
    setup()
  draw()
    
  }
  
  if(keyCode===83){
    save(cnv,'sashiko','png')
    
  }
  
  if(keyCode===32){
    setup()
  draw()
  }
  
  
}