|
!変形指示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
|
|