
PDE Download: SimpleTurtleCheapRandom.pde
JAVA Download: SimpleTurtleCheapRandom.java
Click on anar+ terms to get the documentation.
import processing.opengl.*;
import anar.*;
import java.util.*;
import lsys.Grammar;
/*
* Example for Anar library by Guillaume LaBelle + Julien Nembrini
* http://anar.ch
*/
Pts ptsA = new Pts();
Face f;
Grammar grammar;
Obj obj;
Translate tX, tY, tZ, tmZ, tpY1, tpY2;
Sliders mySlider;
void setup(){
size(800,400,OPENGL);
Anar.init(this);
initGrammar();
initForm();
interpretGrammar();
}
void initGrammar(){
grammar = new Grammar("fgf");
// here define the rules
// * means any kind of symbol
// the example rules below are therefore non contextual
grammar.addRule("*f*","fi");
grammar.addRule("*g*","[iif][hfh]i");
grammar.addRule("*h*","gh");
// this one makes it probabilistic
String[] prods = {"jf", "k"};
float[] probs = {.5f, .5f};
grammar.addRule("*i*",prods,probs);
println(grammar);
}
void initForm(){
obj = new Obj();
Param pvTXx = new Param(40, -100,100,"translate");
Param pvTXy = new Param(0, -100,100,"translate");
Param pvTXz = new Param(0, -100,100,"translate");
tX = new Translate(Anar.Pt(pvTXx,pvTXy,pvTXz));
Param pvTYx = new Param(0, -100,100,"translate");
Param pvTYy = new Param(40, -100,100,"translate");
Param pvTYz = new Param(0, -100,100,"translate");
tY = new Translate(Anar.Pt(pvTYx,pvTYy,pvTYz));
Param pvTZx = new Param(0, -100,100,"translate");
Param pvTZy = new Param(0, -100,100,"translate");
Param pvTZz = new Param(40, -100,100,"translate");
tZ = new Translate(Anar.Pt(pvTZx,pvTZy,pvTZz));
Param pvTmZx = new Param(0, -100,100,"translate");
Param pvTmZy = new Param(0, -100,100,"translate");
Param pvTmZz = new Param( -40, -100,100,"translate");
tmZ = new Translate(Anar.Pt(pvTmZx,pvTmZy,pvTmZz));
Param pvTpYx = new Param(11, -100,100,"translate");
Param pvTpYy = new Param(34, -100,100,"translate");
Param pvTpYz = new Param(42, -100,100,"translate");
tpY1 = new Translate(Anar.Pt(pvTpYx,pvTpYy,pvTpYz));
Param pvTpZx = new Param( -23, -100,100,"translate");
Param pvTpZy = new Param( -50, -100,100,"translate");
Param pvTpZz = new Param( -20, -100,100,"translate");
tpY2 = new Translate(Anar.Pt(pvTpZx,pvTpZy,pvTpZz));
}
void interpretGrammar(){
obj = new Obj();
Pts stack = new Pts();
Pt seed = Anar.Pt(0,0,0);
Pt turtle = seed;
ArrayList stackPts = new ArrayList();
Pts ptsCollector = new Pts();
ptsCollector.add(turtle);
Iterator it = grammar.getSentence().iterator();
while (it.hasNext()){
String str = (String)it.next();
switch(str.charAt(0)){
case 'f':
Pt next = Anar.Pt(turtle,tX);
ptsCollector.add(next);
turtle = next;
case 'g':
next = Anar.Pt(turtle,tY);
ptsCollector.add(next);
turtle = next;
break;
case 'h':
next = Anar.Pt(turtle,tZ);
ptsCollector.add(next);
turtle = next;
break;
case 'i':
next = Anar.Pt(turtle,tmZ);
ptsCollector.add(next);
turtle = next;
break;
case 'j':
next = Anar.Pt(turtle,tpY1);
ptsCollector.add(next);
turtle = next;
break;
case 'k':
next = Anar.Pt(turtle,tpY2);
ptsCollector.add(next);
turtle = next;
break;
case '[':
stack.add(turtle);
stackPts.add(ptsCollector);
ptsCollector = new Pts();
ptsCollector.add(turtle);
break;
case ']':
turtle = stack.remove(stack.size()-1);
obj.add(ptsCollector);
ptsCollector = (Pts)stackPts.remove(stackPts.size()-1);
break;
default:
break;
}
}
obj.add(ptsCollector);
obj.pts.render = new RenderPtsLine(new AColor(128));
Anar.camTarget(obj);
mySlider = new Sliders(obj);
}
void draw(){
if(frameCount%2==0)
background(155);
else
background(153);
obj.draw();
mySlider.draw();
}
void keyPressed(){
if(key=='a'){
grammar.step();
println(grammar);
interpretGrammar();
}
if(key=='s'){
grammar.reset();
println(grammar);
interpretGrammar();
}
}

|