フラクタル画像13種類

 投稿者:SECOND  投稿日:2011年 5月13日(金)05時38分53秒
  !変形指示mat文によるフラクタル画像13種類

OPTION ARITHMETIC COMPLEX
SET TEXT FONT "MS 明朝",18
DIM m0(4,4), m1(4,4), m2(4,4), mc(4,4)

!-----------------------------------
! 複素数z入力の Affine 写像式
!-----------------------------------
DEF f0(z)= a *(z-o ) +b *conj(z-o ) +o    !予備。
DEF f1(z)= a1*(z-o1) +b1*conj(z-o1) +o1   !このプログラムでは、使用せず、
DEF f2(z)= a2*(z-o2) +b2*conj(z-o2) +o2   !下の m 行列 に変換、代行する。

!-------------------
! 写像式 係数の設定
!-------------------
SUB Let02( a,b,o, v1,v2,v3)
   LET a=v1
   LET b=v2
   LET o=v3
END SUB

! 複素数z入力を 画素( 行ベクトル1x4 ) 、写像式を 行列 m で表現。
!------------------------------------------
! 変形指示MAT文。 4x4 変形行列 m の作成
! z*m ← a*(z-o) +b*conj(z-o) +o
!------------------------------------------
SUB mat02( m(,), a, b, o)
   MAT m=              SCALE( a )  !a*z
   MAT mc= SCALE(1,-1)*SCALE( b )  !b*conj(z)
   MAT m= m+mc                     !f(z)= a*z + b*conj(z)
   LET m(4,4)= 1                   ! システム予約要素(倍率逆数)、加算しない。
   MAT m= SHIFT(-o)*m*SHIFT(o)     !f(z)= f(z-o)+o
END SUB


!----- a= 0.4614*(1+i)
!f0(z)=      a *(z )  +0*conj(z )
!f1(z)= 1/(1+a)*(z-1) +0*conj(z-1) +1
!-----
CALL Let02( a, b, o,   0.4614*COMPLEX(1,1), 0, 0)
CALL Let02( a1,b1,o1,  1/(1+a)            , 0, 1)
!-----
CALL mat02( m0, a, b, o )
CALL mat02( m1, a1,b1,o1 )
CALL Affine("Extra-1 雲", 0.4, 0.2, 0.8,  14)    !(題名, 中心X, 中心Y, 半幅,  最大N)
!
!----- a= 0.4614*(1+i)
!f0(z)= a*(z )  +                  0*conj(z )
!f1(z)= 0*(z-1) +(1-a)/(1-conj(a)^2)*conj(z-1) +1
!-----
CALL Let02( a, b, o,   0.4614*COMPLEX(1,1),                   0, 0)
CALL Let02( a1,b1,o1,  0                  , (1-a)/(1-conj(a)^2), 1)
!-----
CALL mat02( m0, a, b, o )
CALL mat02( m1, a1,b1,o1 )
CALL Affine("Extra-2 雷", 0.35, 0.2, 0.8,  14)   !(題名, 中心X, 中心Y, 半幅,  最大N)
!
!-----
!f0(z)= (2+i)/4*(z )  +i/4*conj(z )
!f1(z)= (2-i)/4*(z-1) -i/4*conj(z-1) +1
!-----
CALL Let02( a, b, o,   COMPLEX(2,1)/4, COMPLEX(0,1)/4, 0)
CALL Let02( a1,b1,o1,  conj(a)       , conj(b)       , 1)
!-----
CALL mat02( m0, a, b, o )
CALL mat02( m1, a1,b1,o1 )
CALL Affine("高木関数のグラフ", 0.5, 0.3, 0.6,  14)
!
!-----
!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
!-----
CALL Let02( a, b, o,   0, 1-EXP(COMPLEX(0,-PI/5)), 0)
CALL Let02( a1,b1,o1,  0, conj(b)                , 1)
!-----
CALL mat02( m0, a, b, o )
CALL mat02( m1, a1,b1,o1 )
CALL Affine("クリヌキ正五角形", 0.5, 0.25, 0.6,  15)
!
!-----
!f0(z)= (1+i)/2*(z )  +      0*conj(z )
!f1(z)=       0*(z-1) -(1+i)/2*conj(z-1) +1
!-----
CALL Let02( a, b, o,   COMPLEX(1,1)/2,  0, 0)
CALL Let02( a1,b1,o1,  0             , -a, 1)
!-----
CALL mat02( m0, a, b, o )
CALL mat02( m1, a1,b1,o1 )
CALL Affine("ブロッコリー", 0.6, 0.5, 1.3,  16)   !(題名, 中心X, 中心Y, 半幅,  最大N)
!
!-----
!f0(z)= exp(i*π/6)/√3*(z )          +0*conj(z )
!f1(z)= exp(i*π/6)/√3*(z-2)         +0*conj(z-2)         +2
!f2(z)= exp(i*π/6)/√3*(z-(1+i*√3)) +0*conj(z-(1+i*√3)) +(1+i*√3)
!-----
CALL Let02( a, b, o,   EXP(COMPLEX(0,PI/6))/SQR(3), 0, 0 )
CALL Let02( a1,b1,o1,  a,                           0, 2 )
CALL Let02( a2,b2,o2,  a,                           0, COMPLEX(1,SQR(3)) )
!-----
CALL mat02( m0, a, b, o )
CALL mat02( m1, a1,b1,o1 )
CALL mat02( m2, a2,b2,o2 )
CALL Affine("トラゴン集合", 1, 0.8, 2,  10)       !(題名, 中心X, 中心Y, 半幅,  最大N)
!
!-----
!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*√3)) +0*conj(z-(1+i*√3)) +(1+i*√3)
!-----
CALL Let02( a, b, o,  1/2, 0, 0 )
CALL Let02( a1,b1,o1,   a, 0, 2 )
CALL Let02( a2,b2,o2,   a, 0, COMPLEX(1,SQR(3)) )
!-----
CALL mat02( m0, a, b, o )
CALL mat02( m1, a1,b1,o1 )
CALL mat02( m2, a2,b2,o2 )
CALL Affine("シルピンスキーのガスケット", 1, 0.8, 1.5,  10)
!
!-----
!f0(z)= 0*(z )  +(1+i)/2*conj(z )
!f1(z)= 0*(z-1) +(1-i)/2*conj(z-1) +1
!-----
CALL Let02( a, b, o,   0, COMPLEX(1,1)/2, 0)
CALL Let02( a1,b1,o1,  0, conj(b)       , 1)
!-----
CALL mat02( m0, a, b, o )
CALL mat02( m1, a1,b1,o1 )
CALL Affine("ペアノの曲線", 0.5, 0.2, 0.6,  16)   !(題名, 中心X, 中心Y, 半幅,  最大N)
!
!-----
!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
!-----
CALL Let02( a, b, o,   0, COMPLEX(3,SQR(3))/6, 0)
CALL Let02( a1,b1,o1,  0, conj(b)            , 1)
!-----
CALL mat02( m0, a, b, o )
CALL mat02( m1, a1,b1,o1 )
CALL Affine("コッホの曲線", 0.5, 0.1, 0.6,  14)
!
!-----
!f0(z)= (1+i)/2*(z )  +0*conj(z )
!f1(z)= (1+i)/2*(z-1) +0*conj(z-1) +1
!-----
CALL Let02( a, b, o,   COMPLEX(1,1)/2, 0, 0)
CALL Let02( a1,b1,o1,  a             , 0, 1)
!-----
CALL mat02( m0, a, b, o )
CALL mat02( m1, a1,b1,o1 )
CALL Affine("ドラゴン", 0.5, 0, 1,  16)           !(題名, 中心X, 中心Y, 半幅,  最大N)
!
!-----
!f0(z)= (1+i)/2*(z )  +0*conj(z )
!f1(z)= (1-i)/2*(z-1) +0*conj(z-1) +1
!-----
CALL Let02( a, b, o,   COMPLEX(1,1)/2, 0, 0)
CALL Let02( a1,b1,o1,  conj(a)       , 0, 1)
!-----
CALL mat02( m0, a, b, o )
CALL mat02( m1, a1,b1,o1 )
CALL Affine("レヴィのC曲線", 0.5, 0.3, 1.1,  16)
!
!-----
!f0(z)= (1+i)/2*(z )  +      0*conj(z )
!f1(z)=       0*(z-1) +(1-i)/2*conj(z-1) +1
!-----
CALL Let02( a, b, o,   COMPLEX(1,1)/2, 0      , 0)
CALL Let02( a1,b1,o1,  0             , conj(a), 1)
!-----
CALL mat02( m0, a, b, o )
CALL mat02( m1, a1,b1,o1 )
CALL Affine("カニの行列", 0.35, 0.3, 0.8,  16)    !(題名, 中心X, 中心Y, 半幅,  最大N)
!
!-----
!f0(z)= 0*(z )  +EXP(i*PI/7)/SQR(3)*conj(z )
!f1(z)= 0*(z-1) +               2/3*conj(z-1) +1
!-----
CALL Let02( a, b, o,   0, EXP(COMPLEX(0,PI/7))/SQR(3), 0)
CALL Let02( a1,b1,o1,  0, 2/3                        , 1)
!-----
CALL mat02( m0, a, b, o )
CALL mat02( m1, a1,b1,o1 )
CALL Affine("葉脈曲線", 0.5, 0.1, 0.6,  14)
beep

!----------
SUB Affine(t$, xm, ym, h,  Nmax)     !(題名, 中心X, 中心Y, 半幅,  最大N)
   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 o1=1 THEN DRAW D2(N) ELSE DRAW D3(N)   !初期集合の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 m0   !絵定義 D3(k-1) を m0,m1,m2 で変形して3つ描画
      DRAW D3(k-1) WITH m1
      DRAW D3(k-1) WITH m2
   ELSE
      DRAW Dx_0              !絵定義 D3(0) になる
      LET col=col+3^(2-N)    !(1-N) 3色分割、(2-N) 9色分割、(3-N) 27色分割
   END IF
END PICTURE

!------ 2分岐型
PICTURE D2(k)
   IF 0< k THEN
      DRAW D2(k-1) WITH m0   !絵定義 D2(k-1) を m0,m1 で変形して2つ描画
      DRAW D2(k-1) WITH m1
   ELSE
      DRAW Dx_0              !絵定義 D2(0) になる
      LET col=col+2^(3-N)    !(1-N) 2色分割、(2-N) 4色分割、(3-N) 8色分割、(4-N) 16色分割
   END IF
END PICTURE

!------ 初期集合
PICTURE Dx_0
   IF 5< N THEN                    !        複素数平面上の、点、線、面であるので、
      SET LINE COLOR INT(col)      !        数値は全て、複素数の座標ですが、
      PLOT LINES: 0,0; 1,0         !0; 1    ver.7.5.0~ でしか、直接は書けない事と、
   ELSEIF N=5 THEN                 !
      SET LINE COLOR INT(col)      !        入力画素ベクトル(1x4 行列) としては、
      PLOT LINES: 0,0; 1,0         !0; 1    同じ結果(各要素は 実数)になる事で、
      SET POINT COLOR INT(col)     !        実数 x,y 座標になっています。
      PLOT POINTS: .85, 0          !0.85
   ELSE
      SET AREA COLOR INT(col)
      PLOT AREA: 0,0; .5,.29; 1,0  !0; 0.5+0.29i; 1
      SET POINT COLOR 0
      PLOT POINTS: .8, .05         !0.8+0.05i
   END IF
END PICTURE

END
 

Re: フラクタル画像13種類

 投稿者:SECOND  投稿日:2011年 5月24日(火)03時57分1秒
  > No.1544[元記事へ]

! 多分岐 N階写像を描く3通りの試み。 (ver.7.5.0 以降で動きます)
!
! 1)と 3)の描点順序は分散し、 2)は、描点順序が連なっています。
!
! 特に、1)と 2)は、似ているのに違っています、なぜでしょうか。

OPTION ARITHMETIC COMPLEX
DIM m0(4,4), m1(4,4), t(4,4)!, w(4,4)
SET WINDOW -.5, 1.5, -1, 1
SET POINT STYLE 1
!----------------- sample ドラゴン
LET i=COMPLEX(0,1)
DEF f0(z)= (1+i)/2*(z )  +0*conj(z )
DEF f1(z)= (1+i)/2*(z-1) +0*conj(z-1) +1
MAT m0=SCALE((1+i)/2)
MAT m1=SHIFT(-1)*m0*SHIFT(1)
!-----------------
DRAW grid
PLOT TEXT,AT-.4,.8:"1)CALL dp2()"
MAT t=IDN
CALL dp2(16, t)  !(N 階, 0 階行列)
beep
pause
CLEAR
DRAW grid
PLOT TEXT,AT-.4,.8:"2)DRAW D2()"
DRAW D2(16)      !(N 階)
beep
pause
CLEAR
DRAW grid
PLOT TEXT,AT-.4,.8:"3)CALL F2()"
CALL F2(16,0)    !(N 階, 0 階座標)
beep

! draw picture 2 分岐 N 階を、行列操作で置換えてみたもの。
!-------------------------------------------
!1) 0 階集合を、N 階重ねの行列で、写像。
!-------------------------------------------
SUB dp2(k, t(,))
   local w(4,4)      !※ w(4,4) は local でないと、動かない。?
   IF 0< k THEN
      MAT w=t*m0
      CALL dp2(k-1, w)      !各階の行列
      MAT w=t*m1
      CALL dp2(k-1, w)
   ELSE
      DRAW pn(0) WITH t     !0 階目の絵の N 階分 一括変形
   END IF
END SUB

!-------------------------------------------
!2) 0 階集合を、N 階重ねの変形写像。
!-------------------------------------------
PICTURE D2(k)
   IF 0< k THEN
      DRAW D2(k-1) WITH m0  !各階の変形
      DRAW D2(k-1) WITH m1
   ELSE
      DRAW pn(0)            !0 階目の絵
   END IF
END PICTURE

!----------------------------------------------
!3) 0 階集合を、N 階写像した座標で、直接描く。
!----------------------------------------------
SUB F2(k,z)                 !0 階目の座標は、開始の CALL から
   IF 0< k THEN
      CALL F2(k-1,f0(z))    !各階の写像座標
      CALL F2(k-1,f1(z))
   ELSE
      DRAW pn(z)            !N 階目の座標
   END IF
END SUB


!----------- プロッター
PICTURE pn(z)
   PLOT POINTS: z
END PICTURE

END


! 2分岐 3階写像のモデル
!---------------------------------------------------
!    call dp2()       描点の空間的位置の順序が、番号のようになるが、
!    call F2()                  写像分岐自体の実行順序 は、下と同一で、
!                               左から順に、1,5,3,7,,, である。
!N=1     ┌──┴─┐
!N=2  ┌─┴┐  ┌┴─┐     (描点配置の間飛びは、写像式 N 階の性質)
!N=3┌┴┐┌┴┐┌┴┐┌┴┐
!    1  5  3  7  2  6  4  8
!---------------------------------------------------

!---------------------------------------------------
!    draw D2()        描点配置の順も、写像分岐の実行順序と、共に、
!                               左から順に、番号通り
!N=1     ┌──┴─┐
!N=2  ┌─┴┐  ┌┴─┐   描点配置の順序が、写像式 N 階と異なり、
!N=3┌┴┐┌┴┐┌┴┐┌┴┐  全ての階の間が、相対的0~1階で、
!    1  2  3  4  5  6  7  8   座標格子の方が分岐縮小していくように見える
!---------------------------------------------------
 

Re: フラクタル画像13種類

 投稿者:SECOND  投稿日:2011年 5月24日(火)23時20分3秒
  > No.1559[元記事へ]

! 多分岐 N階写像を描く4通り目の試み。 (ver.7.5.0 以降で動きます)
!
! 2)と同じ様に、描点順序が、連なるようにと、4)のようなものを書いてみた。
! 結果は、同じようでも、N 階 写像 というよりは、1階写像のN回?
!
!    座標系自体の、原点込みの多分岐 N階なため、末端に至るまで どの階も
!  分岐した座標系が、元の座標系の中で、必ず隣接しています。N階目も同様で、
!    座標系や、そこに書かれた絵も、描点が、連なることになるでしょう。
!    原点を0階で1つ固定したままの、通常の k-1 から k 階への、絵の写像は、
!  オフセット、その他が 累積されているので、かなり違っており、分岐は、分散する。
!    2)の動作も、原点込みの多分岐としか、思えないが、よく解らない。


OPTION ARITHMETIC COMPLEX
DIM m0(4,4), m1(4,4)
SET WINDOW -.5, 1.5, -1, 1
SET POINT STYLE 1
!----------------- sample ドラゴン
LET i=COMPLEX(0,1)
DEF f0(z)= (1+i)/2*(z )  +0*conj(z )
DEF f1(z)= (1+i)/2*(z-1) +0*conj(z-1) +1
MAT m0=SCALE((1+i)/2)
MAT m1=SHIFT(-1)*m0*SHIFT(1)
!-----------------
DRAW grid
PLOT TEXT,AT-.4,.8:"2)DRAW D2()"
DRAW D2(16)                       !(N 階)
beep
WAIT DELAY .5  !pause
CLEAR
DRAW grid
LET c=f0(0)                       !1分岐目、0階~1階の相対座標、格子点。
LET d=f0(1)
LET e=f0(COMPLEX(0,1))
LET f=f1(0)                       !2分岐目、0階~1階の相対座標、格子点。
LET g=f1(1)
LET h=f1(COMPLEX(0,1))
PLOT TEXT,AT-.4,.8:"4)CALL F2x()"
CALL F2x(16, 0,1,COMPLEX(0,1) )   !(N 階, 0 階格子点3つ)
beep

!-----------------------------------------
!2) 0 階集合を、N 階重ねの変形写像。
!-----------------------------------------
PICTURE D2(k)
   IF 0< k THEN
      DRAW D2(k-1) WITH m0   !各階の変形
      DRAW D2(k-1) WITH m1
   ELSE
      DRAW pn(0)             !0 階目の絵
   END IF
END PICTURE

!------------------------------------------------------
!4) 格子点( z=0:原点 z=1:実軸 z=i:虚軸 )の N階写像
!------------------------------------------------------
SUB F2x(k, z0,z1,zi)         !0 階目の格子点 座標は、開始の CALL から
   local a,b
   LET a=(z1-z0)             !a を、実軸方向、b を、虚軸方向として、次の階の格子点
   LET b=(zi-z0)             !( z0:原点 z1:実軸 zi:虚軸 )を、0階~1階の相対座標で送る。
   IF 0< k THEN
      CALL F2x(k-1, re(c)*a+im(c)*b+z0, re(d)*a+im(d)*b+z0, re(e)*a+im(e)*b+z0)  !各階、次の格子点
      CALL F2x(k-1, re(f)*a+im(f)*b+z0, re(g)*a+im(g)*b+z0, re(h)*a+im(h)*b+z0)  !各階、次の格子点
   ELSE
      DRAW pn(z0)            !N 階目の、原点 座標
   END IF
END SUB

!----------- プロッター
PICTURE pn(z)
   PLOT POINTS: z
END PICTURE

END
 

Re: フラクタル画像13種類

 投稿者:山中和義  投稿日:2011年 5月28日(土)17時17分42秒
  > No.1559[元記事へ]

SECONDさんへのお返事です。

> ! 多分岐 N階写像を描く3通りの試み。 (ver.7.5.0 以降で動きます)
> !
> ! 1)と 3)の描点順序は分散し、 2)は、描点順序が連なっています。
> !
> ! 特に、1)と 2)は、似ているのに違っています、なぜでしょうか。

次のように、プログラムを追加して確認しました。


SUB dp2(k, t(,))
   local w(4,4) !※ w(4,4) は local でないと、動かない。?
   IF 0< k THEN
      MAT w=t*m0
      CALL dp2(k-1, w) !各階の行列
      MAT w=t*m1
      CALL dp2(k-1, w)
   ELSE
      MAT PRINT t; !*** debug
      DRAW pn(0) WITH t !0 階目の絵の N 階分 一括変形
   END IF
END SUB


PICTURE D2(k)
   IF 0< k THEN
      DRAW D2(k-1) WITH m0 !各階の変形
      DRAW D2(k-1) WITH m1
   ELSE
      DIM t(4,4) !*** debug
      MAT t=TRANSFORM !*** debug
      MAT PRINT t; !*** debug
      DRAW pn(0) !0 階目の絵
   END IF
END PICTURE


それぞれの変換行列は、
dp2
 (x' y' z' 1)=(x y z 1)*m[0]*m[1]*m[2]*m[3]* … *m[n] ※m[n]はn階層目に乗じる行列

D2
 (x' y' z' 1)=(x y z 1)*m[n]* … *m[3]*m[2]*m[1]*m[0]


したがって、同じ変換行列にするには、MAT w=m0*t、MAT w=m1*tになると思います。
 

Re: フラクタル画像13種類

 投稿者:SECOND  投稿日:2011年 5月29日(日)02時33分40秒
  > No.1570[元記事へ]

!ありがとうございます。その通りです。よろしければ、以下もご参照ください。

! 多分岐 N階写像を描く5通りの試み。 (ver.7.5.0 以降で動きます)

OPTION ARITHMETIC COMPLEX
DIM m0(4,4), m1(4,4), t(4,4)!, w(4,4)
SET WINDOW -.5, 1.5, -1, 1
SET POINT STYLE 1
!----------------- sample ドラゴン
LET i=COMPLEX(0,1)
DEF f0(z)= (1+i)/2*(z )  +0*conj(z )
DEF f1(z)= (1+i)/2*(z-1) +0*conj(z-1) +1
MAT m0=SCALE((1+i)/2)
MAT m1=SHIFT(-1)*m0*SHIFT(1)
!-----------------
DRAW grid
PLOT TEXT,AT-.4,.8:"1)CALL dp2()"
MAT t=IDN
CALL dp2(16, t)  !(N 階, 0 階写像行列)
beep
pause
CLEAR
DRAW grid
PLOT TEXT,AT-.4,.8:"2)DRAW D2()"
DRAW D2(16)      !(N 階)
beep
pause
CLEAR
DRAW grid
PLOT TEXT,AT-.4,.8:"3)CALL F2()"
CALL F2(16,0)    !(N 階, 0 階座標)
beep
pause
CLEAR
DRAW grid
LET c=f0(0)                       !1分岐目、0階~1階の相対座標、格子点。
LET d=f0(1)
LET e=f0(COMPLEX(0,1))
LET f=f1(0)                       !2分岐目、0階~1階の相対座標、格子点。
LET g=f1(1)
LET h=f1(COMPLEX(0,1))
PLOT TEXT,AT-.4,.8:"4)CALL F2x()"
CALL F2x(16, 0,1,COMPLEX(0,1) )   !(N 階, 0 階原点, 0 階実軸単位ベクトル, 0 階虚軸単位ベクトル)
beep
pause
CLEAR
DRAW grid
PLOT TEXT,AT-.4,.8:"5)CALL F2mx()"
MAT t=IDN
CALL F2mx(16, t)                   !(N 階, 0 階空間行列)
beep

!----------------------------------------------
!1)0 階集合を、N 階写像した座標値で描く。
!----------------------------------------------
SUB dp2(k, t(,))
   local w(4,4)      !※ w(4,4) は local でないと、動かない。?
   IF 0< k THEN
      MAT w=t*m0
      CALL dp2(k-1, w)      !各階の写像行列
      MAT w=t*m1
      CALL dp2(k-1, w)
   ELSE
      DRAW pn(0) WITH t     !N 階目の絵
   END IF
END SUB

!---------------------------------------------------------------------
!2)0 階座標系を、N 階 変形させて、その中に、0 階の座標値で絵を描く。
!---------------------------------------------------------------------
PICTURE D2(k)
   IF 0< k THEN
      DRAW D2(k-1) WITH m0  !各階の空間変形
      DRAW D2(k-1) WITH m1
   ELSE
      DRAW pn(0)            !0 階の絵
   END IF
END PICTURE

!----------------------------------------------
!3)0 階集合を、N 階写像した座標値で描く。
!----------------------------------------------
SUB F2(k,z)                 !0 階目の座標は、開始の CALL から
   IF 0< k THEN
      CALL F2(k-1,f0(z))    !各階の写像座標
      CALL F2(k-1,f1(z))
   ELSE
      DRAW pn(z)            !N 階目の座標
   END IF
END SUB

!-------------------------------------------------------------------
!4)0 階座標系を、N階 写像して、その中に、0 階の座標値で絵を描く。
!  次の階の z0, a, b, を、0階~1階の相対座標で送る。
!
!   z0=原点  a=実軸単位ベクトル  b=虚軸単位ベクトル
!-------------------------------------------------------------------
SUB F2x(k, z0,a,b)          !0 階目は、開始の CALL から
   IF 0< k THEN
      CALL F2x(k-1, re(c)*a+im(c)*b+z0, re(d-c)*a+im(d-c)*b, re(e-c)*a+im(e-c)*b)  !各階、次の空間
      CALL F2x(k-1, re(f)*a+im(f)*b+z0, re(g-f)*a+im(g-f)*b, re(h-f)*a+im(h-f)*b)  !各階、次の空間
   ELSE
      DRAW pn(z0)           !z0 は、N 階座標系の、原点位置。
   END IF                   !任意な X 点は、re(X)*a+im(X)*b+z0 で描点。
END SUB

!-------------------------------------------------------------------
!5)0 階座標系を、N階 写像して、その中に、0 階の座標値で絵を描く。
!  4)を行列形式に替えただけで、同一。
!-------------------------------------------------------------------
!※m_*t を逆にすると、1)に一致。 2)draw picture with ~と同じ。

SUB F2mx(k, t(,))
   local w(4,4)      !※ w(4,4) は local でないと、動かない。?
   IF 0< k THEN
      MAT w=m0*t
      CALL F2mx(k-1, w)     !各階、次の空間
      MAT w=m1*t
      CALL F2mx(k-1, w)     !各階、次の空間
   ELSE
      DRAW pn(0) WITH t     !t は、N 階座標系の、原点位置(と、各軸の単位ベクトル)
   END IF
END SUB


!----------- プロッター
PICTURE pn(z)
   PLOT POINTS: z
END PICTURE

END
 

戻る