JSFiddle - React, Tailwind, and code Playground
by Tgwizman
HTML
<canvas id="l" width="600" height="400"></canvas>
CSS
* {
margin: 0;
padding: 0;
width: 100%;
height: 100%;
}
JavaScript
var sierspinski = {
r:{'A':'B-A-B','B':'A+B+A'},
'+':function(c){c.rotate(-this.a);c.rotate(this.a-=Math.PI/3)},
'-':function(c){c.rotate(-this.a);c.rotate(this.a+=Math.PI/3)},
'A':function(c){c.beginPath();c.moveTo(0,0);c.translate(this.m,0);c.lineTo(0,0);c.stroke()},
'B':function(c){this['A'](c)},
s:'A',
a:0,
m:1
};
var koch = {
r: {'F':'F+F-F-F+F'},
'+':function(c){c.rotate(-this.a);c.rotate(this.a-=Math.PI/2)},
'-':function(c){c.rotate(-this.a);c.rotate(this.a+=Math.PI/2)},
'F':function(c){c.beginPath();c.moveTo(0,0);c.translate(this.m,0);c.lineTo(0,0);c.stroke()},
s:'F',
a:0,
m:2
};
var dragon = {
r: {'X':'X+YF','Y':'FX-Y'},
'+':function(c){c.rotate(-this.a);c.rotate(this.a-=Math.PI/2)},
'-':function(c){c.rotate(-this.a);c.rotate(this.a+=Math.PI/2)},
'F':function(c){c.beginPath();c.moveTo(0,0);c.translate(this.m,0);c.lineTo(0,0);c.stroke()},
s:'X',
a:0,
m:5
};
var algae = {
r: {'A':'B[A]A','B':'BB'},
'[':function(c){c.save();c.rotate(Math.PI/4);},
']':function(c){c.restore();c.rotate(-Math.PI/4);},
'A':function(c){c.beginPath();c.moveTo(0,0);c.translate(this.m,0);c.lineTo(0,0);c.stroke()},
'B':function(c){this['A'](c);},
s:'A',
a:-Math.PI/2,
m:1
};
var tree = {
r:{'X':'F-[[X]+X]+F[+FX]-X','F':'FF'},
'+':function(c){c.rotate(-this.a);c.rotate(this.a+=Math.PI/180*25)},
'-':function(c){c.rotate(-this.a);c.rotate(this.a-=Math.PI/180*25)},
'[':function(c){c.save();},
']':function(c){c.restore();},
'F':function(c){c.beginPath();c.moveTo(0,0);c.translate(this.m,0);c.lineTo(0,0);c.stroke()},
s:'X',
a:-Math.PI/180*25,
m:5
};
var web = {
r:{'A':'A+B+A','B':'B-A-B'},
'+':function(c){c.rotate(-this.a);c.rotate(this.a-=Math.PI/3)},
'-':function(c){c.rotate(-this.a);c.rotate(this.a+=Math.PI/3)},
'A':function(c){c.beginPath();c.moveTo(0,0);c.translate(this.m,0);c.lineTo(0,0);c.stroke()},
...