SHARE
TWEET

create an elementary cellular automaton GIF

fbz Jun 14th, 2015 (edited) 1,533 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. //_1DCA_save_GIF by fbz written in Processing
  2. //generates an elementary cellular automata and saves it as an animated gif
  3. //get the gifAnimation processing library at http://extrapixel.github.io/gif-animation/
  4. import gifAnimation.*;
  5.  
  6. GifMaker gifExport;
  7. int[] rules = { 0, 1, 1, 0, 1, 1, 1, 0 };
  8. int gen = 1; // Generation
  9. color on = color(255);
  10. color off = color(0);
  11.  
  12. void setup() {
  13.   size(61, 680); //width and length of the gif
  14.   background(0);
  15.   set(width-1, 0, on); //set the next to last pixel to white
  16.   set(23, 0, on); //turn some more pixels on for the seed row
  17.   set(42, 0, on);
  18.   //set(7, 0, on);
  19.   //set(38, 0, on);
  20.   //set(28, 0, on);
  21.   //set(46, 0, on);
  22.   frameRate(15);
  23.   gifExport = new GifMaker(this, "rule110_1.gif");
  24.   gifExport.setRepeat(0);             // make it an "endless" animation
  25.   gifExport.setTransparent(255, 255, 255); //make white transparent
  26.   gifExport.setDelay(1000/15); //divide by the frameRate
  27. }
  28.  
  29. void draw() {
  30. // For each pixel, determine new state by examining current
  31. // state and neighbor states and ignore edges that have only
  32. // one neighbor
  33.   for (int i = 1; i < width - 1; i++) {
  34.     int left = get(i - 1, gen - 1); // Left neighbor
  35.     int me = get(i, gen - 1); // Current pixel
  36.     int right = get(i + 1, gen - 1); // Right neighbor
  37.     if (rules(left, me, right) == 1) {
  38.       set(i, gen, on);
  39.     }
  40.   }
  41.   gifExport.addFrame(); //add a new frame to the gif
  42.   gen++; // Increment the generation by 1
  43.   if (gen > height - 1) { // If it reached the bottom of the screen,
  44.     noLoop(); // stop the program  
  45.     gifExport.finish(); //write gif file to sketch folder
  46.   }
  47. }
  48. // Implement the rules
  49. int rules(color a, color b, color c) {
  50.   if ((a == on) && (b == on) && (c == on)) {
  51.     return rules[0];
  52.   }
  53.   if ((a == on) && (b == on) && (c == off)) {
  54.     return rules[1];
  55.   }
  56.   if ((a == on) && (b == off) && (c == on)) {
  57.     return rules[2];
  58.   }
  59.   if ((a == on) && (b == off) && (c == off)) {
  60.     return rules[3];
  61.   }
  62.   if ((a == off) && (b == on) && (c == on)) {
  63.     return rules[4];
  64.   }
  65.   if ((a == off) && (b == on) && (c == off)) {
  66.     return rules[5];
  67.   }
  68.   if ((a == off) && (b == off) && (c == on)) {
  69.     return rules[6];
  70.   }
  71.   if ((a == off) && (b == off) && (c == off)) {
  72.     return rules[7];
  73.   }
  74.   return 0;
  75. }
RAW Paste Data
Top