新しく発言する EXIT インデックスへ
L-system(エルシステム)

  L-system(エルシステム) 山中和義 2007/09/05 17:42:05  (修正2回)
  つづき 山中和義 2007/09/05 22:48:01  (修正1回)
   └サンプル図形 山中和義 2007/09/06 14:41:34  (修正1回)

  L-system(エルシステム) 山中和義 2007/09/05 17:42:05  (修正2回) ツリーへ

L-system(エルシステム) 返事を書く ノートメニュー
山中和義 <drdlxujciw> 2007/09/05 17:42:05 ** この記事は2回修正されてます
!L-system(エルシステム、Lindenmayer system)

OPTION BASE 0
DIM p$(255)

SUB Lsystem(n,p$(),w$, v$) !パラメトリックL-system G={V,S,ω,P}
LET v$=w$ !初期化
PRINT 0;v$

FOR i=1 TO n !成長させる
LET nt$=""
FOR k=1 TO LEN(v$) !順次置き換えてゆく
LET t$=mid$(v$,k,1)
LET nt$=nt$&p$(ORD(t$)) !規則を適用する
NEXT k
LET v$=nt$ !置換後

PRINT i;v$
NEXT i
END SUB


!シェルピンスキーの三角形
LET v$="" !変数
LET p$(ORD("+"))="+" !定数
LET p$(ORD("-"))="-"
LET w$="A" !初期状態
LET p$(ORD("A"))="B-A-B" !置換規則 ※A→B-A-B
LET p$(ORD("B"))="A+B+A"

CALL Lsystem(6,p$,w$, v$) !コマンドを生成する

!A,Bは直線の描画、+は左へ60°回転、-は右へ60°回転する事を意味する
SET WINDOW -1,1,-1,1 !表示領域
CLEAR
CALL turtle(v$, 0.02,60, -1,-1) !図形へ
WAIT DELAY 2


!コッホ曲線(Koch)
LET v$="" !変数
LET p$(ORD("+"))="+" !定数
LET p$(ORD("-"))="-"
LET w$="F" !初期状態
LET p$(ORD("F"))="F+F--F+F" !置換規則

CALL Lsystem(4,p$,w$, v$)
CLEAR
CALL turtle(v$, 0.02,60, -1,-1) !図形へ
WAIT DELAY 2


!コッホ島(Koch)
LET v$="" !変数
LET p$(ORD("+"))="+" !定数
LET p$(ORD("-"))="-"
LET w$="F-F-F-F" !初期状態
LET p$(ORD("F"))="F-F+F+FF-F-F+F" !置換規則

CALL Lsystem(3,p$,w$, v$)
CLEAR
CALL turtle(v$, 0.02,90, -0.5,0.5) !図形へ
WAIT DELAY 2


!植物
LET v$="" !変数
LET p$(ORD("+"))="+" !定数
LET p$(ORD("-"))="-"
LET p$(ORD("["))="["
LET p$(ORD("]"))="]"
LET w$="++F" !初期状態
LET p$(ORD("F"))="F[-F]F[+F][F]" !置換規則

CALL Lsystem(4,p$,w$, v$)
CLEAR
CALL turtle(v$, 0.04,25, -1,-1) !図形へ
WAIT DELAY 2


  つづき 山中和義 2007/09/05 22:48:01  (修正1回) ツリーへ

Re: L-system(エルシステム) 返事を書く ノートメニュー
山中和義 <drdlxujciw> 2007/09/05 22:48:01 ** この記事は1回修正されてます
つづき




!簡易タートルグラフィックス(FRACTINT L-systems)

DIM stk(300) !スタック
LET sp=1 !スタックポインタ

SUB turtle(v$, d,a,x,y) !点(x,y)から図形にする ※線分の長さd、回転角度a
LET x0=x !開始点
LET y0=y
LET th=0 !0度

FOR i=1 TO LEN(v$) !各コマンドに応じて
LET t$=mid$(v$,i,1)
!!!PRINT i;t$
SELECT CASE t$
CASE "+"
LET th=th+a !左へ
CASE "-"
LET th=th-a !右へ
CASE "["
IF sp+3>UBOUND(stk) THEN
PRINT "スタック・オバーフロー"
STOP
END IF
LET stk(sp)=x0 !スタックに保存する
LET stk(sp+1)=y0
LET stk(sp+2)=th
LET sp=sp+3
CASE "]"
IF sp<3 THEN
PRINT "スタックにデータはありません。"
STOP
END IF
LET sp=sp-3
LET x0=stk(sp) !スタックから取り出す
LET y0=stk(sp+1)
LET th=stk(sp+2)
CASE "F","G","A","B"
LET xx=x0+d*COS(RAD(th)) !移動先を計算する
LET yy=y0+d*SIN(RAD(th))
IF t$="G" THEN !移動のみ
ELSE
PLOT LINES: x0,y0; xx,yy !直線を描く
END IF
LET x0=xx !現在位置
LET y0=yy
CASE ELSE
END SELECT
NEXT i
END SUB

END

   └サンプル図形 山中和義 2007/09/06 14:41:34  (修正1回) ツリーへ

Re: つづき 返事を書く ノートメニュー
山中和義 <drdlxujciw> 2007/09/06 14:41:34 ** この記事は1回修正されてます
サンプル図形




!花
LET v$="" !変数
LET p$(ORD("+"))="+" !定数
LET p$(ORD("-"))="-"
LET p$(ORD("["))="["
LET p$(ORD("]"))="]"
LET p$(ORD("F"))=""
LET w$="[X]++[X]++[X]++[X]++[X]" !初期状態
LET p$(ORD("W"))="YF++ZF----XF[-YF----WF]++" !置換規則
LET p$(ORD("X"))="+YF--ZF[---WF--XF]+"
LET p$(ORD("Y"))="-WF++XF[+++YF++ZF]-"
LET p$(ORD("Z"))="--YF++++WF[+ZF++++XF]--XF"

CALL Lsystem(4,p$,w$, v$)
CLEAR
CALL turtle(v$, 0.06,36, 0,0) !図形へ
WAIT DELAY 2


!クロスステッチ
LET v$="" !変数
LET p$(ORD("+"))="+" !定数
LET p$(ORD("-"))="-"
LET w$="F" !初期状態
LET p$(ORD("F"))="F+F-F-F+F" !置換規則

CALL Lsystem(4,p$,w$, v$)
CLEAR
CALL turtle(v$, 0.02,90, -0.75,0) !図形へ
WAIT DELAY 2


!C曲線
LET v$="" !変数
LET p$(ORD("+"))="+" !定数
LET p$(ORD("-"))="-"
LET w$="F" !初期状態
LET p$(ORD("F"))="F+F-" !置換規則

CALL Lsystem(10,p$,w$, v$)
CLEAR
CALL turtle(v$, 0.02,90, 0,-0.5) !図形へ
WAIT DELAY 2


!ヒルベルト曲線(Hilbert)
LET v$="" !変数
LET p$(ORD("+"))="+" !定数
LET p$(ORD("-"))="-"
LET p$(ORD("F"))="F"
LET w$="X" !初期状態
LET p$(ORD("X"))="-YF+XFX+FY-" !置換規則
LET p$(ORD("Y"))="+XF-YFY-FX+"

CALL Lsystem(5,p$,w$, v$)
CLEAR
CALL turtle(v$, 0.04,90, -0.5,0.5) !図形へ
WAIT DELAY 2


!シェルピンスキー曲線(Sierpinski)
LET v$="" !変数
LET p$(ORD("+"))="+" !定数
LET p$(ORD("-"))="-"
LET p$(ORD("F"))="F"
LET w$="L--F--L--F" !初期状態
LET p$(ORD("L"))="+R-F-R+" !置換規則
LET p$(ORD("R"))="-L+F+L-"

CALL Lsystem(7,p$,w$, v$)
CLEAR
CALL turtle(v$, 0.04,360/8, -0.5,0) !図形へ
WAIT DELAY 2


!シェルピンスキーの三角形
LET v$="" !変数
LET p$(ORD("+"))="+" !定数
LET p$(ORD("-"))="-"
LET p$(ORD("["))="["
LET p$(ORD("]"))="]"
LET w$="F-F-F" !初期状態
LET p$(ORD("F"))="F[-F]F" !置換規則

CALL Lsystem(6,p$,w$, v$)
CLEAR
CALL turtle(v$, 0.02,360/3, -0.75,0.5) !図形へ
WAIT DELAY 2


!ドラゴン曲線(Dragon)
LET v$="" !変数
LET p$(ORD("+"))="+" !定数
LET p$(ORD("-"))="-"
LET p$(ORD("F"))="F"
LET w$="X" !初期状態
LET p$(ORD("X"))="X-YF-" !置換規則
LET p$(ORD("Y"))="+FX+Y"

CALL Lsystem(11,p$,w$, v$)
CLEAR
CALL turtle(v$, 0.02,90, 0,0) !図形へ
WAIT DELAY 2


!Terdragon
LET v$="" !変数
LET p$(ORD("+"))="+" !定数
LET p$(ORD("-"))="-"
LET w$="X" !初期状態
LET p$(ORD("F"))="X" !置換規則
LET p$(ORD("X"))="F+F-F" !置換規則

CALL Lsystem(2*6-1,p$,w$, v$) !6次元 ※2*n-1
CLEAR
CALL turtle(v$, 0.04,120, 0.5,0) !図形へ
WAIT DELAY 2


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