フラクタル・ショー2 フリースタイル SECOND 2007/08/17 02:45:13 (修正4回) └修正の経緯 SECOND 2007/08/17 17:34:40 (修正2回)
フラクタル・ショー2 フリースタイル SECOND 2007/08/17 02:45:13 (修正4回) ツリーへ
フラクタル・ショー2 フリースタイル |
返事を書く ノートメニュー |
SECOND <cszcthjjdj> 2007/08/17 02:45:13 ** この記事は4回修正されてます | |
! フラクタル・ショー2 フリースタイル
!複素平面上で、(0,0)~(1,0) の領域 z=0~1 を、下の行列で、 !N回写像した領域 として描きます。(セルフ・アファイン集合) !領域 z=0~1 の写像は、一次線型で、常に直線なため、z=0~1 全ての点を !写像せず、z=0 と z=1 の2点の写像を求めて、線で結ぶ。 !Nが大きい場合は、この2点の写像が、同じ画素に重なるほど細かくなるため、 !z=0 と z=1 の写像、何れか1点を描画すれば、十分ですが、 !プログラムは、Nが小さい場合を、含む表現なため、この省略は、しません。 !1領域の z=0~1 は、共役複素数conj(z=0~1) と伴に !N=1番目の写像に。 !|f0| |a b 0 | | z | !|f1|= |r d 1-r-d| |conj(z)| !|0 | |0 0 0 | | 1 | !上の写像、f0 f1 は、2領域のzとして、次は倍に増えて写像します。 !N=2番目の写像は、4領域のzに。 SET TEXT FONT "MS 明朝",18 OPTION ARITHMETIC COMPLEX DIM z0(2^14) ! 最大N=14 LET i=complex(0,1) ! i=虚数 !---------- LET a=0 LET b=(3+SQR(3)*i)/4.5 LET r=0 LET d=2/3 CALL Afine("葉ざかり", 14, 0.5, 0.1, 0.8) ! (題名, 最大N, 中心X, 中心Y, 半幅) LET a=(1+i)/1.9 LET b=+0.05 LET r=-0.1 LET d=conj(a) CALL Afine("線香花火", 14, 0.35, 0.3, 0.9) LET a=(1+i)/2 LET b=0 LET r=0 LET d=-a*.9 CALL Afine("花", 14, 0.6, 0.3, 1.3) LET a=-(1+i)/2 LET b=0 LET r=-conj(a) LET d=0 CALL Afine("竜", 14, 0.5, 0.2, 1.5) LET a=(1+i)/2 LET b=0 LET r=0 LET d=a*1.2 CALL Afine("いも虫", 14, 0.5, -0.1, 1) LET a=0 LET b=1-EXP(-PI/5*i) LET r=0 LET d=-conj(b) CALL Afine("雲", 14, 0.5, 0.25, 1) LET a=0 LET b=(1+i)/2 LET r=0 LET d=-conj(b) CALL Afine("蝶", 14, 0.9, 0.2, 1) LET a=0 LET b=(3+SQR(3)*i)/3.5 LET r=0 LET d=conj(b) CALL Afine("鋼線", 14, 0.5, 0.2, 0.7) PLOT TEXT,AT 0.5, 0.2+0.7*0.7:"END" ! AT xm, ym+h*0.7 !---------- SUB Afine(t$, Nmax, xm, ym, h) ! (題名, 最大N, 中心X, 中心Y, 半幅) SET WINDOW xm-h,xm+h, ym-h,ym+h !beep FOR N=0 TO Nmax CLEAR DRAW axes PLOT TEXT,AT xm,ym+h*0.8:t$ PLOT TEXT,AT xm+h*0.5,ym+h*0.8, USING "N= %%":N LET cx=1 CALL f0f1s(N, 0) ! z=0 の N 回 写像。 記憶。 LET cx=1 CALL f0f1(N, 1) ! z=1 の N 回 写像。 z=0 の記憶と線で結ぶ。 WAIT DELAY 1.5-EXP(N/40) NEXT N WAIT DELAY 1 END SUB !---------- セルフ・アファイン集合 DEF f0(z)=a*z+b*conj(z) DEF f1(z)=r*z+d*conj(z)+1-r-d !------ 全て z=0 の写像。 記憶のみ。 SUB f0f1s(k, z) IF 0<k THEN CALL f0f1s(k-1, f0(z)) CALL f0f1s(k-1, f1(z)) ELSE LET z0(cx)=z LET cx=cx+1 END IF END SUB !------ 全て z=1 の写像。 z=0 の記憶と線で結ぶ。 SUB f0f1(k, z) IF 0<k THEN CALL f0f1(k-1, f0(z)) CALL f0f1(k-1, f1(z)) ELSE SET LINE COLOR MOD(cx,16)+1 PLOT LINES:re(z0(cx)),im(z0(cx)); re(z),im(z) LET cx=cx+1 END IF END SUB END |
└修正の経緯 SECOND 2007/08/17 17:34:40 (修正2回) ツリーへ
Re: フラクタル・ショー2 フリースタイル |
返事を書く ノートメニュー |
SECOND <cszcthjjdj> 2007/08/17 17:34:40 ** この記事は2回修正されてます | |
修正の経緯
***** 修正4 k=N〜1を、N〜0に変更し、再帰文が0回を扱う様にした。 メイン文で、0回を特別にする必要がなくなり、IF〜THENを除去。 再帰文、自体としても、かえって読みやすくなり、 簡素になったため、picture 分離も廃した。 サイズが、大幅に減少し、冒頭説明文を、復帰。 ***** 修正3 SET WINDOW の位置訂正。 ***** 修正1〜2(後) 以下の部分と付随する文で、k=1〜Nを、N〜1に変更。 見ずらい部分として、線引き z0~z1を、picture で分離した。 注釈の追加変更。 ***** 修正1〜2(前) !---------- DEF f0(z)=a*z+b*conj(z) DEF f1(z)=r*z+d*conj(z)+1-r-d SUB f0f1s(k,z) IF k<N THEN CALL f0f1s(k+1,f0(z)) CALL f0f1s(k+1,f1(z)) ELSE LET z0(cx)=f0(z) LET cx=cx+1 LET z0(cx)=f1(z) LET cx=cx+1 END IF END SUB !---------- SUB f0f1(k,z) IF k<N THEN CALL f0f1(k+1,f0(z)) CALL f0f1(k+1,f1(z)) ELSE LET w=f0(z) SET LINE COLOR MOD(cx,16)+1 PLOT LINES:re(z0(cx)),im(z0(cx)); re(w),im(w) LET cx=cx+1 LET w=f1(z) SET LINE COLOR MOD(cx,16)+1 PLOT LINES:re(z0(cx)),im(z0(cx)); re(w),im(w) LET cx=cx+1 END IF END SUB ***** サイズの都合で、取り外した注釈。 複素平面上で、(0,0)~(1,0) の領域 z=0~1 を、下の行列で、 N回写像した領域 として描きます。(セルフ・アファイン集合) 領域 z=0~1 の写像は、一次線型で、常に直線なため、z=0~1 全ての点を 写像せず、z=0 と z=1 の2点の写像を求めて、線で結ぶ。 Nが大きい場合は、この2点の写像が、同じ画素に重なるほど細かくなるため、 z=0 と z=1 の写像、何れか1点を描画すれば、十分ですが、 プログラムは、Nが小さい場合を、含む表現なため、この省略は、しません。 1領域の z=0~1 は、共役複素数conj(z=0~1) と伴に N=1番目の写像に。 |f0| |a b 0 | | z | |f1|= |r d 1-r-d| |conj(z)| |0 | |0 0 0 | | 1 | 上の写像、f0 f1 は、2領域のzとして、次は倍に増えて写像します。 N=2番目の写像は、4領域のzに。 |f0'| |a b 0 | | f0 | |f1'|= |r d 1-r-d| |conj(f0)| |0 | |0 0 0 | | 1 | |f0"| |a b 0 | | f1 | |f1"|= |r d 1-r-d| |conj(f1)| |0 | |0 0 0 | | 1 | 上の写像、f0' f1' f0" f1" は、次の4つの z として、更に倍に 〜。 N=3番目の写像は、8領域 ( ) |