if (Line2D.linesIntersect(b0, a0, b2, a2, 0.0, 0.0, distance, 0.0))
if (Line2D.linesIntersect(b0, a0, b2, a2, EPSILON, 0.0, distance, 0.0))
  private int getAxisIntersections(double x, double y, boolean useYaxis,                                   double distance)  {    int nCrossings = 0;    double a0;    double a1;    double a2;    double b0;    double b1;    double b2;    double[] r = new double[3];    int nRoots;    a0 = a2 = 0.0;    if (useYaxis)      {	a0 = getY1() - y;	a1 = getCtrlY() - y;	a2 = getY2() - y;	b0 = getX1() - x;	b1 = getCtrlX() - x;	b2 = getX2() - x;      }    else      {	a0 = getX1() - x;	a1 = getCtrlX() - x;	a2 = getX2() - x;	b0 = getY1() - y;	b1 = getCtrlY() - y;	b2 = getY2() - y;      }    /* If the axis intersects a start/endpoint, shift it up by some small        amount to guarantee the line is 'inside'       If this is not done,bad behaviour may result for points on that axis. */    if (a0 == 0.0 || a2 == 0.0)      {	double small = getFlatness() * (1E-10);	if (a0 == 0.0)	  a0 += small;	if (a2 == 0.0)	  a2 += small;      }    r[0] = a0;    r[1] = 2 * (a1 - a0);    r[2] = (a2 - 2 * a1 + a0);    nRoots = solveQuadratic(r);    for (int i = 0; i < nRoots; i++)      {	double t = r[i];	if (t >= 0.0 && t <= 1.0)	  {	    double crossing = t * t * (b2 - 2 * b1 + b0) + 2 * t * (b1 - b0)	                      + b0;	    /* single root is always doubly degenerate in quads */	    if (crossing > 0 && crossing < distance)	      nCrossings += (nRoots == 1) ? 2 : 1;	  }      }    if (useYaxis)      {	if (Line2D.linesIntersect(b0, a0, b2, a2, 0.0, 0.0, distance, 0.0))	  nCrossings++;      }    else      {	if (Line2D.linesIntersect(a0, b0, a2, b2, 0.0, 0.0, 0.0, distance))	  nCrossings++;      }    return (nCrossings);  }