docs: public static FitData<Circle2D_F64> averageCircle_I32(List<Point2D_I32> points, GrowQueue_F64 optional,
  														  FitData<Circle2D_F64> outputStorage) {
  		if( outputStorage == null ) {
  			outputStorage = new FitData<>(new Circle2D_F64());
  		}
  		if( optional == null ) {
  			optional = new GrowQueue_F64();
  		}
  
  		Circle2D_F64 circle = outputStorage.shape;
  
  		int N = points.size();
  
  		// find center of the circle by computing the mean x and y
  		int sumX=0,sumY=0;
  		for( int i = 0; i < N; i++ ) {
  			Point2D_I32 p = points.get(i);
  			sumX += p.x;
  			sumY += p.y;
  		}
  
  		optional.reset();
  		double centerX = circle.center.x = sumX/(double)N;
  		double centerY = circle.center.y = sumY/(double)N;
  
  		double meanR = 0;
  		for( int i = 0; i < N; i++ ) {
  			Point2D_I32 p = points.get(i);
  			double dx = p.x-centerX;
  			double dy = p.y-centerY;
  
  			double r = Math.sqrt(dx*dx + dy*dy);
  			optional.push(r);
  			meanR += r;
  		}
  		meanR /= N;
  		circle.radius = meanR;
  
  		// compute radius variance
  		double variance = 0;
  		for( int i = 0; i < N; i++ ) {
  			double diff = optional.get(i)-meanR;
  			variance += diff*diff;
  		}
  		outputStorage.error = variance/N;
  
  		return outputStorage;
  	}