3D−LOGO
一つの直線を3等分し描画
FD 300 LT 60 FD 300 RT 120 FD 300 LT 60 FD 300
FD 100 LT 60 FD 100 RT 120 FD 100 LT 60 FD 100 LT 60
FD 100 LT 60 FD 100 RT 120 FD 100 LT 60 FD 100 RT 120
FD 100 LT 60 FD 100 RT 120 FD 100 LT 60 FD 100 LT 60
FD 100 LT 60 FD 100 RT 120 FD 100 LT 60 FD 100
KOCH LT 60 KOCH RT 120 KOCH LT 60 KOCH
これに引数をつけて、手続き名を登録するとプログラムが完成する。このように再帰部分を考えるといろいろな応用が簡単にできる。
・TURBO−C
/* --- KOCH.C < by TURBO C > --- */
#include "stdio.h"
#include "graphics.h"
void koch(sx,sy,ex,ey,n)
int sx,sy,ex,ey,n;
{ int dx,dy,tx,ty,ux,uy;
dx=(ex-sx)/3.0;dy=(ey-sy)/3.0;
tx=dx/2.0-1.732050*dy/2.0+sx+dx;
ty=1.732050*dx/2.0+dy/2.0+sy+dy;
ux=2.0*dx+sx;uy=2.0*dy+sy;dx=dx+sx;dy=dy+sy;
if (n<1)
{ setcolor(3);
line(sx,sy,dx,dy);line(dx,dy,tx,ty);
line(tx,ty,ux,uy);line(ux,uy,ex,ey);
}
else
{ n-=1;
koch(sx,sy,dx,dy,n);koch(dx,dy,tx,ty,n);
koch(tx,ty,ux,uy,n);koch(ux,uy,ex,ey,n);
>
}
}
void main()
{ int gdriver=DETECT,gmode;
int sx,sy,ex,ey;
int gerr, ln;
if(registerbgidriver(PC98_driver)<0) exit(1);
initgraph(&gdriver,&gmode,"A:\\TC\\BGI\\");
if((gerr=graphresult())!=grOk)
{ printf("Error : %s\n",grapherrormsg(gerr));
exit(1);
}
setcolor(1); rectangle(0,0,639,399);
sx=40; sy=50; ex=600; ey=350; ln=4;
koch(sx,sy,ex,ey,ln);
}
3D−LOGOは、コッホ曲線などの線画系の描画に威力を発揮し、 BASICは、マンデルブロー集合・ジュリア集合などの座標系の描画 に威力を発揮するのではないか。描画の早さを意識するのなら、C言語 であると考える。
Home Page | Index Page | Pre Page | Next Page |