/***************************/ /* 三角形を表示する(2) */ /***************************/ #include #include #include #include char buf[25][80]; // 25x80文字分の配列 void Gen_line(int,int,int,int); // 線分生成 void main( ) { int x1= 5,y1= 0; // 頂点1 int x2=25,y2= 0; // 頂点2 int x3=30,y3=10; // 頂点3 int y; memset(&buf[0][0],' ',25*80); // 配列を空白で初期化 //--線分プロット-- Gen_line(x1,y1,x2,y2); // 線分生成 Gen_line(x2,y2,x3,y3); // 線分生成 Gen_line(x3,y3,x1,y1); // 線分生成 //--表示-- for( y=24; y>=0; y-- ) { printf("%.80s",&buf[y][0]); } // 画面1行表示 fflush(stdout); } void Gen_line( /*------------*/ /* 線分生成 */ /*------------*/ int xS, // 始点 int yS, int xE, // 終点 int yE) { double dx,dy,a=0,b=0; int x,y,yO,yN; buf[yS][xS]='*'; // 始点 buf[yE][xE]='*'; // 終点 if ( xS==xE ) // 垂直線 { if ( yS>yE ) { y=yS; yS=yE; yE=y; } for( y=yS+1; yxE ) { x=xS; xS=xE; xE=x; y=yS; yS=yE; yE=y; } // 始点終点入れ替え dx=xE-xS; dy=yE-yS; a=dy/dx; b=yS-a*xS; // 直線の係数 if ( a>=-1.0 && a<=1.0 ) // 傾きが小さい { for( x=xS+1; x=0 ) // 傾きが大きくプラス { for( x=xS+1,yO=yS; x<=xE; x++,yO=yN ) // 線分補完 { yN=a*x+b+0.5; for( y=yO+1; y<=yN; y++ ) buf[y][x]='*'; } } else // 傾きが大きくマイナス { for( x=xS+1,yO=yS; x<=xE; x++,yO=yN ) // 線分補完 { yN=a*x+b+0.5; for( y=yO-1; y>=yN; y-- ) buf[y][x]='*'; } } } }