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