新しく発言する EXIT インデックスへ
フラクタル・ショー2フリースタイル

  フラクタル・ショー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領域

 )


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