/* ka_ce63.c Tree curve-1 p.395-398 1998.3.20, 2001.5.12 sekiya */ #include <stdlib.h> /* EXIT_SUCCESS */ #include <stdarg.h> /* sprintf */ #include "gint.f" /* グラフィックス初期化関数 gint,gend */ #include "basescrn.f" /* 基本画面設定関数 base_screen */ #include "gcls.f" /* 直線関数 */ #include "symbol.f" /* 文字関数 */ #include "Glibwv.h" /* タートル関数(河西) */ #include "rectfxor.f" /* 長方形塗りつぶし関数 */ #include <math.h> #include <time.h> void tree(int n, double x0, double y0, double leng, double angle); double scale, branch; main(int argc,char *argv[]) { int i, n, vxl=0, vxr=180; double x0, y0, leng, angle; char title[100]; char *pa; /* *pa:日付用文字列(ポインタ変数)*/ long nowtime; time(&nowtime); pa = ctime(&nowtime); *(pa+24)='\0'; printf("<%s>\n", pa); /* 実行年月日などをコマンドプロンプトに表示する。 */ n=8; /* 枝の次数 */ x0=300.0; y0=400.0; /* 根の位置 */ leng = 100.0; /* 枝の長さ */ angle = 90.0; /* 枝の向き */ scale = 1.4; /* 枝の伸び率 */ branch = 20.0; /* 枝の分岐角 */ printf("ka_ce63.c Tree curve-1 p.396-398\n"); printf("Ctrl+Cで終ります。\n"); if(argc==1) { /* 引数なし(標準) */ gint(640,400); /* グラフィックス初期化(640x400dot) */ } else { /* 引数あり(拡大) */ gint(1000,625); /* グラフィックス初期化(1000x625dot) */ base_screen(640,400); /* 基本画面設定 */ } symbol(20,5,"樹木曲線ka_cp63-河西,C言語によるはじめてのアルゴリズム入門p.385-387",5,1,1); symbol(20,25,"九州ポリテクカレッジ 情報技術科 関谷",3,1,1); /* 2001.5.12 */ symbol(350,25, pa, 6, 1., 1.0); window(100,0,500,400); for(i=0;i<3;i++){ while(printf("Key-in n branch scale ->\n"),scanf("%d %lf %lf", &n, &branch,&scale)!=3); sprintf(title,"n:%d 角:%2.0lf°比:%1.1lf", n, branch, scale); symbol(vxl+10,50,title,4,1,1); view(vxl, 100,vxr,280); vxl += 180; vxr +=180; printf("n:%d 角:%5.0lf 比:%5.1lf", n, branch,scale); tree(n, x0, y0, leng, angle); } rectfillXOR(0,0,639,399,7); gend(); /* グラフィックス終了 */ return EXIT_SUCCESS; } /* main */ void tree(int n, double x0, double y0, double leng, double angle) { if (n==0) { return; } else { setpoint(x0,y0); setangle(angle); move(leng, 5); // 5:color x0=LPX; y0=LPY; tree(n-1,x0,y0,leng/scale,angle-branch);// 右部分木 // tree(n-1,x0,y0,leng/scale*0.7,angle-branch);// 右部分木(小さく) tree(n-1,x0,y0,leng/scale,angle+branch);// 左部分木 } }