private static void removeInitialIntermediatePoints() {
    // remove the (possible) initial collinear points in hull except the
    // farthest one from the anchor point
    boolean collinear = true;
    while (hull.size() > 1 && collinear) {
      Position pos1 = hull.first();
      Position pos2 = hull.after(pos1);
      Point2D p1 = (Point2D)pos1.element();
      Point2D p2 = (Point2D)pos2.element();
      if (geomTester.leftRightTurn(anchorPoint,p1,p2) ==
	  GeomTester2D.COLLINEAR)
	if (geomTester.closest(anchorPoint,p1,p2) == p1)
	  hull.remove(pos1);
	else
	  hull.remove(pos2);
      else
	collinear = false;
    }
  }
  private static void scan() {
    // Graham's scan
    Position first = hull.first();    
    Position last = hull.last();    
    Position prev = hull.first();
    Position curr = hull.after(prev);
    do {
      Position next = hull.after(curr);
      Point2D prevPoint = (Point2D)prev.element();
      Point2D currPoint = (Point2D)curr.element();
      Point2D nextPoint = (Point2D)next.element();
      if (geomTester.leftRightTurn(prevPoint,currPoint,nextPoint) ==
	  GeomTester2D.LEFT_TURN)
	prev = curr;
      else {
	hull.remove(curr);
	prev = hull.before(prev);
      }
      curr = hull.after(prev);
    }
    while (curr != last);
  }
}