/* ka_ce62.c koch curve p.387-389 1998.3.19 sekiya 2000.5.13 window(), view(), rectfxor 2001.5.12 symbol(name, date) */ #include <stdlib.h> /* EXIT_SUCCESS */ #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 <stdarg.h> /* sprintf */ #include <time.h> void koch(int n, double leng); main(int argc,char *argv[]) { int n=4, vxl=20, vxr=200, vyl=50, vyu=140; /* n:コッホ次数 */ double leng=300.0; /* leng:n次の長さ */ char title[100]; char *pa; /* *pa:日付用文字列(ポインタ変数)*/ long nowtime; time(&nowtime); pa = ctime(&nowtime); *(pa+24)='\0'; printf("<%s>\n", pa); /* 実行年月日などをコマンドプロンプトに表示する。 */ printf("ka_cp62.c Koch curve p.387-389\n"); printf("Ctrl+Cで終ります。\n"); if(argc==1) { /* 引数なし(標準) */ gint(640,400); /* グラフィックス初期化(640x400dot) */ } else { /* 引数あり(拡大) */ gint(1000,625); /* グラフィックス初期化(1000x625dot) */ base_screen(640,400); /* 基本画面設定 */ } window(10,160,310,310); symbol(20,5,"コッホKoch曲線ka_ce62-河西,C言語によるはじめてのアルゴリズム入門p.387-391",5,1,1); symbol(20,25,"九州ポリテクカレッジ 情報技術科 関谷",3,1,1); /* 2001.5.12 */ symbol(350,25, pa, 6, 1., 1.0); for (n=0; n < 9; n++){ printf(" n:%d\n", n); view(vxl, vyl, vxr, vyu); sprintf(title,"次数n:%d", n); symbol(vxl+10, vyl+20, title,4,1,1); vxl += 200; vxr +=200; if(n==2 || n == 5) { vxl=20; vxr=200; vyl += 100; vyu += 100; } setpoint(10,300); setangle(0); koch(n, leng); } rectfillXOR(0,0,639,399,7); gend(); /* グラフィックス終了 */ return EXIT_SUCCESS; } /* main */ void koch(int n, double leng) { if (n==0 || leng < 3) { move(leng, 5); } else { koch(n-1,leng/3); turn(60); koch(n-1,leng/3); turn(-120); koch(n-1,leng/3); turn(60); koch(n-1,leng/3); } }