home processing download documents tutorial python tutorial gallery source about
 Python Tutorials (back to the list of tutorials)

Clock Stack Agent Algorithm

     Template Code


Warning: include(codepy/igeo_tutorial60_0/igeo_tutorial60_0.html): failed to open stream: No such file or directory in /home/content/58/5926958/html/igeo/tutorial/tutorial.php on line 66

Warning: include(): Failed opening 'codepy/igeo_tutorial60_0/igeo_tutorial60_0.html' for inclusion (include_path='.:/usr/local/php5_6/lib/php') in /home/content/58/5926958/html/igeo/tutorial/tutorial.php on line 66


     Rule 1

To run the code, replace the rule method in the template code with the following.

  void rules(){
    if(clock(0)==9){
      if(clock(1)==0){
        next(2);
      }
      next(rot(PI/2), 1);
    }
    else{
      next(0);
    }
  }


     Rule 2

  void rules(){
    if(clock(0)==9){
      if(clock(1)==0){
        if(clock(2)==3){
          next(rot(-PI/2), 3);
        }
        else{ next(2); }
      }
      next(rot(PI/2), 1);
    }
    else{ next(0); }
  }


     Rule 3

  void rules(){
    if(clock(0)==9){
      if(clock(1)==0){
        if(clock(2)==3){
          next(rot(-PI/2), 3);
        }
        else{ next(2); }
      }
      if(clock(1)==2 && clock(2)==0 && clock(3)==1){
        next(rot(-PI/2), 4);
      }
      next(rot(PI/2), 1);
    }
    else{ next(0); }
  }


     Rule 4

  void rules(){
    if(clock(0)==3){
      if(clock(1)==0){
        if(clock(2)==3){
          next(rot(-PI/2), 3);
        }
        else{ next(2); }
      }
      if(clock(4)==3){
        if(clock(1)==2 && clock(2)==0 && clock(3)==0){
          next(rot(-PI/2), 5).clr(0);
        }
        if(clock(1)==2 && clock(2)==0 && clock(3)==1){
          next(rot(-PI/2), 5).clr(0);
        }
        if(clock(1)==2 && clock(2)==0 && clock(3)==2){
          next(rot(-PI/2), 5).clr(0);
        }
      }
      else if(clock(1)==2 && clock(2)==0 && clock(3)==1){
        next(rot(-PI/2), 4);
      }
      next(rot(PI/2), 1);
    }
    else{ next(0); }
  }


     Rule 5

  void rules(){
    if(clock(0)==3){
      if(clock(1)==0){
        if(clock(2)==3){
          next(rot(-PI/2), 3);
        }
        else{ next(2); }
      }
      if(clock(4)==3){
        if(clock(1)==2 && clock(2)==0 && clock(3)==0){
          next(rot(-PI/3), 5).clr(0);
        }
        if(clock(1)==2 && clock(2)==0 && clock(3)==1){
          next(rot(-PI/2), 5).clr(0);
        }
        if(clock(1)==2 && clock(2)==0 && clock(3)==2){
          next(rot(-PI/3), 5).clr(0);
        }
      }
      else if(clock(1)==2 && clock(2)==0 && clock(3)==1){
        next(rot(-PI/2), 4); //.clr(0, 0, (clock(4)+1)*0.3);
      }
      next(rot(PI/2), 1);
    }
    else{ next(0); }
  }


     Rule 6

  void rules(){
    if(clock(0)==3){
      if(clock(1)==0){
        if(clock(2)==3){
          next(rot(-PI/2), 3);
        }
        else{ next(2); }
      }
      if(clock(4)==3){
        if(clock(1)==2 && clock(2)==0 && clock(3)==0){
          next(rot(-PI/2), 5).clr(0);
        }
        if(clock(1)==2 && clock(2)==0 && clock(3)==1){
          next(rot(-PI/2), 5).clr(0);
        }
        if(clock(1)==2 && clock(2)==0 && clock(3)==2){
          next(rot(-PI/2), 5).clr(0);
        }
      }
      else if(clock(1)==2 && clock(2)==0 && clock(3)==1){
        next(rot(-PI/2), 4); //.clr(0, 0, (clock(4)+1)*0.3);
      }
      next(rot(PI/2), 1);
    }
    else{ next(rot(PI/180*1), 0); }
  }


     Rule 7

  void rules(){
    if(clock(0)==3){
      if(clock(1)==0){
        if(clock(2)==3){
          next(rot(-PI/2), 3);
        }
        else{ next(2); }
      }
      if(clock(4)==3){
        if(clock(1)==2 && clock(2)==0 && clock(3)==0){
          next(rot(-PI/2), 5).clr(0);
        }
        if(clock(1)==2 && clock(2)==0 && clock(3)==1){
          next(rot(-PI/2), 5).clr(0);
        }
        if(clock(1)==2 && clock(2)==0 && clock(3)==2){
          next(rot(-PI/2), 5).clr(0);
        }
      }
      else if(clock(1)==2 && clock(2)==0 && clock(3)==1){
        next(rot(-PI/2), 4); //.clr(0, 0, (clock(4)+1)*0.3);
      }
      next(rot(PI/2), 1);
    }
    else{ next(rot(PI/180*0.1), 0); }
  }


     Rule 8

  void rules(){
    if(clock(0)==3){
      if(clock(1)==0){
        if(clock(2)==3){
          next(rot(-PI/2), 3);
        }
        else{ next(2); }
      }
      if(clock(4) >= IRand.getInt(2, 7)){
        if(clock(1)==2 && clock(2)==0 && clock(3)==0){
          next(rot(-PI/2), 5); //.clr(IRand.clr());
        }
        if(clock(1)==2 && clock(2)==0 && clock(3)==1){
          next(rot(-PI/2), 5); //.clr(IRand.clr());
        }
        if(clock(1)==2 && clock(2)==0 && clock(3)==2){
          next(rot(-PI/2), 5); //.clr(IRand.clr());
        }
      }
      else if(clock(1)==2 && clock(2)==0 && clock(3)==1){
        next(rot(-PI/2), 4);
      }
      next(rot(PI/2), 1);
    }
    else{ next(0); }
  }


     Rule 9

  void rules(){
    if(clock(0)==3){
      if(clock(1)==0){
        if(clock(2) >= IRand.getInt(3,10)){
          next(rot(-PI/2), 3);
        }
        else{ next(2); }
      }
      if(clock(4) == 3){
        if(clock(1)==2 && clock(2)==0 && clock(3)==0){
          next(rot(-PI/2), 5);
        }
        if(clock(1)==2 && clock(2)==0 && clock(3)==1){
          next(rot(-PI/2), 5);
        }
        if(clock(1)==2 && clock(2)==0 && clock(3)==2){
          next(rot(-PI/2), 5);
        }
      }
      else if(clock(1)==2 && clock(2)==0 && clock(3)==1){
        next(rot(-PI/2), 4);
      }
      next(rot(PI/2), 1);
    }
    else{ next(0); }
  }


     Rule 10

  void rules(){
    if(clock(0)==3){
      if(clock(1)==0){
        if(clock(2) >= IRand.getInt(3,10)){
          next(rot(-PI/2), 3);
        }
        else{ next(2); }
      }
      if(clock(4) == 3){
        if(clock(1)==2 && clock(2)==0 && clock(3)==0){
          next(rot(-PI/2+IRand.get(-PI/12,PI/12)), 5);
        }
        if(clock(1)==2 && clock(2)==0 && clock(3)==1){
          next(rot(-PI/2), 5);
        }
        if(clock(1)==2 && clock(2)==0 && clock(3)==2){
          next(rot(-PI/2+IRand.get(-PI/12,PI/12)), 5);
        }
      }
      else if(clock(1)==2 && clock(2)==0 && clock(3)==1){
        next(rot(-PI/2), 4);
      }
      next(rot(PI/2), 1);
    }
    else{ next(0); }
  }


     Rule 11

  void rules(){
    if(clock(0)>=IRand.getInt(3,10)){
      if(clock(1)==0){
        if(clock(2) >= IRand.getInt(1,5)){
          next(rot(-PI/2), 3);
        }
        else{ next(rot(IRand.get(-0.15, 0.15)), 2); }
      }
      if(clock(4) == 3){
        if(clock(1)==2 && clock(2)==0 && clock(3)==0){
          next(rot(-PI/2), 5);
        }
        if(clock(1)==2 && clock(2)==0 && clock(3)==1){
          next(rot(-PI/2), 5);
        }
        if(clock(1)==2 && clock(2)==0 && clock(3)==2){
          next(rot(-PI/2), 5);
        }
      }
      else if(clock(1)==2 && clock(2)==0 && clock(3)==1){
        next(rot(-PI/2), 4);
      }
      next(rot(PI/2), 1);
    }
    else{ next(0); }
  }


     Rule 12

  void rules(){
    if(clock(0)==1){
      next(rot(-PI/6), 2);
      next(rot(PI/3*2), 1);
    }
    else{ next(0); }
  }


     Rule 13

  void rules(){
    if(clock(0)==1){
      next(rot(PI/3).flipNml(), 2);
      next(rot(PI/3*2), 1);
    }
    else{ next(0); }
  }


     Rule 14

  void rules(){
    if(clock(1)==0){
      if(clock(0)==5){
        next(rot(PI/2), 1);
      }
      else{ next(mul(0.99),0); }
    }
    else{
      if(clock(0)==15){
        next(rot(PI/2), 3);
      }
      else if(clock(0)==2){
        next(rot(-PI/2).flipNml(), 2);
        next(0);
      }
      else{ next(mul(0.99), 0); }
    }
  }


     Rule 15

  void rules(){
    if(clock(1)==0){
      if(clock(0)==15){
        next(rot(PI/3), 1);
        next(rot(-PI/3), 2);
      }
      else{ next(mul(0.99), 0); }
    }
    else if(clock(1)==1){
      if(clock(0)==5){
        next(rot(PI/3), 1);
      }
      else{ next(mul(0.99), 0); }
    }
    else{
      if(clock(0)==5){
        next(rot(PI/3), 3);
      }
      else{ next(mul(0.99), 0); }
    }
  }


     Rule 16

  void rules(){
    if(clock(1)==0){
      if(clock(0)==15){
        next(rot(PI/3), 1);
        next(rot(-PI/3), 2);
      }
      else{ next(0); }
    }
    else if(clock(1)==1){
      if(clock(0)==5){
        next(rot(PI/3), 1);
      }
      else{ next(0); }
    }
    else{
      if(clock(0)==5){
        next(rot(PI/3), 3);
      }
      else{ next(mul(0.99), 0); }
    }
  }


     Rule 17

  void rules(){
    if(clock(1)==0){
      next(rot(-PI/4), 1);
      next(rot(PI/2).flipNml(), 2);
    }
    else{
      if(clock(0)==5){
        if(IRand.pct(20)){
          next(rot(-PI/4).flipNml(), 2);
        }
      }
      else{ next(0); }
    }
  }


     Rule 18

  void rules(){
    if(clock(1)==0){
      if(clock(0)==5){
        next(rot(PI/2), 1);
        if(clock(2)==3){
          if(IRand.pct(70)) next(rot(PI/3),3);
          if(IRand.pct(50)) next(3);
          if(IRand.pct(30)) next(rot(-PI/2), 3);
        }
        else{ next(2); }
      }
      else{ next(0); }
    }
    else{
      if(clock(0)==5){
        next(rot(PI/2), 1);
      }
      else{
        next(mul(0.98), 0).clr(clock(0)*0.2, 0, clock(1)*0.1);
      }
    }
  }


     Rule 19

  void rules(){
    if(clock(1)==0){
      if(clock(0)==5){
        next(rot(PI/2), 1).clr(0,0.5,1.0);
        if(clock(2)==0){
          if(clock(3)==0){
            next(rot(-PI/2), 3).clr(0,0,1.0);
          }
          else{ next(rot(-PI/4), 4).clr(0); }
        }
      }
      else{ next(rot(PI/20),0); }
    }
    else{
      if(clock(0)==10){
        next(rot(PI/2),1).clr(0.5,0,1);
        if(clock(2)==0){
          next(3).clr(1.0,0.5,0);
        }
      }
      else{ next(rot(PI/20),0); }
    }
  }


     Rule 20

  void rules(){
    if(clock(1)==0){
      if(clock(0)==5){
        next(rot(PI/2), 1).clr(0,0.5,1.0);
        if(clock(2)==0){
          if(clock(3)==0){
            if(IRand.pct(90)) next(rot(-PI/4), 3).clr(0,0,1.0);
          }
          else{
            if(IRand.pct(40)) next(rot(-PI/2), 4).clr(0);
          }
        }
      }
      else{
        if(clock(2)==1){
          next(mul(0.99), 0);
        }
        else{ next(0); }
      }
    }
    else if(clock(1)==1){
      if(clock(0)==10){
        next(rot(PI/2),1).clr(0.5,0,1);
        if(clock(2)==0){
          next(3).clr(1.0,0.5,0);
        }
      }
      else{
        if(clock(2)==1){
          next(mul(0.99), 0);
        }
        else{ next(0); }
      }
    }
    else if(clock(1)==2){
      if(clock(0)==5){
        next(rot(PI/2), 1);
      }
      else{
        if(clock(2)==1){
          next(mul(0.99), 0);
        }
        else{ next(0); }
      }
    }
    else{
      if(clock(0)==10){
        if(clock(2)==0){
          next(rot(PI/2),2);
        }
      }
      else{ next(mul(0.99), 0); }
    }
  }


     Rule 21

  void rules(){
    if(clock(4)==0){
      if(clock(0)==3){
        next(rot(PI/2),1);
        if(clock(1)==0){
          if(clock(2)==2) next(rot(-PI/2),3);
          else next(2);
        }
      }
      else{
        if(clock(1)==2 && clock(0)==0) next(rot(-PI/2),4).clr(1.0,0,1.0);
        next(0);
      }
    }
    else{
      if(clock(0)==15) next(rot(PI/2),5).clr(0);
      else next(0);
    }
  }


     Rule 22

  void rules(){
    if(clock(0)==1){
      if(clock(1)==1){
        if(clock(2)==10){
          next(rot(-PI/6), 3);
        }
        else{ next(rot(-PI*5/6), 2); }
      }
      else{
        next(rot(PI*5/6), 1);
        if(clock(2)==5){
          next(rot(-PI/2),4);
        }
      }
    }
    else{ next(0); }
  }


     Rule 23

  void rules(){
    if(clock(0)==2){
      if(clock(1)==0 && clock(2)==3){
        next(rot(-PI/3), 3);
      }
      if(clock(1)==2){
        if(clock(2)==5){
          next(rot(-PI/3), 4);
        }
        else{ next(rot(-PI/3).flipNml(), 2); }
      }
      next(rot(PI/3), 1);
    }
    else{ next(0); }
  }


     Rule 24

  void rules(){
    if(clock(0)==2){
      if(clock(1)==0 && clock(2) >= IRand.get(3,6)){
        next(rot(-PI/3), 3);
      }
      if(clock(1)==2){
        if(clock(2) == IRand.getInt(2,5)){
          next(rot(-PI/3), 4);
        }
        else{ next(rot(-PI/3).flipNml(), 2); }
      }
      next(rot(PI/3), 1);
    }
    else{ next(0); }
  }


     Rule 25

  void rules(){
    if(clock(6)==0){
      if(clock(0)==3){
        if(clock(1)==0){
          if(clock(2) >= IRand.getInt(2,10)){
            next(rot(-PI/2), 3);
          }
          else{ next(2); }
        }
        if(clock(4) == 2){
          if(clock(1)==2 && clock(2)==0 && clock(3)==0){ // left
            if(IRand.pct(70)) next(rot(-PI/2), 5);
          }
          if(clock(1)==2 && clock(2)==0 && clock(3)==1){ // straight
            next(rot(-PI/2), 5);
          }
          if(clock(1)==2 && clock(2)==0 && clock(3)==2){ // right
            if(IRand.pct(70)) next(rot(-PI/2), 5);
          }
        }
        else if(clock(1)==2 && clock(2)==0 && clock(3)==1){
          next(rot(-PI/2), 4);
        }
        next(rot(PI/2), 1);
      }
      else{
        if(clock(0)==2 && clock(1)==0 && clock(3)==2){
          next(rot(-PI/2).mul(1), 6).clr(0.5,0,1);
        }
        next(0);
      }
    }
    else{ // branch mode
      if(clock(1)==60){
        if(IRand.pct(10)){
          next(mul(1), 7).clr(0,0,0.5);
        }
      }
      else{
        if(IRand.pct(20)){
          next(rot(-PI/4), 1);
        }
        if(IRand.pct(20)){
          next(rot(PI/4), 1);
        }
        if(IRand.pct(90)){
          next(1);
        }
      }
    }
  }


     Rule 26

  void rules(){
    if(clock(3)==1){
      if(clock(0)>=2 && IRand.pct(10)){
        next(4);
      }
      else{ next(0); }
    }
    else if(clock(0)==2){
      if(clock(1)==0){
        next(rot(-PI/3), 3);
      }
      if(clock(1)==0){
        next(rot(PI/3), 2);
      }
      else{ next(rot(PI/3), 1); }
    }
    else{ next(0); }
  }


     Rule 27

  void rules(){
    if(clock(3)==1){
      if(clock(0)>=2){
        next(4);
      }
      else{ next(rot(0.05), 0); }
    }
    else if(clock(0)==2){
      if(clock(1)==0){
        next(rot(-PI/3), 3);
      }
      if(clock(1)==0){
        next(rot(PI/3), 2);
      }
      else{ next(rot(PI/3), 1); }
    }
    else{ next(0); }
  }


     Rule 28

  void rules(){
    // corrugate
    if(clock(6)==0){ 
      if(clock(3)==1){
        if(clock(1)==1){
          if(clock(0)==5){
            if(clock(4)==12){ next(6); }
            else{ next(rot(PI/2), 4); }
          }
          else{ next(0); }
        }
        else{ next(rot(-PI/2), 1); }
      }
      else{
        if(clock(1)==1){
          if(clock(0)==5){
            next(rot(-PI/2), 3);
            if(clock(4)==10){ next(5); }
          }
          else{ next(0); }
        }
        else{ next(rot(PI/2), 1); }
      }
    }
    // triangles
    else if(clock(6)==1){
      if(clock(0)==3){
        if(clock(1)==0){
          if(clock(2)==20){ next(rot(-PI/4), 6); }
          else{ next(rot(-PI/3*2).flipNml(), 2); }
        }
        next(rot(PI/3*2), 1);
      }
      else{ next(0); }
    }
    // squares
    else{
      if(clock(0)==3){
        if(clock(1)==1){
          if(clock(2)==0){
            if(clock(3)==4){ next(rot(-PI/2), 7); }
            else{ next(rot(-PI/2),3); }
          }
          next(2);
        }
        next(rot(PI/2), 1);
      }
      else{ next(0); }
    }
  }


     Rule 29

  void rules(){
    if(clock(0)==10){
      
      if(clock(1)==0){
        if(clock(2)==0){
          next(pitch(PI/2).roll(-PI/2), 2);
        }
        else{
          next(pitch(-PI/2).roll(PI/2), 3);
        }
      }
      
      if(clock(1)==20); // stop
      else{
        if(clock(1)==0 || clock(1)==1){
          if(clock(1)==1 && clock(3)==1){
            next(4);
          }
          next(yaw(PI/2), 1).hsb(clock(1)*0.02,1,1);
        }
        else{
          next(yaw(PI/2).mul(0.9), 1).hsb(clock(1)*0.02,1,1);
        }
      }
    }
    else{ next(0); }
  }


     Rule 30

  void rules(){
    if(clock(0)==10){
      if(clock(1)==0){
        if(clock(2)==0){
          if(clock(3)==2){
            next(pitch(PI/2).roll(PI/2).mul(0.9), 2);
            next(yaw(-PI/2), 4); // new cube
          }
          else{
            next(pitch(PI/2).roll(PI/2), 2);
            if(clock(4)==4 && clock(3)==1){
              next(yaw(-PI/2), 5); // new cube
            }
          }
        }
        else{
          next(pitch(-PI/2).roll(-PI/2), 3);
        }
      }
      
      if(clock(1)==20); // stop
      else{
        next(yaw(PI/2).mul(0.9), 1).hsb(clock(1)*0.02,1,1);
      }
    }
    else{ next(0); }
  }


     Rule 31

  void rules(){
    if(clock(0)==3){
      if(clock(1)==0){
        if(clock(2)==0){
          if(clock(3)>=IRand.get(5,10)){
            next(yaw(-PI/2), 4).hsb(sin(IG.time()*.02)*.1+.7,1,1);
            if(IRand.pct(70)) next(4).hsb(sin(IG.time()*.02)*.1+.7,1,1);
          }
          else if(IRand.pct(97)) next(3).hsb(sin(IG.time()*.02)*.1+.7,1,1);
          next(pitch(PI/2).roll(PI/2), 2).hsb(sin(IG.time()*.02)*.1+.7,1,1);
        }
        else if(clock(2)==1){
          if(clock(3)>=IRand.get(5,10)){
            if(IRand.pct(70)) next(roll(-PI/2), 4).hsb(sin(IG.time()*.02)*.1+.7,1,1);
          }
          next(pitch(-PI/2).roll(PI/2), 2).hsb(sin(IG.time()*.02)*.1+.7,1,1);
        }
        else if(clock(2)==2){
          next(pitch(PI/2).roll(PI/2), 2).hsb(sin(IG.time()*.02)*.1+.7,1,1);
        }
        else if(clock(2)==3){
          next(pitch(-PI/2).roll(PI/2), 2).hsb(sin(IG.time()*.02)*.1+.7,1,1);
        }
      }
      next(yaw(PI/2),1).hsb(sin(IG.time()*.02)*.1+.7,1,1);
    }
    else{ next(0).hsb(sin(IG.time()*.02)*.1+.7,1,1); }
  }


     Rule 32

  void rules(){
    if(clock(0)==3){
      if(clock(1)==0){
        if(clock(2)==0){
          if(clock(3)>=IRand.get(5,10)){
            next(rot(-PI/2), 4).hsb(sin(IG.time()*.02)*.1,1,1);
            if(IRand.pct(50)) next(4).hsb(sin(IG.time()*.02)*.1,1,1);
          }
          else next(3).hsb(sin(IG.time()*.02)*.1,1,1);
          next(roll(PI/2).yaw(PI/2), 2).hsb(sin(IG.time()*.02)*.1,1,1);
        }
        else if(clock(2)==1){
          if(clock(3)>=IRand.get(5,10)){
            if(IRand.pct(10)) next(roll(-PI/2), 4).hsb(sin(IG.time()*.02)*.1,1,1);
          }
          next(roll(-PI/2).yaw(PI/2), 2).hsb(sin(IG.time()*.02)*.1,1,1);
        }
        else if(clock(2)==2){
          next(roll(PI/2).yaw(PI/2), 2).hsb(sin(IG.time()*.02)*.1,1,1);
        }
        else if(clock(2)==3){
          next(roll(-PI/2).yaw(PI/2), 2).hsb(sin(IG.time()*.02)*.1,1,1);
        }
      }
      next(rot(PI/2),1).hsb(sin(IG.time()*.02)*.1,1,1);
    }
    else{ next(pitch(-0.03).yaw(0.03), 0).hsb(sin(IG.time()*.02)*.1,1,1); }
  }


     Rule 33

  void rules(){
    if(clock(0)==99){
      next(pitch(PI/2).roll(PI/2), 1).clr(0,0,.5-cos(IG.time()*.05)*.5);
    }
    if(clock(0)==100){
      next(pitch(PI/3).roll(PI/2), 1).clr(0,0,.5-cos(IG.time()*.05)*.5);
    }
    next(yaw(PI/3*2).pitch(0.1), 0).clr(0,0,.5-cos(IG.time()*.05)*.5);
  }


     Rule 34

  void rules(){
    if(clock(0)==99){
      next(pitch(PI/2).roll(PI/2), 1); 
    }
    if(clock(0)==100){
      next(pitch(PI/3).roll(PI/2), 1); 
    }
    if(clock(0)%3==0){
      next(roll(0.1).yaw(PI/3*2).pitch(0.1), 0).clr(clock(0)*0.01,0,clock(1)*0.1);
    }
    else{
      next(yaw(PI/3*2).pitch(0.1), 0).clr(clock(0)*0.01,0,clock(1)*0.1);
    }
  }


     Rule 35

  void rules(){
    if(clock(5)==1){
      if(clock(0)==6){
        next(rot(PI/3).flipNml(),6);
      }
      else{ next(rot(PI/3).flipNml(),0); }
    }
    else{
      if(clock(0)==0){
        if(clock(4)==43 && clock(1)==1 && clock(2)==0){
          next(rot(PI/3),5);
        }
        else{
          if(clock(1)==2){
            if(clock(2)==1){
              if(clock(3)==11){
                next(yaw(PI/3-PI/15).pitch(PI/6).roll(PI/6), 4);
              }
              else{ next(yaw(PI/3).pitch(PI/6).roll(PI/6), 3); }
            }
            else{ next(yaw(PI/3).pitch(PI/6), 2); }
          }
          else{ next(yaw(PI/3),1); }
        }
      }
      else{ next(0); }
    }
  }


     Rule 36

  void rules(){
    if(clock(7)==2){ // stop
      return;
    }
    if(clock(2)==0){ // segment
      next(rot(PI/2), 2);
    }
    else{ // square
      if(clock(0)==3){
        if(clock(1)==2){
          if(clock(3)==3 && clock(5)==0){
            next(4);
          }
          else if(clock(3)==9 && clock(5)==1){
            next(6).clr(0);
          }
          else{ next(rot(PI/2), 3); }
        }
        next(rot(-PI/2),1);
      }
      else{
        if(clock(0)==1 && clock(1)==1 && clock(3)==1 && clock(5)==0){
          if(clock(6)==1){
            next(yaw(PI/2).pitch(PI/2), 7);
          }
          else{ next(rot(PI/2), 5).clr(0.5,0,0.5); }
        }
        next(0);
      }
    }
  }


(back to the list of tutorials)

HOME
FOR PROCESSING
DOWNLOAD
DOCUMENTS
TUTORIALS (Java / Python)
GALLERY
SOURCE CODE(GitHub)
ABOUT