/*
基本情報技術者試験 平成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 ;
}