fractalkitty looking for math? fractalkitty.com

100 days of code

dragonInv

#text#interactive#animation#math#fractal

strAthetasliderTsliderZsliderIdrawDragongetCurveiterate

let strA='R'
let it = 1
let n=5
let theta = 90;
let len=5;
let sliderT,sliderZ,sliderI;
function setup() {
  createCanvas(windowWidth, windowHeight);
  stroke(0);
  strokeWeight(1)
  background(0);
  angleMode(DEGREES)
  getCurve();
  sliderT = createSlider(0, 180, 90,0.5);
  sliderT.position(10, 10);
  sliderT.style('width', '80px');
  sliderT.size(400, 20)
  sliderZ = createSlider(0.1, 2, 1,0.1);
  sliderZ.position(10, 40);
  sliderZ.style('width', '80px');
  sliderI = createSlider(0, 15, 5,1);
  sliderI.position(10, 70);
  sliderI.style('width', '80px');
  sliderI.input(getCurve)
  sliderL = createSlider(1, 100, 12,1);
  sliderL.position(10, 100);
  sliderL.style('width', '80px');
}
function draw() {
  background(255)
  fill(25);
  theta=sliderT.value();
  n = sliderI.value();
  text('Angle  = '+theta,420,15)
  s=sliderZ.value()
  text('Zoom',100,45)
  text('Iterations = '+ (n+1),100,75)
  len=sliderL.value();
  text('Length',100,105)
  translate(width/2,height/2);
    scale(s,s)
  drawDragon();  
}

function drawDragon(){
  k=int(strA.length);
  line(0,0,len,0)
  translate(len,0)
  x=0;y=0;x2=len;y2=0;
  for (let j=0;j<k;j++){ 
    if (strA.charAt(j)=='R') {
      rotate(180-theta)
      line(0,0,len,0)
      translate(len,0)
    }
    if (strA.charAt(j)=='L' ){
      rotate(-180+theta)
      line(0,0,len,0)
      translate(len,0)
    }
  }
}

function getCurve(){
  strA='R';
  it = 1;
  for(let i=0;i<n;i++){
    iterate()
  }
}
function iterate(){
  t = strA.length;
  tmp = strA +'R';
  tmp2='';
  for (let i=t-1;i>=0;i--){
    if (strA.charAt(i)== 'R'){
      tmp = tmp+'L';
    }
    if (strA.charAt(i)== 'L'){
      tmp=tmp+'R';
    }
  }
  strA = tmp;
  it = it+1;
}