private static Point round(Point prev, Point curr, Point next){
		double x = curr.x().doubleValue();
		double y = curr.y().doubleValue();
		for(int hop=0; ;hop++){//BUG: too long time when two segments are nearly parallel
			//System.out.println(hop);
			for(int row=-hop; row<=hop; row++){
				for(int col=-hop; col<=hop; col++){
					if(Math.abs(row)==hop || Math.abs(col)==hop){
						Point p = new Point(x+DoubleInterval.ulp(x)*row,y+DoubleInterval.ulp(y)*col);
						try{
							if(!Point.isRightTurn(prev, p, curr) && !Point.isRightTurn(curr, p, next)){
								return p;
							}
						}catch(Exception e){
							//try next;
						}							
					}
				}
			}
		}
	}