新しく発言する EXIT インデックスへ
変形指示mat文で書くフラクタル画像11種類...

  変形指示mat文で書くフラクタル画像11種類 SECOND 2007/08/29 04:45:05  (修正3回)
  !続く SECOND 2007/08/29 04:46:56  (修正4回)
  │├色分けの不具合を、訂正。 SECOND 2007/08/30 14:13:34  (修正2回)
  │└修正2〜3の内容 SECOND 2007/09/04 13:32:50  (修正1回)
  │ ├DEF文の変換式は元のでいいのでは? 山中和義 2007/09/04 15:18:24 
  │ │├いえ、元のは、Xだと思います。白石先生、... SECOND 2007/09/04 17:57:16  (修正2回)
  │ │└貴兄の計算、MAT文は、新しい方、〜conj(z-... SECOND 2007/09/04 20:33:05 
  │ │ └私の理解が間違っていました。 山中和義 2007/09/05 09:31:42 
  │ └!複素数形式を行列形式(変形指示mat文、行... 山中和義 2007/09/04 15:38:58  (修正1回)
  │  └この件を、実験的に示せる例題がありません... SECOND 2007/09/04 19:26:53  (修正1回)
  !複素関数で書くTragonとシルピンスキーのガ... SECOND 2007/08/30 22:38:43  (修正2回)
  │└DEF文に大きな訂正が、あります。すみません... SECOND 2007/09/03 19:29:07 
  !T-squareとシルピンスキーのカーペット SECOND 2007/09/01 03:45:00 
  !トラゴンが踊る。 SECOND 2007/09/06 17:40:38 

  変形指示mat文で書くフラクタル画像11種類 SECOND 2007/08/29 04:45:05  (修正3回) ツリーへ

変形指示mat文で書くフラクタル画像11種類 返事を書く ノートメニュー
SECOND <cszcthjjdj> 2007/08/29 04:45:05 ** この記事は3回修正されてます
!変形指示mat文で書くフラクタル画像11種類

!-----
!f0(z)= この枠に入っているのは、
!f1(z)= 該当している複素数形式の、
!f2(z)= 写像式です。
!-----
!Nの小さい写像も、段階的に表現するため、親集合に省略形の点(0,0)を使わず、
!本来の親集合(0,0)~(1,0)線分を、使います。

OPTION ARITHMETIC NATIVE
SET TEXT FONT "MS 明朝",18
DIM f1(4,4), f2(4,4), f3(4,4)

LET D23=2 ! 2分岐フラグ
!-----
!f0(z)= (2+i)/4*z +i/4*conj(z)
!f1(z)= (2-i)/4*(z-1) -i/4*conj(z-1) +1
!-----
MAT f1=ROTATE(ATN(1/2))*SCALE(SQR(5)/4)
MAT f3=SCALE(1,-1)*ROTATE(PI/2)*SCALE(1/4)
MAT f1=f1+f3
LET f1(4,4)=1 ! システム予約(倍率逆数)まで加算するので、元へ戻す。
MAT f2=ROTATE(ATN(-1/2))*SCALE(SQR(5)/4)
MAT f3=SCALE(1,-1)*ROTATE(-PI/2)*SCALE(1/4)
MAT f2=f2+f3
LET f2(4,4)=1 ! 〜 元へ戻す。
MAT f2=SHIFT(-1,0)*f2*SHIFT(1,0)
CALL Afine("高木関数のグラフ", 14, 0.5, 0.3, 0.6)

!-----
!f0(z)= 0*z +(1-EXP(-PI/5*i))*conj(z)
!f1(z)= 0*(z-1) +(1-EXP( PI/5*i))*conj(z-1) +1
!-----
MAT f1=SCALE(1,-1)*ROTATE(PI*2/5)*SCALE(2*SIN(PI/10))
MAT f2=SHIFT(-1,0)*SCALE(1,-1)*ROTATE(-PI*2/5)*SCALE(2*SIN(PI/10))*SHIFT(1,0)
CALL Afine("クリヌキ正五角形", 15, 0.5, 0.25, 0.6)

!-----
!f0(z)= (1+i)/2*z +0*conj(z)
!f1(z)= 0*(z-1) -(1+i)/2*conj(z-1) +1
!-----
MAT f1=ROTATE(PI/4)*SCALE(1/SQR(2))
MAT f2=SHIFT(-1,0)*SCALE(1,-1)*ROTATE(PI+PI/4)*SCALE(1/SQR(2))*SHIFT(1,0)
CALL Afine("ブロッコリー", 16, 0.6, 0.5, 1.3)

LET D23=3 ! 3分岐フラグ
!-----
!f0(z)= EXP(i*PI/6)/SQR(3)*z +0*conj(z)
!f1(z)= EXP(i*PI/6)/SQR(3)*(z-2) +0*conj(z-2) +2
!f2(z)= EXP(i*PI/6)/SQR(3)*(z-1-i*sqr(3)) +0*conj(z-1-i*sqr(3)) +1+i*SQR(3)
!-----
MAT f1=ROTATE(PI/6)*SCALE(1/SQR(3))
MAT f2=SHIFT(-2,0)*ROTATE(PI/6)*SCALE(1/SQR(3))*SHIFT(2,0)
MAT f3=SHIFT(-1,-SQR(3))*ROTATE(PI/6)*SCALE(1/SQR(3))*SHIFT(1,SQR(3))
CALL Afine("トラゴン集合", 10, 1, 0.8, 2)

!-----
!f0(z)= 1/2*z +0*conj(z)
!f1(z)= 1/2*(z-2) +0*conj(z-2) +2
!f2(z)= 1/2*(z-1-i*sqr(3)) +0*conj(z-1-i*sqr(3)) +1+i*SQR(3)
!-----
MAT f1=SCALE(1/2)
MAT f2=SHIFT(-2,0)*SCALE(1/2)*SHIFT(2,0)
MAT f3=SHIFT(-1,-SQR(3))*SCALE(1/2)*SHIFT(1,SQR(3))
CALL Afine("シルピンスキーのガスケット", 10, 1, 0.8, 1.5)

LET D23=2 ! 2分岐フラグ
!-----
!f0(z)= 0*z +(1+i)/2*conj(z)
!f1(z)= 0*(z-1) +(1-i)/2*conj(z-1) +1
!-----
MAT f1=SCALE(1,-1)*ROTATE(PI/4)*SCALE(1/SQR(2))
MAT f2=SHIFT(-1,0)*SCALE(1,-1)*ROTATE(-PI/4)*SCALE(1/SQR(2))*SHIFT(1,0)
CALL Afine("ペアノの曲線", 16, 0.5, 0.2, 0.6)

!続く

  !続く SECOND 2007/08/29 04:46:56  (修正4回) ツリーへ

Re: 変形指示mat文で書くフラクタル画像11種類 返事を書く ノートメニュー
SECOND <cszcthjjdj> 2007/08/29 04:46:56 ** この記事は4回修正されてます
!続く

!-----
!f0(z)= 0*z +(3+SQR(3)*i)/6*conj(z)
!f1(z)= 0*(z-1) +(3-SQR(3)*i)/6*conj(z-1) +1
!-----
MAT f1=SCALE(1,-1)*ROTATE(PI/6)*SCALE(1/SQR(3))
MAT f2=SHIFT(-1,0)*SCALE(1,-1)*ROTATE(-PI/6)*SCALE(1/SQR(3))*SHIFT(1,0)
CALL Afine("コッホの曲線", 14, 0.5, 0.1, 0.6)

!-----
!f0(z)= (1+i)/2*z +0*conj(z)
!f1(z)= (1+i)/2*(z-1) +0*conj(z-1) +1
!-----
MAT f1=ROTATE(PI/4)*SCALE(1/SQR(2))
MAT f2=SHIFT(-1,0)*ROTATE(PI/4)*SCALE(1/SQR(2))*SHIFT(1,0)
CALL Afine("ドラゴン", 16, 0.5, 0, 1)

!-----
!f0(z)= (1+i)/2*z +0*conj(z)
!f1(z)= (1-i)/2*(z-1) +0*conj(z-1) +1
!-----
MAT f1=ROTATE(PI/4)*SCALE(1/SQR(2))
MAT f2=SHIFT(-1,0)*ROTATE(-PI/4)*SCALE(1/SQR(2))*SHIFT(1,0)
CALL Afine("レヴィのC曲線", 16, 0.5, 0.3, 1.1)

!-----
!f0(z)= (1+i)/2*z +0*conj(z)
!f1(z)= 0*(z-1) +(1-i)/2*conj(z-1) +1
!-----
MAT f1=ROTATE(PI/4)*SCALE(1/SQR(2))
MAT f2=SHIFT(-1,0)*SCALE(1,-1)*ROTATE(-PI/4)*SCALE(1/SQR(2))*SHIFT(1,0)
CALL Afine("カニの行列", 16, 0.35, 0.3, 0.8)

!-----
!f0(z)= 0*z +EXP(i*PI/7)/SQR(3)*conj(z)
!f1(z)= 0*(z-1) +2/3*conj(z-1) +1
!-----
MAT f1=SCALE(1,-1)*ROTATE(PI/7)*SCALE(1/SQR(3))
MAT f2=SHIFT(-1,0)*SCALE(1,-1)*SCALE(2/3)*SHIFT(1,0)
CALL Afine("葉脈曲線", 14, 0.5, 0.1, 0.6)
beep

!----------
SUB Afine(t$, Nmax, xm, ym, h) ! (題名, 最大N, 中心X, 中心Y, 半幅)
SET WINDOW xm-h,xm+h, ym-h,ym+h
FOR N=0 TO Nmax
CLEAR
DRAW grid
PLOT TEXT,AT xm-h*0.8,ym+h*0.8, USING "N= %%":N
PLOT TEXT,AT xm-h*0.4,ym+h*0.8:t$
LET col=1
IF D23=2 THEN DRAW D(N) ELSE DRAW D3(N) !親集合(0,0)~(1,0) のN階 写像.
WAIT DELAY 1.5-EXP(N/40)
NEXT N
WAIT DELAY 1
END SUB

!------ 3分岐型
PICTURE D3(k)
IF 0<k THEN
DRAW D3(k-1) WITH f1
DRAW D3(k-1) WITH f2
DRAW D3(k-1) WITH f3
ELSE
DRAW Set01
LET col=col+3^(2-N) ! (2-N) 9色分割、(3-N) 27色分割、(4-N) 81色分割
END IF
END PICTURE

!------ 2分岐型
PICTURE D(k)
IF 0<k THEN
DRAW D(k-1) WITH f1
DRAW D(k-1) WITH f2
ELSE
DRAW Set01
LET col=col+2^(4-N) ! (2-N) 4色分割、(3-N) 8色分割、(4-N) 16色分割
END IF
END PICTURE

!------ 親集合(0,0)~(1,0)
PICTURE Set01
SET LINE COLOR INT(col)
PLOT LINES: 0,0;1,0
IF N<5 THEN PLOT POINTS:0.85,0 ! (1,0)方向85%位置に、* のマークを付ける。
END PICTURE

END

  │├色分けの不具合を、訂正。 SECOND 2007/08/30 14:13:34  (修正2回) ツリーへ

Re: !続く 返事を書く ノートメニュー
SECOND <cszcthjjdj> 2007/08/30 14:13:34 ** この記事は2回修正されてます
色分けの不具合を、訂正。

特に、ペアノ曲線が重症でした。
他のパターンについても、下記の訂正をする事で、

自己相似状態、接合状態が、正しく色分けされるようになった。

※ルート・スレッド掲示の方は、すでに修正されています。


 )
OPTION ARITHMETIC NATIVE ! ←追加、是非ではないが高速になる。
SET TEXT FONT "MS 明朝",18
DIM f1(4,4), f2(4,4), f3(4,4)

 )
!----------
SUB Afine(t$, Nmax, xm, ym, h) ! (題名, 最大N, 中心X, 中心Y, 半幅)
SET WINDOW xm-h,xm+h, ym-h,ym+h
FOR N=0 TO Nmax
CLEAR
DRAW grid
PLOT TEXT,AT xm-h*0.8,ym+h*0.8, USING "N= %%":N
PLOT TEXT,AT xm-h*0.4,ym+h*0.8:t$
!LET col=0 →削除
LET col=1 ! ←追加
IF D23=2 THEN DRAW D(N) ELSE DRAW D3(N) !親集合(0,0)~(1,0) のN階 写像.
WAIT DELAY 1.5-EXP(N/40)
NEXT N
WAIT DELAY 1
END SUB

PICTURE D3(k)
IF 0<k THEN
DRAW D3(k-1) WITH f1
DRAW D3(k-1) WITH f2
DRAW D3(k-1) WITH f3
!LET col=col+3^(4-N) →削除
ELSE
DRAW Set01
LET col=col+3^(2-N) ! ←追加、(2-N) 9色分割、(3-N) 27色分割、(4-N) 81色分割
END IF
END PICTURE

PICTURE D(k)
IF 0<k THEN
DRAW D(k-1) WITH f1
DRAW D(k-1) WITH f2
!LET col=col+2^(4-N) →削除
ELSE
DRAW Set01
LET col=col+2^(4-N) ! ←追加、(2-N) 4色分割、(3-N) 8色分割、(4-N) 16色分割
END IF
END PICTURE

!------ 親集合(0,0)~(1,0)
PICTURE Set01
!SET LINE COLOR MOD(col,16)+1 →削除
SET LINE COLOR INT(col) ! ←追加
PLOT LINES: 0,0;1,0
IF N<5 THEN PLOT POINTS:0.85,0 ! (1,0)方向85%位置に、* のマークを付ける。
END PICTURE

END

  │└修正2〜3の内容 SECOND 2007/09/04 13:32:50  (修正1回) ツリーへ

Re: !続く 返事を書く ノートメニュー
SECOND <cszcthjjdj> 2007/09/04 13:32:50 ** この記事は1回修正されてます
修正2〜3の内容

対照の複素数形式を改め、
できるだけ相互の式の対照を、揃えた。

動作は、変化していない。

コッホの曲線の複素数参照式、誤り訂正。


付録、「変形指示mat文と複素数形式の相互対照」

|f0(z)|=|a b|| z  |+|0  |
|f1(z)| |r d||conj(z)| |1-r-d|

f0(z)= a*z +b*conj(z)
f1(z)= r*z +d*conj(z) +1-r-d

次のように、書き直すと、f1(z) が、(1,0)を新たな原点とする様な写像(回転縮小)に
なっているのが、見易くなる。 反面、上の複素行列のようには、書けなくなる。

f0(z)= a*z   +b*conj(z)
f1(z)= r*(z-1) +d*conj(z-1) +1

MAT w1=       ROTATE( ATN(IM(a)/RE(a)) )*SCALE(ABS(a)) ・・・a*
MAT w2= SCALE(1,-1)*ROTATE( ATN(IM(b)/RE(b)) )*SCALE(ABS(b)) ・・・b*conj()
MAT _f0= w1+w2 ・・・_f0(4,4)は、システム予約=1へ書き戻す。

MAT w1=       ROTATE( ATN(IM(r)/RE(r)) )*SCALE(ABS(r)) ・・・r*
MAT w2= SCALE(1,-1)*ROTATE( ATN(IM(d)/RE(d)) )*SCALE(ABS(d)) ・・・d*conj()
MAT w3= w1+w2 ・・・ w3(4,4)は、システム予約=1へ書き戻す。

MAT _f1= SHIFT(-1,0)* w3 *SHIFT(1,0) ・・・(z-1)、+1

f1(z)= r*(z-m) +d*conj(z-m) +m  ・・・m の座標が(1,0)でない場合、
MAT _f1= SHIFT(-RE(m),-IM(m))* w3 *SHIFT(RE(m),IM(m))


※a と b は、片方=0、
 r と d も、片方=0、が殆んどで、w1+w2 の計算が必要になる事は、めったにない。

  │ ├DEF文の変換式は元のでいいのでは? 山中和義 2007/09/04 15:18:24  ツリーへ

Re: 修正2〜3の内容 返事を書く ノートメニュー
山中和義 <drdlxujciw> 2007/09/04 15:18:24
DEF文の変換式は元のでいいのでは?

間違いかもしれませんが、私はこう認識しています。(共役部分)



縮小写像の変換式

点pにおける縮小写像の複素数形式
 DEF f(Z, a,b,p)=a*(Z-p)+b*(conj(Z)-p)+p !またはa*Z+b*conj(Z)+p*(1-a-b)

は、


点pにおける縮小写像の行列形式(同次座標)
 DIM ma(4,4),mb(4,4),f(4,4)
 MAT ma=SCALE(ABS(a))*ROTATE(arg(a)) !a*Z
 MAT mb=SCALE(1,-1)*SCALE(ABS(b))*ROTATE(arg(b)) !b*conj(Z)
 MAT f=ma+mb !原点における縮小写像
 LET f(4,4)=1 !※システム予約
 MAT f=SHIFT(-re(p),-im(p))*f*SHIFT(re(p),im(p)) !点pにおける縮小写像

  ※ABS(0)のときのarg(0)に注意

と記述できる。

ABS(a)やarg(a)を代数的に求めれば、SCALE(1/SQR(2))やROTATE(PI/6)のようになる。

  │ │├いえ、元のは、Xだと思います。白石先生、... SECOND 2007/09/04 17:57:16  (修正2回) ツリーへ

Re: DEF文の変換式は元のでいいのでは? 返事を書く ノートメニュー
SECOND <cszcthjjdj> 2007/09/04 17:57:16 ** この記事は2回修正されてます
いえ、元のは、Xだと思います。白石先生、御願いします。

以下の内容の、問題です。f1(z)〜が、写像原点を、(1,0) でなく、m1〜 を使用する場合です。

!-----3分岐 複素関数形式
!DEF f0(z)=a*z+b*conj(z)
!DEF f1(z)=r*z+d*conj(z) +m1*(1-r-d) ←修正前、誤り
!DEF f2(z)=e*z+f*conj(z) +m2*(1-e-f) ← 〜、誤り

!-----3分岐 複素関数形式
!DEF f0(z)=a*z+b*conj(z)
!DEF f1(z)=r*z+d*conj(z) +m1(1-r)-conj(m1)*d ←正
!DEF f2(z)=e*z+f*conj(z) +m2(1-e)-conj(m2)*f ←正

DEF f0(z)=a*z+b*conj(z)
DEF f1(z)=r*(z-m1)+d*conj(z-m1) +m1 ! ←この方が解り易い
DEF f2(z)=e*(z-m2)+f*conj(z-m2) +m2 ! ← 〜
!-----

  │ │└貴兄の計算、MAT文は、新しい方、〜conj(z-... SECOND 2007/09/04 20:33:05  ツリーへ

Re: DEF文の変換式は元のでいいのでは? 返事を書く ノートメニュー
SECOND <cszcthjjdj> 2007/09/04 20:33:05
貴兄の計算、MAT文は、新しい方、〜conj(z-p) +p に、なっています。
よく見てください。


点pにおける縮小写像の複素数形式
 DEF f(Z, a,b,p)=a*(Z-p)+b*(conj(Z)-p)+p !またはa*Z+b*conj(Z)+p*(1-a-b)

は、


点pにおける縮小写像の行列形式(同次座標)
 DIM ma(4,4),mb(4,4),f(4,4)
 MAT ma=SCALE(ABS(a))*ROTATE(arg(a)) !a*Z
 MAT mb=SCALE(1,-1)*SCALE(ABS(b))*ROTATE(arg(b)) !b*conj(Z)
 MAT f=ma+mb !原点における縮小写像
 LET f(4,4)=1 !※システム予約
 MAT f=SHIFT(-re(p),-im(p))*f*SHIFT(re(p),im(p)) !点pにおける縮小写像

  │ │ └私の理解が間違っていました。 山中和義 2007/09/05 09:31:42  ツリーへ

Re: 貴兄の計算、MAT文は、新しい方、〜conj(z-... 返事を書く ノートメニュー
山中和義 <drdlxujciw> 2007/09/05 09:31:42
私の理解が間違っていました。

行列の縮小写像は、〜conj(z-p)+pに対応しているんですね。



以下、確認のプログラム


OPTION ARITHMETIC COMPLEX
LET i=complex(0,1) !虚数単位



LET z1=0+i !試験用のデータ
LET z2=1+i

LET r=EXP(i*PI/6)/SQR(3) !試験用の変換
LET d=2-i
LET m1=1+i*SQR(3)

DEF f1(z)=r*(z-m1)+d*conj(z-m1)+m1
DEF f2(z)=r*(z-m1)+d*(conj(z)-m1)+m1

PRINT f1(z1)
PRINT f1(z2)
PRINT

PRINT f2(z1)
PRINT f2(z2)
PRINT


DIM w1(4,4),w2(4,4),w3(4,4),M(4,4)
MAT w1=ROTATE(ATN(im(r)/re(r)))*SCALE(ABS(r)) !r*
MAT w2=SCALE(1,-1)*ROTATE(ATN(im(d)/re(d)))*SCALE(ABS(d)) !d*conj()
MAT w3=w1+w2
LET w3(4,4)=1 !w3(4,4)は、システム予約=1へ書き戻す。
MAT M=SHIFT(-re(m1),-im(m1))* w3 *SHIFT(re(m1),im(m1)) !(z-m1)、+m1

DIM p(4)
LET p(1)=re(z1) !x ※z=x+y*i
LET p(2)=im(z1) !y
LET p(3)=0
LET p(4)=1
MAT p=p*M
MAT PRINT p

LET p(1)=re(z2) !x ※z=x+y*i
LET p(2)=im(z2) !y
LET p(3)=0
LET p(4)=1
MAT p=p*M
MAT PRINT p


END

  │ └!複素数形式を行列形式(変形指示mat文、行... 山中和義 2007/09/04 15:38:58  (修正1回) ツリーへ

Re: 修正2〜3の内容 返事を書く ノートメニュー
山中和義 <drdlxujciw> 2007/09/04 15:38:58 ** この記事は1回修正されてます
!複素数形式を行列形式(変形指示mat文、行列)に変換してみる

OPTION ARITHMETIC complex
LET i=SQR(-1) !虚数単位

SET TEXT FONT "MS 明朝",18
DIM f1(4,4), f2(4,4), f3(4,4)

LET a=0
LET b=(3+SQR(3)*i)/6
LET p=0
CALL SetM2(a,b,p, f1) !!!CALL SetM(a,b,p, f1)
LET c=0
LET d=(3-SQR(3)*i)/6
LET p=1
CALL SetM2(c,d,p, f2) !!!CALL SetM(c,d,p, f2)
CALL Afine("コッホの曲線", 14, 0.5, 0.1, 0.6)


SUB SetM(a,b,p, f(,)) !点pにおける縮小写像 a*(Z-p)+b*Conj(Z-p)+p または a*Z+b*Conj(Z)+p*(1-a)-b*conj(p)
DIM ma(4,4),mb(4,4)
MAT ma=ZER !a*Zを得る
IF ABS(a)>0 THEN MAT ma=SCALE(ABS(a))*ROTATE(arg(a))

MAT mb=ZER !b*Conj(Z)を得る
IF ABS(b)>0 THEN MAT mb=SCALE(1,-1)*SCALE(ABS(b))*ROTATE(arg(b)) !共役

MAT f=ma+mb !原点における縮小写像a*Z+b*Conj(Z)を得る
LET f(4,4)=1

MAT f=SHIFT(-re(p),-im(p))*f*SHIFT(re(p),im(p)) !点pにおける縮小写像を得る
END SUB

SUB SetM2(c,d,p, f(,))
DIM mc(2,2),md(2,2),mt(2,2),ms(4,4)
LET mc(1,1)=re(c) !複素数cを行列へ
LET mc(1,2)=-im(c)
LET mc(2,1)=im(c)
LET mc(2,2)=re(c)

LET md(1,1)=re(d) !複素数dを行列へ
LET md(1,2)=-im(d)
LET md(2,1)=im(d)
LET md(2,2)=re(d)

LET mt(1,1)=1 !共役 ※X軸対称
LET mt(1,2)=0
LET mt(2,1)=0
LET mt(2,2)=-1
MAT md=md*mt !d*Conj(Z)を得る

MAT mt=mc+md !原点における縮小写像c*Z+d*Conj(Z)を得る

MAT f=IDN !点pにおける縮小写像を得るために同次座標系へ
LET f(1,1)=mt(1,1)
LET f(1,2)=mt(2,1) !※転置(座標は行ベクトルのため)
LET f(2,1)=mt(1,2) !※
LET f(2,2)=mt(2,2)

MAT ms=IDN !点pから原点へ平行移動
LET ms(4,1)=-re(p)
LET ms(4,2)=-im(p)
MAT f=ms*f !縮小写像を行う
LET ms(4,1)=re(p) !もとの位置pへ
LET ms(4,2)=im(p)
MAT f=f*ms !点pにおける縮小写像c*(Z-p)+d*Conj(Z-p)+pを得る
END SUB


!----------
SUB Afine(t$, Nmax, xm, ym, h) ! (題名, 最大N, 中心X, 中心Y, 半幅)
SET WINDOW xm-h,xm+h, ym-h,ym+h
FOR N=0 TO Nmax
CLEAR
DRAW grid
PLOT TEXT,AT xm-h*0.8,ym+h*0.8, USING "N= %%":N
PLOT TEXT,AT xm-h*0.4,ym+h*0.8:t$
LET col=1
DRAW D(N) !親集合(0,0)~(1,0) のN階 写像.
WAIT DELAY 1.5-EXP(N/40)
NEXT N
WAIT DELAY 1
END SUB

!------
PICTURE D(k)
IF 0<k THEN
DRAW D(k-1) WITH f1
DRAW D(k-1) WITH f2
ELSE
DRAW Set01
LET col=col+2^(4-N) !(2-N) 4色分割、(3-N) 8色分割、(4-N) 16色分割
END IF
END PICTURE

!------ 親集合(0,0)~(1,0)
PICTURE Set01
SET LINE COLOR INT(col)
PLOT LINES: 0,0;1,0
IF N<5 THEN PLOT POINTS:0.85,0 ! (1,0)方向85%位置に、* のマークを付ける。
END PICTURE

END

  │  └この件を、実験的に示せる例題がありません... SECOND 2007/09/04 19:26:53  (修正1回) ツリーへ

Re: !複素数形式を行列形式(変形指示mat文、行... 返事を書く ノートメニュー
SECOND <cszcthjjdj> 2007/09/04 19:26:53 ** この記事は1回修正されてます
この件を、実験的に示せる例題がありません。

結果が違ったものになるためには、

 d ・・conj(z) の係数が、0でなく、かつ、

 f1(z) の写像原点pが、(私は、m1,m2,の記号を使用した)

 (1,0) でなく、Tragon のように、虚数部を含む必要が、あります。

ただ、変形指示mat文で、両サイドに、

SHIFT(-re( p ),-im( p ) )*SCALE(1,-1)* 〜 〜 *SHIFT(re( p ),im( p ) )

を、置くならば、〜*conj(z-p) +p
とした事に、なるでしょう。

  !複素関数で書くTragonとシルピンスキーのガ... SECOND 2007/08/30 22:38:43  (修正2回) ツリーへ

Re: 変形指示mat文で書くフラクタル画像11種類 返事を書く ノートメニュー
SECOND <cszcthjjdj> 2007/08/30 22:38:43 ** この記事は2回修正されてます
!複素関数で書くTragon とシルピンスキーのガスケット

!構造が同じ、写像関数とプログラム、であるのに、
!Nが大きくなると、描画の順序が、違っているのが、見えてきます。

!(変形指示mat文形式)
!写像関数(行列)の方を、直列計算し、出来た関数で写像する。
!平行移動成分が、回毎に、小さくなっていくためか、隣接描画。

!(複素関数形式)
!写像関数を固定し、座標数値だけを、繰返し直列計算する。
!平行移動成分が、毎回、固定され、全体へ分散しながら描画。

!色分けの際に注意。


SET TEXT FONT "MS 明朝",18

OPTION ARITHMETIC COMPLEX
DIM z0(0 TO 3^10) ! 最大N=10
LET i=complex(0,1) ! i= 虚数

!-----3分岐 複素関数形式
!DEF f0(z)=a*z+b*conj(z)
!DEF f1(z)=r*z+d*conj(z) +m1*(1-r-d) ←修正前、誤り
!DEF f2(z)=e*z+f*conj(z) +m2*(1-e-f) ← 〜、誤り

!-----3分岐 複素関数形式
!DEF f0(z)=a*z+b*conj(z)
!DEF f1(z)=r*z+d*conj(z) +m1(1-r)-conj(m1)*d ←正
!DEF f2(z)=e*z+f*conj(z) +m2(1-e)-conj(m2)*f ←正

DEF f0(z)=a*z+b*conj(z)
DEF f1(z)=r*(z-m1)+d*conj(z-m1) +m1 ! ←この方が解り易い
DEF f2(z)=e*(z-m2)+f*conj(z-m2) +m2 ! ← 〜
!-----
!MAT f1=SCALE(1/SQR(3))*ROTATE(PI/6)
!MAT f2=SHIFT(-2,0)*SCALE(1/SQR(3))*ROTATE(PI/6)*SHIFT(2,0)
!MAT f3=SHIFT(-1,-SQR(3))*SCALE(1/SQR(3))*ROTATE(PI/6)*SHIFT(1,SQR(3))
!-----
LET a=EXP(i*PI/6)/SQR(3)
LET b=0
LET r=a
LET d=0
LET m1=2
LET e=a
LET f=0
LET m2=1+i*SQR(3)
CALL Afine("Tragon 集合", 10, 1, 0.8, 2)

!-----
!MAT f1=SCALE(1/2)
!MAT f2=SHIFT(-2,0)*SCALE(1/2)*SHIFT(2,0)
!MAT f3=SHIFT(-1,-SQR(3))*SCALE(1/2)*SHIFT(1,SQR(3))
!-----
LET a=1/2
LET b=0
LET r=1/2
LET d=0
LET m1=2
LET e=1/2
LET f=0
LET m2=1+i*SQR(3)
CALL Afine("シルピンスキーのガスケット", 10, 1, 0.8, 1.5)

!----------
SUB Afine(t$, Nmax, xm, ym, h) ! (題名, 最大N, 中心X, 中心Y, 半幅)
SET WINDOW xm-h,xm+h, ym-h,ym+h
FOR N=0 TO Nmax
CLEAR
DRAW grid
PLOT TEXT,AT xm-h*0.8,ym+h*0.8, USING "N= %%":N
PLOT TEXT,AT xm-h*0.4,ym+h*0.8:t$
LET cx=0
CALL f0f1s(N, 0) ! z=0 の写像。 記憶のみ。
LET cx=0
CALL f0f1(N, 1) ! z=1 の写像。 z=0 の記憶と線で結ぶ。
WAIT DELAY 1.5-EXP(N/40)
NEXT N
beep
WAIT DELAY 1
END SUB

!------ 全て z=0 の写像。 記憶のみ。
SUB f0f1s(k, z)
IF 0<k THEN
CALL f0f1s(k-1, f0(z))
CALL f0f1s(k-1, f1(z))
CALL f0f1s(k-1, f2(z))
ELSE
LET z0(cx)=z
LET cx=cx+1
END IF
END SUB

!------ 全て z=1 の写像。 z=0 の記憶z0() と線で結ぶ。
SUB f0f1(k, z)
IF 0<k THEN
CALL f0f1(k-1, f0(z))
CALL f0f1(k-1, f1(z))
CALL f0f1(k-1, f2(z))
ELSE
DRAW linez0(z)
LET cx=cx+1
END IF
END SUB

!------ z0()~z の写像の直線を描き、z 側の85%位置に、* のマークを付ける。
PICTURE linez0(z)
SET LINE COLOR MOD(cx,9)+1 ! 3^2=9色分割、3^3=27色分割、3^4=81色分割・・(分岐数)^m
PLOT LINES: re(z0(cx)),im(z0(cx)); re(z),im(z)
IF N<4 THEN PLOT POINTS: re(z0(cx))*0.15+re(z)*0.85, im(z0(cx))*0.15+im(z)*0.85
END PICTURE

END

  │└DEF文に大きな訂正が、あります。すみません... SECOND 2007/09/03 19:29:07  ツリーへ

Re: !複素関数で書くTragonとシルピンスキーのガ... 返事を書く ノートメニュー
SECOND <cszcthjjdj> 2007/09/03 19:29:07
DEF 文に大きな訂正が、あります。すみません。

不幸にも、動作上に変化は、ありませんが、
大きな間違いでした。

  !T-squareとシルピンスキーのカーペット SECOND 2007/09/01 03:45:00  ツリーへ

Re: 変形指示mat文で書くフラクタル画像11種類 返事を書く ノートメニュー
SECOND <cszcthjjdj> 2007/09/01 03:45:00
!T-square と シルピンスキーのカーペット

OPTION ARITHMETIC NATIVE
SET TEXT FONT "MS 明朝",18

ASK bitmap SIZE savW,savH ! グラフ画面サイズの控え。
!----------
LET D48=4
SET BITMAP SIZE 641,641
CALL Afine("T−square", 6, 0, 0.2, 2.4)
WAIT DELAY 2.5

LET D48=8
SET BITMAP SIZE 501,501
CALL Afine("シルピンスキーのカーペット", 6, 0, 0.3, 3.7)

SET bitmap SIZE savW,savH ! グラフ画面サイズを、起動前に戻す。

!----------
SUB Afine(t$, Nmax, xm, ym, h) ! (題名, 最大N, 中心X, 中心Y, 半幅)
SET WINDOW xm-h,xm+h, ym-h,ym+h
FOR N=0 TO Nmax
CLEAR
DRAW grid
PLOT TEXT,AT xm-h*0.8,ym+h*0.8, USING "N= %%":N
PLOT TEXT,AT xm-h*0.4,ym+h*0.8:t$
LET col=0
IF D48=4 THEN DRAW D4(N) ELSE DRAW D8(N)
WAIT DELAY 1.5-EXP(N/40)
NEXT N
END SUB

!------ T-square
PICTURE D4(k)
IF 0<k THEN
DRAW D4(k-1) WITH SCALE(1/2)*SHIFT( 1, 1)
DRAW D4(k-1) WITH SCALE(1/2)*SHIFT(-1, 1)
DRAW D4(k-1) WITH SCALE(1/2)*SHIFT(-1,-1)
DRAW D4(k-1) WITH SCALE(1/2)*SHIFT( 1,-1)
END IF ! 0階1階2階・・N階、全て重ね書き。
PLOT AREA: -1,-1;1,-1;1,1;-1,1 ! 親集合の塗りつぶされた正方形。
END PICTURE

!------ シルピンスキーのカーペット Sierpinski carpet
PICTURE D8(k)
IF 0<k THEN
DRAW D8(k-1) WITH SCALE(1/3)*SHIFT( 2, 0)
DRAW D8(k-1) WITH SCALE(1/3)*SHIFT( 2, 2)
DRAW D8(k-1) WITH SCALE(1/3)*SHIFT( 0, 2)
DRAW D8(k-1) WITH SCALE(1/3)*SHIFT(-2, 2)
DRAW D8(k-1) WITH SCALE(1/3)*SHIFT(-2, 0)
DRAW D8(k-1) WITH SCALE(1/3)*SHIFT(-2,-2)
DRAW D8(k-1) WITH SCALE(1/3)*SHIFT( 0,-2)
DRAW D8(k-1) WITH SCALE(1/3)*SHIFT( 2,-2)
ELSE
SET LINE COLOR MOD(INT(col),16)+1
PLOT LINES: -1,-1;1,-1;1,1;-1,1;-1,-1 ! 親集合の正方形。
LET col=col+8^(1-N) ! (0-N) 1色(黒)、(1-N) 8色分割、(2-N) 64色分割
END IF
END PICTURE

END

  !トラゴンが踊る。 SECOND 2007/09/06 17:40:38  ツリーへ

Re: 変形指示mat文で書くフラクタル画像11種類 返事を書く ノートメニュー
SECOND <cszcthjjdj> 2007/09/06 17:40:38
!トラゴン が踊る。

!このプログラムは、十進BASICサンプル fractal\TRIANGLE.BAS を、
!元にしたものです。

OPTION ARITHMETIC NATIVE
OPTION ANGLE DEGREES

SET POINT STYLE 1
LET alpha=-15
LET ds=15
LET N=9
LET h=3.6

DO
SET WINDOW 1-h+ds/40, 1+h+ds/40, 0.5-h, 0.5+h
SET DRAW mode hidden
CLEAR
PLOT TEXT,AT ds/40, 3:"Any Key to Stop"
DRAW tragon(N)
SET DRAW mode explicit
IF 30<=ABS(alpha) THEN
WAIT DELAY 0.5
SET DRAW mode hidden
CLEAR
DRAW tragon(N)
SET DRAW mode explicit
PLOT TEXT,AT ds/40, 3:"Any Key to Stop"
WAIT DELAY 0.25
LET ds=-ds
END IF
LET alpha=alpha+ds
CHARACTER INPUT NOWAIT:s$
LOOP UNTIL ""<s$

PICTURE tragon(k)
IF 0<k THEN
DRAW tragon(k-1) WITH SCALE(1/SQR(3))*ROTATE(alpha)
DRAW tragon(k-1) WITH SHIFT(-2,0)*SCALE(1/SQR(3))*ROTATE(alpha)*SHIFT(2,0)
DRAW tragon(k-1) WITH SHIFT(-1,-SQR(3))*SCALE(1/SQR(3))*ROTATE(alpha)*SHIFT(1,SQR(3))
ELSE
SET POINT COLOR MOD(INT(col),8)+1
PLOT POINTS: 0,0
LET col=col+3^(2-N)
END IF
END PICTURE

END


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