code: public boolean process(Grid grid ) {
  		// reset and initialize data structures
  		init(grid);
  
  		// add tangent points from adjacent ellipses
  		if( !horizontal(grid) )
  			return false;
  		if( !vertical(grid) )
  			return false;
  
  		keypoints.reset();
  		for (int i = 0; i < tangents.size(); i++) {
  			tangents.get(i).getTop(keypoints.grow());
  			tangents.get(i).getRight(keypoints.grow());
  			tangents.get(i).getBottom(keypoints.grow());
  			tangents.get(i).getLeft(keypoints.grow());
  		}
  
  		return true;
  	}
docs: Computes key points from the grid of ellipses
  @param grid Grid of ellipses
  @return true if successful or false if it failed