code: private int buildLookUpTable() {
  
          int i = 0;
          int incDen = Math.round(8F * radiusMin); // increment denominator
  
          lut = new int[2][incDen][depth];
  
          for( int radius = radiusMin; radius <= radiusMax; radius = radius + radiusInc ) {
              i = 0;
              for( int incNun = 0; incNun < incDen; incNun++ ) {
                  double angle = (2 * Math.PI * (double) incNun) / (double) incDen;
                  int indexR = (radius - radiusMin) / radiusInc;
                  int rcos = (int) Math.round((double) radius * Math.cos(angle));
                  int rsin = (int) Math.round((double) radius * Math.sin(angle));
                  if ((i == 0) | (rcos != lut[0][i][indexR]) & (rsin != lut[1][i][indexR])) {
                      lut[0][i][indexR] = rcos;
                      lut[1][i][indexR] = rsin;
                      i++;
                  }
              }
          }
  
          return i;
      }
docs: The parametric equation for a circle centered at (a,b) with
  radius r is:
  
  a = x - r*cos(theta)
  b = y - r*sin(theta)
  
  In order to speed calculations, we first construct a lookup
  table (lut) containing the rcos(theta) and rsin(theta) values, for
  theta varying from 0 to 2*PI with increments equal to
  1/8*r. As of now, a fixed increment is being used for all
  different radius (1/8*radiusMin). This should be corrected in
  the future.
  
  Return value = Number of angles for each radius