docs: protected void computePointsAndWeights(double slopeX, double slopeY, double x0, double y0, double tanX, double tanY) {
  
  		samplePts.reset();
  		weights.reset();
  		int numSamples = radialSamples*2+2;
  		int numPts = numSamples-1;
  		double widthX = numSamples*tanX;
  		double widthY = numSamples*tanY;
  
  		for (int i = 0; i < lineSamples; i++ ) {
  			// find point on line and shift it over to the first sample point
  			double frac = i/(double)(lineSamples -1);
  			double x = x0 + slopeX*frac-widthX/2.0;
  			double y = y0 + slopeY*frac-widthY/2.0;
  
  			// Unless all the sample points are inside the image, ignore this point
  			if(!integral.isInside(x, y) || !integral.isInside(x + widthX,y + widthY))
  				continue;
  
  			double sample0 = integral.compute(x, y, x + tanX, y + tanY);
  			x += tanX; y += tanY;
  			for (int j = 0; j < numPts; j++) {
  				double sample1 = integral.compute(x, y, x + tanX, y + tanY);
  
  				double w = sample0 - sample1;
  				if( w < 0 ) w = -w;
  
  				if( w > 0 ) {
  					weights.add(w);
  					samplePts.grow().set((x - center.x) / localScale, (y - center.y) / localScale);
  				}
  
  				x += tanX; y += tanY;
  				sample0 = sample1;
  			}
  		}
  	}