code: function (seed_x, seed_y, radius, layers_no) {
          // Layer 0 is the seed
          var layers = [[create_point(seed_x, seed_y)]];
          var layer, angle, point, p;
          for(layer = 0; layer < layers_no; layer++) {
              // Reserve space for next layer
              layers.push([]);
              for (point = 0; point < layers[layer].length; point++) {
                  for (angle = 0; angle < angles.length; angle++) {
                      p = rotate_point(create_point(
                              layers[layer][point].x,
                              layers[layer][point].y - radius),
                              layers[layer][point], 
                              angles[angle]);
  
                      if (!point_exists(p, flatten(layers))) {
                          // Only new points continue generations
                          layers[layer + 1].push(p);
                      }
                  }
              }
          }
  
          // Layers have been generated, return getters
          return {
              layers: function () {
                  return layers;
              },
  
              points: function () {
                  return flatten(layers);
              }
          }
  
      }
docs: Module Main
  
  @param  {Number}  First circle x
  @param  {Number}  First circle y
  @param  {Number}  Circles radius
  @param  {Number}  Number of flower layers starting from 0
  @return {{
  layers: Function,
  points: Function,
  }}