/*
    基本情報技術者試験          平成13年度・春期・午後 問9
                                BohYoh Shibata PREPARATION
*/

void    MoveTo( int sx, int sy ) ;
void    LineTo( int ex, int ey ) ;
int     CmpLine( int xs, int ys, int xe, int ye, int len ) ;

void  DrawCurve( int sx, int sy, int x1, int y1, int x2, int y2,
                 int ex, int ey, int len )
{
  int   p1x, p1y, p2x, p2y, p3x, p3y ;
  int   p4x, p4y, p5x, p5y, p6x, p6y ;

  if ( CmpLine( sx, sy, x1, y1, len) &&
       CmpLine( x1, y1, x2, y2, len) &&
       CmpLine( x2, y2, ex, ey, len)  )  {
        MoveTo( sx, sy ) ; LineTo( x1, y1 ) ;
        LineTo( x2, y2 ) ; LineTo( ex, ey ) ;
        return ;
  }

  p1x = ( sx + x1 ) / 2 ; p1y = ( sy + y1 ) / 2 ;
  p2x = ( x1 + x2 ) / 2 ; p2y = ( y1 + y2 ) / 2 ;
  p3x = ( x2 + ex ) / 2 ; p3y = ( y2 + ey ) / 2 ;
  p4x = ( p1x + p2x ) / 2 ; p4y = ( p1y + p2y ) / 2 ;
  p5x = ( p2x + p3x ) / 2 ; p5y = ( p2y + p3y ) / 2 ;
  p6x = ( p4x + p5x ) / 2 ; p6y = ( p4y + p5y ) / 2 ;

  DrawCurve( sx, sy, p1x, p1y, p4x, p4y, p6x, p6y, len) ;
  DrawCurve( p6x, p6y, p5x, p5y, p3x, p3y, ex, ey, len) ;
  return ;
}

int  CmpLine( int xs, int ys, int xe, int ye, int len)
{
  int   len1 = xe - xs ;
  int   len2 = ye - ys ;

  if ( len1 < 0 ) len1 = -len1 ;
  if ( len2 < 0 ) len2 = -len2 ;

  if ( ( len1 < len) && ( len2 < len ) )
        return  1 ;
  return 0 ;
}