新しく発言する EXIT インデックスへ
自己相似図形その1

  自己相似図形その1 A.Ohira 2005/08/26 10:39:38 
  自己相似図形その2 A.Ohira 2005/08/26 10:43:50 
   └自己相似図形その3 A.Ohira 2005/08/26 10:45:25 
    └自己相似形その4 A.Ohira 2006/01/10 15:09:33 

  自己相似図形その1 A.Ohira 2005/08/26 10:39:38  ツリーへ

自己相似図形その1 返事を書く
A.Ohira 2005/08/26 10:39:38
はじめまして。高校で情報を担当(おこがましいですが)している教員です。
久しぶりに授業でBASICを扱ってみようか、とダウンロードしてみました。
ついでに、昔々にBASICで遊んでいたころのプログラムを移植(というほどでもない)してみました。
まずはC曲線です。Levy曲線ていうんですか?
orderに、0から順に整数値を入力してください。

DECLARE EXTERNAL SUB ccurve
SET WINDOW -2.5,2.5,-2.5,2.5
INPUT PROMPT "order":order
SET LINE COLOR order+1
CALL ccurve(order,-1,0,1,0)
END
EXTERNAL SUB ccurve(order,xf,yf,xt,yt)
IF order=0 THEN
PLOT LINES: xf,yf;xt,yt
ELSE
LET xm=(xf+xt)/2-(yt-yf)/2
LET ym=(yf+yt)/2+(xt-xf)/2
CALL ccurve(order-1,xf,yf,xm,ym)
CALL ccurve(order-1,xm,ym,xt,yt)
END IF
END SUB

  自己相似図形その2 A.Ohira 2005/08/26 10:43:50  ツリーへ

Re: 自己相似図形その1 返事を書く
A.Ohira 2005/08/26 10:43:50
自己相似図形その2
ドラゴン曲線です。C曲線と基本的に1行しか変わりませんが。

DECLARE EXTERNAL SUB dcurve
SET WINDOW -2.5,2.5,-2.5,2.5
INPUT PROMPT "order":order
SET LINE COLOR order+1
CALL dcurve(order,-1,0,1,0)
END
EXTERNAL SUB dcurve(order,xf,yf,xt,yt)
IF order=0 THEN
PLOT LINES: xf,yf;xt,yt
ELSE
LET xm=(xf+xt)/2-(yt-yf)/2
LET ym=(yf+yt)/2+(xt-xf)/2
CALL dcurve(order-1,xf,yf,xm,ym)
CALL dcurve(order-1,xt,yt,xm,ym)
END IF
END SUB

   └自己相似図形その3 A.Ohira 2005/08/26 10:45:25  ツリーへ

Re: 自己相似図形その2 返事を書く
A.Ohira 2005/08/26 10:45:25
自己相似図形その3
コッホ曲線です。

DECLARE EXTERNAL SUB koch
SET WINDOW -1.2,1.2,-1.2,1.2
INPUT PROMPT "order":order
SET LINE COLOR order+1
CALL koch(order,-1,0,1,0)
END
EXTERNAL SUB koch(order,xf,yf,xt,yt)
IF order=0 THEN
PLOT LINES: xf,yf;xt,yt
ELSE
LET x1=(xf*2+xt)/3
LET y1=(yf*2+yt)/3
LET x2=(xf+xt)/2-(yt-yf)/(2*SQR(3))
LET y2=(yf+yt)/2+(xt-xf)/(2*SQR(3))
LET x3=(xf+xt*2)/3
LET y3=(yf+yt*2)/3
CALL koch(order-1,xf,yf,x1,y1)
CALL koch(order-1,x1,y1,x2,y2)
CALL koch(order-1,x2,y2,x3,y3)
CALL koch(order-1,x3,y3,xt,yt)
END IF
END SUB

    └自己相似形その4 A.Ohira 2006/01/10 15:09:33  ツリーへ

Re: 自己相似図形その3 返事を書く
A.Ohira 2006/01/10 15:09:33
自己相似形その4
ふと思い立って、同じ手法で今度はシェルピンスキーのギャスケットを描いてみました。
だからなんだ、と言われそうですが。
やはりorderに0から順に整数を入れて変化を楽しめます。

DECLARE EXTERNAL SUB sierpinski
SET WINDOW -1.5,1.5,-.5,2.5
INPUT PROMPT "order":order
SET LINE COLOR order+1
CALL sierpinski(order,-1,0,1,0)
END
EXTERNAL SUB sierpinski(order,xf,yf,xt,yt)
IF order=0 THEN
PLOT LINES: xf,yf;xt,yt
ELSE
LET x1=(3*xf+xt+SQR(3)*yf-SQR(3)*yt)/4
LET y1=(-SQR(3)*xf+SQR(3)*xt+3*yf+yt)/4
LET x2=(xf+3*xt+SQR(3)*yf-SQR(3)*yt)/4
LET y2=(-SQR(3)*xf+SQR(3)*xt+yf+3*yt)/4
CALL sierpinski(order-1,x1,y1,xf,yf)
CALL sierpinski(order-1,x1,y1,x2,y2)
CALL sierpinski(order-1,xt,yt,x2,y2)
END IF
END SUB


インデックスへ EXIT
新規発言を反映させるにはブラウザの更新ボタンを押してください。