xxxxxxxxxx
var thestring = '';
var therules = [];
var numproductions, t, d;
// curves
thestring = 'F-F-F-F'; // the starting string ("axiom")
therules[0] = ['F', 'F-F+F+FF-F-F+F'];
//therules[0] = ['F', 'FF-F-F-F-FF'];
numproductions = 4;
t = 85; // turn amount
d = 6;
var ptr = 0;
// graphics stuff:
// a simple version of Papert's turtle
var x = [];
var y = [];
var a = [];
var lpf = 1; // letters per frame
function setup() {
createCanvas(windowWidth, windowHeight);
init();
// triple loop:
var outstring = thestring;
for(let i = 0;i<numproductions;i++)
{
outstring = '';
for(let j = 0;j<thestring.length;j++)
{
for(let k = 0;k<therules.length;k++)
{
var ismatch = 0;
if(thestring.charAt(j)==therules[k][0]) // MATCH
{
outstring+=therules[k][1]; // copy of the second half
ismatch=1;
break;
}
}
if(ismatch==0) outstring+=thestring.charAt(j);
}
thestring=outstring;
console.log(thestring);
}
//console.log(thestring);
//frameRate(12);
strokeWeight(2);
stroke(255)
}
function draw() {
var c;
for(let i = 0;i<lpf;i++)
{
c = thestring.charAt(ptr);
if(ptr<thestring.length) doTurtle(c);
ptr = ptr+1;
}
}
function init() {
background(0);
x = [];
y = [];
a = [];
x[0] = width/1.1;
y[0] = height/1;
a[0] = PI*4/3;
}
function doTurtle(k) {
if(k=='c') init();
if(k=='F') // draw forward
{
let x1 = x[x.length-1] + d*cos(a[a.length-1]);
let y1 = y[y.length-1] + d*sin(a[a.length-1]);
line(x[x.length-1], y[y.length-1], x1, y1);
x[x.length-1] = x1;
y[y.length-1] = y1;
}
if(k=='+') // turn right
{
stroke('green');
a[a.length-1]+=radians(t);
}
if(k=='-') // turn left
{
stroke(255);
a[a.length-1]-=radians(t);
}
if(k=='[') // start branch
{
x.push(x[x.length-1]);
y.push(y[y.length-1]);
a.push(a[a.length-1]);
}
if(k==']') // end branch
{
x.pop();
y.pop();
a.pop();
}
}