code: public static List<Point2D_F64> createLayout( int numRows , int numCols , double centerDistance ) {
  
  		List<Point2D_F64> ret = new ArrayList<>();
  
  		double spaceX = centerDistance/2.0;
  		double spaceY = centerDistance*Math.sin(UtilAngle.radian(60));
  
  		double width = (numCols-1)*spaceX;
  		double height = (numRows-1)*spaceY;
  
  		for (int row = 0; row < numRows; row++) {
  			double y = row*spaceY - height/2;
  			for (int col = row%2; col < numCols; col += 2) {
  				double x = col*spaceX - width/2;
  				ret.add( new Point2D_F64(x,y));
  			}
  		}
  
  		return ret;
  	}
docs: Specifies the physical location of each point on the 2D calibration plane.  The fiducial is centered on the
  coordinate system
  @param numRows Number of rows
  @param numCols Number of columns
  @param centerDistance Space between each circle's center along x and y axis
  @return 2D locations