private Hashtable<IPoint,List<ICircle>> filter(Hashtable<IPoint,ICircle[]> circleIntersections){
  Hashtable<IPoint,List<ICircle>> real=new Hashtable<IPoint,List<ICircle>>();
  for (  IPoint pt : circleIntersections.keySet()) {
    ICircle[] circs=circleIntersections.get(pt);
    for (int i=0; i < circs.length - 1; i++) {
      for (int j=i + 1; j < circs.length; j++) {
        IPoint[] pts=intersects(circs[i],circs[j]);
        if (pts != null) {
          for (          IPoint p : pts) {
            report(real,p,circs[i],circs[j]);
          }
        }
      }
    }
  }
  return real;
}

private Hashtable < IPoint , List < ICircle > > filter ( Hashtable < IPoint , ICircle [ ] > circleIntersections ) { Hashtable < IPoint , List < ICircle > > real = new Hashtable < IPoint , List < ICircle > > ( ) ; for ( IPoint pt : circleIntersections . keySet ( ) ) { ICircle [ ] circs = circleIntersections . get ( pt ) ; for ( int i = 0 ; i < circs . length - 1 ; i ++ ) { for ( int j = i + 1 ; j < circs . length ; j ++ ) { IPoint [ ] pts = intersects ( circs [ i ] , circs [ j ] ) ; if ( pts != null ) { for ( IPoint p : pts ) { report ( real , p , circs [ i ] , circs [ j ] ) ; } } } } } return real ; }
this method implements the algebraic intersection detection method to determine whether the circles are actually intersecting . some false positives may occur , and thus must be filtered out .
