docs: private boolean addTangents(Grid grid, int rowA, int colA, int rowB, int colB) {
  		EllipseRotated_F64 a = grid.get(rowA,colA);
  		EllipseRotated_F64 b = grid.get(rowB,colB);
  
  		if( !tangentFinder.process(a,b, A0, A1, A2, A3, B0, B1, B2, B3) ) {
  			return false;
  		}
  		Tangents ta = tangents.get(grid.getIndexOfRegEllipse(rowA,colA));
  		Tangents tb = tangents.get(grid.getIndexOfRegEllipse(rowB,colB));
  
  		// Which point is 0 or 3 is not defined and can swap arbitrarily.  To fix this problem
  		// 0 will be defined as on the 'positive side' of the line connecting the ellipse centers
  
  		double slopeX = b.center.x-a.center.x;
  		double slopeY = b.center.y-a.center.y;
  
  		double dx0 = A0.x-a.center.x;
  		double dy0 = A0.y-a.center.y;
  
  		double z = slopeX*dy0 - slopeY*dx0;
  		if( z < 0 == (rowA == rowB)) {
  			Point2D_F64 tmp = A0; A0 = A3; A3 = tmp;
  			tmp = B0; B0 = B3; B3 = tmp;
  		}
  
  		// add tangent points from the two lines which do not cross the center line
  		if( rowA == rowB ) {
  			ta.t[ta.countT++].set(A0);
  			ta.b[ta.countB++].set(A3);
  			tb.t[tb.countT++].set(B0);
  			tb.b[tb.countB++].set(B3);
  		} else {
  			ta.r[ta.countL++].set(A0);
  			ta.l[ta.countR++].set(A3);
  			tb.r[tb.countL++].set(B0);
  			tb.l[tb.countR++].set(B3);
  		}
  		return true;
  	}