新しく発言する  EXIT  インデックスへ
万華鏡

  万華鏡 ひでき 2007/12/22 19:15:43 
  !ご参考に。 SECOND 2007/12/23 02:54:41 
  │└x軸,y軸に関する対称移動は,それぞれ,SC... 白石 和夫 2007/12/23 10:36:54 
  │ └気が付きませんでした、直します。 SECOND 2007/12/23 17:13:48 
  !ご参考に。こちらが簡単になります。 SECOND 2007/12/23 17:16:58 
  │└ポイントは、再帰呼び出しにあるのですね。 ひでき 2007/12/24 19:56:12 
  │ ├飾る前に、3重書きの不具合がありました。 SECOND 2007/12/24 21:10:09 
  │ ├!少し飾ったものです。(修2) SECOND 2007/12/24 23:45:32  (修正2回)
  │ └厳密の計算ではありませんが、また、対称変... 山中和義 2007/12/25 11:18:13 
  !フラクタル描画で、3重書きの弊害を解消し... SECOND 2007/12/24 21:02:15 
   ├!こちらが見やすい。動きを細かくした。 SECOND 2007/12/25 04:00:25 
   │└シェルピンスキーの三角形ですね。 山中和義 2007/12/25 11:08:08 
   │ ├日増しに訪問者が、減っていくようで寂しい... SECOND 2007/12/25 19:09:12 
   │ └腰を折ってすみません。六角形の方を紹介し... SECOND 2007/12/26 03:06:45 
   │  └!簡易万華鏡(ランダム)※FOR文による6角... 山中和義 2007/12/26 11:26:29 
   └!シルピンスキーのガスケットと並べて動かし... SECOND 2007/12/26 05:27:23  (修正2回)
    └「中を抜いたもの」を、シルピンスキーのガ... SECOND 2007/12/26 09:35:33 

  万華鏡 ひでき 2007/12/22 19:15:43   ツリーへ

万華鏡  返事を書く  ノートメニュー
ひでき <jweuhhncel> 2007/12/22 19:15:43
万華鏡を十進BASICで作るのは、どのようにすればよいのでしょうか?
線対称なのは、わかるのですが、3ミラーの場合、何十回と
描かないといけないのでしょうか?
何か便利な変換行列のようなものがあるのでしょうか?
お知恵をお貸しください。
よろしくお願いいたします。

  !ご参考に。 SECOND 2007/12/23 02:54:41   ツリーへ

Re: 万華鏡  返事を書く  ノートメニュー
SECOND <jjqdmekgpt> 2007/12/23 02:54:41
!ご参考に。

!簡易万華鏡
!-----
OPTION ARITHMETIC NATIVE
DIM mlx(4,4),mly(4,4),px(8),py(8)

MAT READ mlx
DATA -1, 0,0,0
DATA 0, 1,0,0
DATA 0, 0,1,0
DATA 0, 0,0,1

MAT READ mly
DATA 1, 0,0,0
DATA 0,-1,0,0
DATA 0, 0,1,0
DATA 0, 0,0,1

MAT READ px
DATA 0.20, 0.50, 0.80, 0.65, 0.50, 0.35, 0.20, 0.50
MAT READ py
DATA 0.11, 0.11, 0.11, 0.38, 0.65, 0.38, 0.11, 0.11

SET WINDOW -2, 3, -2, 3

PRINT "右クリックで、停止。"
LET s=1
DO
SET DRAW mode hidden
CLEAR
LET s=MOD(s,6)+1
DRAW D3(4)
SET DRAW mode explicit
MOUSE POLL x,y,left,right
WAIT DELAY 0.1
LOOP UNTIL 0<right

!------ ミラー3分岐、再帰描画。
PICTURE D3(k)
IF 0<k THEN
DRAW D3(k-1) WITH mly ! 下
DRAW D3(k-1) WITH mlx*ROTATE(-PI/3) ! 左上
DRAW D3(k-1) WITH SHIFT(-1,0)*mlx*ROTATE(PI/3)*SHIFT(1,0) ! 右上
DRAW Set01
ELSE
DRAW Set01
END IF
END PICTURE

!------ 中心の三角図1枚
PICTURE Set01
PLOT LINES: 0,0; 1,0 ;0.5,SQR(3)/2 ;0,0
SET AREA COLOR 2
DRAW disk WITH SCALE(0.1)*SHIFT(px(s),py(s)) ! 飾りを置く。
SET AREA COLOR 3
DRAW disk WITH SCALE(0.1)*SHIFT(px(s+1),py(s+1)) ! 飾りを置く。
SET AREA COLOR 4
DRAW disk WITH SCALE(0.1)*SHIFT(px(s+2),py(s+2)) ! 飾りを置く。
END PICTURE

END

  │└x軸,y軸に関する対称移動は,それぞれ,SC... 白石 和夫 2007/12/23 10:36:54   ツリーへ

Re: !ご参考に。  返事を書く  ノートメニュー
白石 和夫 <ynwythjfwu> 2007/12/23 10:36:54
x軸,y軸に関する対称移動は,それぞれ,SCALE(-1,1), SCALE(1,-1) で実現できます。これは,JISの範囲内です。

  │ └気が付きませんでした、直します。 SECOND 2007/12/23 17:13:48   ツリーへ

Re: x軸,y軸に関する対称移動は,それぞれ,SC...  返事を書く  ノートメニュー
SECOND <jjqdmekgpt> 2007/12/23 17:13:48
気が付きませんでした、直します。

  !ご参考に。こちらが簡単になります。 SECOND 2007/12/23 17:16:58   ツリーへ

Re: 万華鏡  返事を書く  ノートメニュー
SECOND <jjqdmekgpt> 2007/12/23 17:16:58
!ご参考に。こちらが簡単になります。

!簡易万華鏡
!-----
OPTION ARITHMETIC NATIVE
DIM px(8),py(8)

MAT READ px
DATA 0.20, 0.50, 0.80, 0.65, 0.50, 0.35, 0.20, 0.50
MAT READ py
DATA 0.11, 0.11, 0.11, 0.38, 0.65, 0.38, 0.11, 0.11

SET WINDOW -2, 3, -2, 3

PRINT "右クリックで、停止。"
LET s=1
DO
SET DRAW mode hidden
CLEAR
LET s=MOD(s,6)+1
DRAW D3(4)
SET DRAW mode explicit
MOUSE POLL x,y,left,right
WAIT DELAY 0.1
LOOP UNTIL 0<right

!------ ミラー3分岐、再帰描画。
PICTURE D3(k)
IF 0<k THEN
DRAW D3(k-1) WITH SCALE(1,-1) ! 下
DRAW D3(k-1) WITH SCALE(-1,1)*ROTATE(-PI/3) ! 左上
DRAW D3(k-1) WITH SHIFT(-1,0)*SCALE(-1,1)*ROTATE(PI/3)*SHIFT(1,0) ! 右上
DRAW Set01
ELSE
DRAW Set01
END IF
END PICTURE

!------ 中心の三角図1枚
PICTURE Set01
PLOT LINES: 0,0; 1,0 ;0.5,SQR(3)/2 ;0,0
SET AREA COLOR 2
DRAW disk WITH SCALE(0.1)*SHIFT(px(s),py(s)) ! 飾りを置く。
SET AREA COLOR 3
DRAW disk WITH SCALE(0.1)*SHIFT(px(s+1),py(s+1)) ! 飾りを置く。
SET AREA COLOR 4
DRAW disk WITH SCALE(0.1)*SHIFT(px(s+2),py(s+2)) ! 飾りを置く。
END PICTURE

END

  │└ポイントは、再帰呼び出しにあるのですね。 ひでき 2007/12/24 19:56:12   ツリーへ

Re: !ご参考に。こちらが簡単になります。  返事を書く  ノートメニュー
ひでき <jweuhhncel> 2007/12/24 19:56:12
ポイントは、再帰呼び出しにあるのですね。
初めてでしたので、勉強になりました。secondさんありがとうございました。

ところで、secondさんのプログラム中の中心の三角図1枚に
三角形から、はみ出すことなく、位置を表わすのに乱数を
含んだdiskを描くことは可能なのでしょうか。
これができれば、より万華鏡らしくなると思うのですが
可能なのでしょうか。ご無理を言いますが、お教えください。
よろしくお願いいたします。

  │ ├飾る前に、3重書きの不具合がありました。 SECOND 2007/12/24 21:10:09   ツリーへ

Re: ポイントは、再帰呼び出しにあるのですね。  返事を書く  ノートメニュー
SECOND <jjqdmekgpt> 2007/12/24 21:10:09
飾る前に、3重書きの不具合がありました。
その事が、重要な事なので先に観察してください。仕上げは、
できれば、ご自身で研究される方を期待いたします。すみません。

  │ ├!少し飾ったものです。(修2) SECOND 2007/12/24 23:45:32  (修正2回)  ツリーへ

Re: ポイントは、再帰呼び出しにあるのですね。  返事を書く  ノートメニュー
SECOND <jjqdmekgpt> 2007/12/24 23:45:32 ** この記事は2回修正されてます
!少し飾ったものです。(修2)

!簡易万華鏡
!-----
OPTION ARITHMETIC NATIVE
DIM px(10),py(10)

MAT READ px
DATA 0.20, 0.40, 0.60, 0.80, 0.70, 0.60, 0.50, 0.40, 0.30, 0.20
MAT READ py
DATA 0.11, 0.11, 0.11, 0.11, 0.29, 0.47, 0.65, 0.47, 0.29, 0.11

SET WINDOW 0.25,0.75, 0, 0.5

PRINT "右クリックで、停止。"
DO
LET s1=RND*9+1
LET s2=RND*9+1
LET s3=RND*9+1
LET s4=RND*9+1
LET c1=RND*6+1
LET c2=RND*6+1
LET c3=RND*6+1
LET c4=RND*6+1
SET DRAW mode hidden
CLEAR
DRAW D3(3)
SET DRAW mode explicit
MOUSE POLL x,y,left,right
WAIT DELAY 0.2
LOOP UNTIL 0<right

!------ ミラー縮小4分岐、再帰描画。
PICTURE D3(k)
IF 0<k THEN
DRAW D3(k-1) WITH SCALE(1/2,1/2)*SHIFT(1/4,SQR(3)/4) ! 上
DRAW D3(k-1) WITH SCALE(1/2,-1/2)*SHIFT(1/4,SQR(3)/4) ! 中
DRAW D3(k-1) WITH SCALE(1/2,1/2)*ROTATE(-PI*2/3)*SHIFT(1/4,SQR(3)/4) ! 左
DRAW D3(k-1) WITH SCALE(1/2,1/2)*ROTATE(PI*2/3)*SHIFT(1,0) ! 右
ELSE
DRAW Set01
END IF
END PICTURE

!------ 親集合の三角図1枚
PICTURE Set01
PLOT LINES: 0,0; 1,0 ;0.5,SQR(3)/2 ;0,0
SET AREA COLOR c1
DRAW disk WITH SCALE(0.1)*SHIFT(px(s1),py(s1)) !飾り1
SET AREA COLOR c2
DRAW disk WITH SCALE(0.1)*SHIFT(px(s2),py(s2)) !飾り2
SET AREA COLOR c3
PLOT AREA:px(s3),py(s3)+0.1;px(s3)+0.1,py(s3)-0.1;px(s3)+0.1,py(s3)+0.1;px(s3)-0.1,py(s3)+0.1;px(s3)-0.1,py(s3)-0.1 !飾り3
SET AREA COLOR c4
DRAW disk WITH SCALE(0.1)*SHIFT(px(s4),py(s4)) !飾り4
END PICTURE

END

  │ └厳密の計算ではありませんが、また、対称変... 山中和義 2007/12/25 11:18:13   ツリーへ

Re: ポイントは、再帰呼び出しにあるのですね。  返事を書く  ノートメニュー
山中和義 <drdlxujciw> 2007/12/25 11:18:13
厳密の計算ではありませんが、また、対称変換(鏡像変換)をもじって

飾りの厚み(半径)は無視。 従って、はみ出ますが、、、



!簡易万華鏡(ランダム)

OPTION ARITHMETIC NATIVE

SET WINDOW 0,1, -0.1,0.9

LET N=3 !飾りの数
DIM px(N),py(N) !(親集合での)飾りの位置

PRINT "右クリックで、停止。"

DO

!親の三角形△を二分した三角形凵i元の三角形の左半分)を考えて、ひとつを逆さに重ねて長方形をつくる。
!この長方形内の点をランダムに選ぶ。
!その点が、三角形剴烽ネら、そのまま採用する。
!そうでなければ(外部なら)、元の三角形△の右半分になるように座標変換する。
FOR i=1 TO N
LET x=RND*0.5 !長方形内の点 x=[0,0.5)、y=[0,SQR(3)/2)
LET y=RND*SQR(3)/2
IF -x*SQR(3)+y>0 THEN !外部なら ※左側の斜辺 直線y=SQR(3)*x
LET y=-y !x軸対称
LET x=x+1/2 !平行移動
LET y=y+SQR(3)/2
END IF !ヒット率(三角形△の内部になる確率)が100%になる
LET px(i)=x !採用
LET py(i)=y
NEXT i


SET DRAW mode hidden
CLEAR
DRAW D3(3)
SET DRAW mode explicit

MOUSE POLL x,y,left,right
WAIT DELAY 0.1
LOOP UNTIL 0<right


!------ ミラー縮小4分岐、再帰描画。
PICTURE D3(k)
IF 0<k THEN
DRAW D3(k-1) WITH SCALE(1/2,1/2)*SHIFT(1/4,SQR(3)/4) ! 上
DRAW D3(k-1) WITH SCALE(1/2,-1/2)*SHIFT(1/4,SQR(3)/4) ! 中
DRAW D3(k-1) WITH SCALE(1/2,1/2)*ROTATE(-PI*2/3)*SHIFT(1/4,SQR(3)/4) ! 左
DRAW D3(k-1) WITH SCALE(1/2,1/2)*ROTATE(PI*2/3)*SHIFT(1,0) ! 右
ELSE
DRAW Set01
END IF
END PICTURE

!------ 親集合の三角図1枚
PICTURE Set01
PLOT LINES: 0,0; 1,0; 1/2,SQR(3)/2; 0,0 !鏡の縁

FOR i=1 TO N
SET AREA COLOR i+1
DRAW disk WITH SCALE(0.1)*SHIFT(px(i),py(i)) !飾り
NEXT i
END PICTURE


END

  !フラクタル描画で、3重書きの弊害を解消し... SECOND 2007/12/24 21:02:15   ツリーへ

Re: 万華鏡  返事を書く  ノートメニュー
SECOND <jjqdmekgpt> 2007/12/24 21:02:15
!フラクタル描画で、3重書きの弊害を解消した。

!簡易万華鏡
!-----
OPTION ARITHMETIC NATIVE
DIM px(8),py(8)

MAT READ px
DATA 0.20, 0.50, 0.80, 0.65, 0.50, 0.35, 0.20, 0.50
MAT READ py
DATA 0.11, 0.11, 0.11, 0.38, 0.65, 0.38, 0.11, 0.11

SET WINDOW 0, 1, -0.1, 0.9
SET COLOR MIX(15) 0.3,0.3,0.3
PRINT "右クリックで、停止。"
LET s=1
DO
SET DRAW mode hidden
CLEAR
DRAW D3(3)
SET DRAW mode explicit
LET s=MOD(s,6)+1
MOUSE POLL x,y,left,right
WAIT DELAY 0.1
LOOP UNTIL 0<right

!------ ミラー縮小4分岐、再帰描画。
PICTURE D3(k)
IF 0<k THEN
DRAW D3(k-1) WITH SCALE(1/2,1/2)*SHIFT(1/4,SQR(3)/4) ! 上
DRAW D3(k-1) WITH SCALE(1/2,-1/2)*SHIFT(1/4,SQR(3)/4) ! 中
DRAW D3(k-1) WITH SCALE(1/2,1/2)*ROTATE(-PI*2/3)*SHIFT(1/4,SQR(3)/4) ! 左
DRAW D3(k-1) WITH SCALE(1/2,1/2)*ROTATE(PI*2/3)*SHIFT(1,0) ! 右
ELSE
DRAW Set01
END IF
END PICTURE

!------ 親集合の三角図1枚
PICTURE Set01
PLOT LINES: 0,0; 1,0 ;0.5,SQR(3)/2 ;0,0
SET AREA COLOR 2
DRAW disk WITH SCALE(0.1)*SHIFT(px(s),py(s)) ! 飾りを置く。
SET AREA COLOR 3
DRAW disk WITH SCALE(0.1)*SHIFT(px(s+1),py(s+1)) ! 飾りを置く。
SET AREA COLOR 4
DRAW disk WITH SCALE(0.1)*SHIFT(px(s+2),py(s+2)) ! 飾りを置く。
END PICTURE

END

   ├!こちらが見やすい。動きを細かくした。 SECOND 2007/12/25 04:00:25   ツリーへ

Re: !フラクタル描画で、3重書きの弊害を解消し...  返事を書く  ノートメニュー
SECOND <jjqdmekgpt> 2007/12/25 04:00:25
!こちらが見やすい。動きを細かくした。

!簡易万華鏡
!-----
OPTION ARITHMETIC NATIVE
DIM px(11),py(11)

MAT READ px
DATA 0.20, 0.40, 0.60, 0.80, 0.70, 0.60, 0.50, 0.40, 0.30, 0.20, 0.40
MAT READ py
DATA 0.11, 0.11, 0.11, 0.11, 0.29, 0.47, 0.65, 0.47, 0.29, 0.11, 0.11

SET WINDOW 0, 1, -0.1, 0.9

PRINT "右クリックで、停止。"
LET s=1
DO
SET DRAW mode hidden
CLEAR
DRAW D3(3)
SET DRAW mode explicit
LET s=MOD(s,9)+1
MOUSE POLL x,y,left,right
WAIT DELAY 0.1
LOOP UNTIL 0<right

!------ ミラー縮小4分岐、再帰描画。
PICTURE D3(k)
IF 0<k THEN
DRAW D3(k-1) WITH SCALE(1/2,1/2)*SHIFT(1/4,SQR(3)/4) ! 上
DRAW D3(k-1) WITH SCALE(1/2,-1/2)*SHIFT(1/4,SQR(3)/4) ! 中
DRAW D3(k-1) WITH SCALE(1/2,1/2)*ROTATE(-PI*2/3)*SHIFT(1/4,SQR(3)/4) ! 左
DRAW D3(k-1) WITH SCALE(1/2,1/2)*ROTATE(PI*2/3)*SHIFT(1,0) ! 右
ELSE
DRAW Set01
END IF
END PICTURE

!------ 親集合の三角図1枚
PICTURE Set01
PLOT LINES: 0,0; 1,0 ;0.5,SQR(3)/2 ;0,0
SET AREA COLOR 2
DRAW disk WITH SCALE(0.1)*SHIFT(px(s),py(s)) ! 飾り1
SET AREA COLOR 3
DRAW disk WITH SCALE(0.1)*SHIFT(px(s+1),py(s+1)) ! 飾り2
SET AREA COLOR 4
DRAW disk WITH SCALE(0.1)*SHIFT(px(s+2),py(s+2)) ! 飾り3
END PICTURE

END

!縮小写像に替えたために物理的なミラー展開とは逆に、
!外側から内側へ向かって、ミラーの細分化を、進めている。
!親集合の三角図は、抽象的な映像となってしまった。
!その代わり、1枚も重ならない展開となって、速度も速い。

   │└シェルピンスキーの三角形ですね。 山中和義 2007/12/25 11:08:08   ツリーへ

Re: !こちらが見やすい。動きを細かくした。  返事を書く  ノートメニュー
山中和義 <drdlxujciw> 2007/12/25 11:08:08
シェルピンスキーの三角形ですね。

FOR文による繰り返しで考えると、
6角形をつくって、平面を充填する方法もありますね。

   │ ├日増しに訪問者が、減っていくようで寂しい... SECOND 2007/12/25 19:09:12   ツリーへ

Re: シェルピンスキーの三角形ですね。  返事を書く  ノートメニュー
SECOND <jjqdmekgpt> 2007/12/25 19:09:12
日増しに訪問者が、減っていくようで寂しいですね・・

   │ └腰を折ってすみません。六角形の方を紹介し... SECOND 2007/12/26 03:06:45   ツリーへ

Re: シェルピンスキーの三角形ですね。  返事を書く  ノートメニュー
SECOND <jjqdmekgpt> 2007/12/26 03:06:45
腰を折ってすみません。六角形の方を紹介してください。
できるだけ多くの種類が投稿者の希望かも知れません。
わたしが、邪魔をしたのでなければ、いいですが・・

   │  └!簡易万華鏡(ランダム)※FOR文による6角... 山中和義 2007/12/26 11:26:29   ツリーへ

Re: 腰を折ってすみません。六角形の方を紹介し...  返事を書く  ノートメニュー
山中和義 <drdlxujciw> 2007/12/26 11:26:29
!簡易万華鏡(ランダム)※FOR文による6角形の平面充填

OPTION ARITHMETIC NATIVE

LET N=3 !飾りの数
DIM px(N),py(N),sc(N) !(親集合での)飾りの位置、大きさ

SET WINDOW -2,5, -1,6

PRINT "右クリックで、停止。"

DO
FOR i=1 TO N !飾りの位置を求める
LET x=RND*0.5 !長方形内の点 x=[0,0.5)、y=[0,SQR(3)/2)
LET y=RND*SQR(3)/2
IF -x*SQR(3)+y>0 THEN !外部なら ※対角線 直線y=SQR(3)*x
LET y=-y !x軸対称
LET x=x+1/2 !平行移動
LET y=y+SQR(3)/2
END IF !ヒット率(三角形△の内部になる確率)が100%になる
LET px(i)=x !採用
LET py(i)=y
LET sc(i)=RND*0.1+0.1 !s=[0.1,0.2)
NEXT i

SET DRAW mode hidden
CLEAR
FOR ix=0 TO 2 !6角形で平面を充填する
FOR iy=0 TO 2
DRAW p6 WITH SHIFT(1.5*ix,SQR(3)*(iy+MOD(ix,2)/2))
NEXT iy
NEXT ix
SET DRAW mode explicit

MOUSE POLL x,y,left,right
WAIT DELAY 0.1
LOOP UNTIL 0<right


PICTURE p6 !6角形を描く
FOR r=0 TO 5
IF MOD(r,2)=1 THEN
DRAW t1 WITH SCALE(1,-1)*ROTATE(2*PI*(r+1)/6) !x軸対称、回転
ELSE
DRAW t1 WITH ROTATE(2*PI*r/6) !回転のみ
END IF
NEXT r
END PICTURE

PICTURE t1 !三角形を描く
PLOT LINES: 0,0; 1,0; 1/2,SQR(3)/2; 0,0 !鏡の縁

FOR i=1 TO N
SET AREA COLOR i+1
!DRAW disk WITH SCALE(sc(i))*SHIFT(px(i),py(i)) !飾り
DRAW g WITH SCALE(sc(i))*SHIFT(px(i),py(i)) !飾り
NEXT i
END PICTURE

PICTURE g !飾りを描く ※図形の中心が原点(単位円内)
PLOT AREA: 1,0; COS(2*PI/3),SIN(2*PI/3); COS(4*PI/3),SIN(4*PI/3) !三角形
END PICTURE

END

   └!シルピンスキーのガスケットと並べて動かし... SECOND 2007/12/26 05:27:23  (修正2回)  ツリーへ

Re: !フラクタル描画で、3重書きの弊害を解消し...  返事を書く  ノートメニュー
SECOND <jjqdmekgpt> 2007/12/26 05:27:23 ** この記事は2回修正されてます
!シルピンスキーのガスケットと並べて動かしてみる。

OPTION ARITHMETIC NATIVE
DIM px(11),py(11)

MAT READ px
DATA 0.20, 0.40, 0.60, 0.80, 0.70, 0.60, 0.50, 0.40, 0.30, 0.20, 0.40
MAT READ py
DATA 0.11, 0.11, 0.11, 0.11, 0.29, 0.47, 0.65, 0.47, 0.29, 0.11, 0.11

!----------
FOR N=0 TO 4
FOR s=9 TO 1 STEP -1
SET DRAW mode hidden
CLEAR
SET WINDOW -0.4,1.6, -1.1,0.9
PLOT TEXT,AT 0.6,0.8:"ミラー縮小4分岐"
PLOT TEXT,AT 0.8,0.7, USING "N= %%":N
DRAW D4(N)
SET WINDOW -1.0,1.0, -0.05,1.95
PLOT TEXT,AT 0.6,0.8:"中を抜いたもの"
PLOT TEXT,AT 0.8,0.7, USING "N= %%":N
DRAW D42(N)
SET WINDOW 0.0,4.0, -0.1,3.9
PLOT TEXT,AT 0.1,1.8:"シルピンスキーのガスケット"
PLOT TEXT,AT 1.2,1.6, USING "N= %%":N
DRAW D3(N)
SET DRAW mode explicit
WAIT DELAY 0.2
NEXT s
NEXT N

!------ ミラー縮小4分岐
PICTURE D4(k)
IF 0<k THEN
DRAW D4(k-1) WITH SCALE(1/2,1/2)*SHIFT(1/4,SQR(3)/4) ! 上
DRAW D4(k-1) WITH SCALE(1/2,-1/2)*SHIFT(1/4,SQR(3)/4) ! 中
DRAW D4(k-1) WITH SCALE(1/2,1/2)*ROTATE(-PI*2/3)*SHIFT(1/4,SQR(3)/4) ! 左
DRAW D4(k-1) WITH SCALE(1/2,1/2)*ROTATE(PI*2/3)*SHIFT(1,0) ! 右
ELSE
DRAW Set01
END IF
END PICTURE

!------ ミラー縮小4分岐(中)を外すと、シルピンスキーのガスケットもどきになる。
PICTURE D42(k)
IF 0<k THEN
DRAW D42(k-1) WITH SCALE(1/2,1/2)*SHIFT(1/4,SQR(3)/4) ! 上
! これを外す DRAW D42(k-1) WITH SCALE(1/2,-1/2)*SHIFT(1/4,SQR(3)/4) ! 中
DRAW D42(k-1) WITH SCALE(1/2,1/2)*ROTATE(-PI*2/3)*SHIFT(1/4,SQR(3)/4) ! 左
DRAW D42(k-1) WITH SCALE(1/2,1/2)*ROTATE(PI*2/3)*SHIFT(1,0) ! 右
ELSE
DRAW Set01
END IF
END PICTURE

!------ シルピンスキーのガスケット
PICTURE D3(k)
IF 0<k THEN
!---リンク・BASICで描く自己相似図形から拝借
DRAW D3(k-1) WITH SCALE(1/2)
DRAW D3(k-1) WITH SHIFT(-2,0)*SCALE(1/2)*SHIFT(2,0)
DRAW D3(k-1) WITH SHIFT(-1,-SQR(3))*SCALE(1/2)*SHIFT(1,SQR(3))
ELSE
DRAW Set01
END IF
END PICTURE

!------ 親集合の三角図1枚
PICTURE Set01
PLOT LINES: 0,0; 1,0 ;0.5,SQR(3)/2 ;0,0
SET AREA COLOR 2
DRAW disk WITH SCALE(0.1)*SHIFT(px(s),py(s)) ! 飾り1
SET AREA COLOR 3
DRAW disk WITH SCALE(0.1)*SHIFT(px(s+1),py(s+1)) ! 飾り2
SET AREA COLOR 4
DRAW disk WITH SCALE(0.1)*SHIFT(px(s+2),py(s+2)) ! 飾り3
END PICTURE

END

    └「中を抜いたもの」を、シルピンスキーのガ... SECOND 2007/12/26 09:35:33   ツリーへ

Re: !シルピンスキーのガスケットと並べて動かし...  返事を書く  ノートメニュー
SECOND <jjqdmekgpt> 2007/12/26 09:35:33
「中を抜いたもの」を、シルピンスキーのガスケット(もどき)
としたけれども、これの写像の回転成分を除いた書き方が、
本来のシルピンスキーのガスケットの書き方では、ないだろうか。

というのは、
フラクタル図形としての、次元数Dを見てみます。

縮小率r(N)=1/( N^(1/D) ) …Nは分割数

で、相似次元Dが、定義されています。分りにくいので変形して、

   (縮小率)^D=1/分割数

例1、2次元平面を相似形で4分割すると、辺の長さは半分=縮小率1/2
   (1/2)^D=1/4 で、D=2(次元)
   3次元なら、相似形で8分割すると、辺の長さは半分=縮小率1/2
   (1/2)^D=1/8 で、D=3(次元)

例2、カントール集合は、2分割するために、3等分して1つ捨てます。=縮小率1/3
   (1/3)^D=1/2 で、D=LOG(1/2)/LOG(1/3)≒0.631(次元)

例3、コッホの曲線は、2分割するために、辺を1/√3に相似縮小します。
   (1/√3)^D=1/2 で、D=LOG(1/2)/LOG(1/√3)≒1.262(次元)

次元が、端数(fraction フラクション)を持つのは、Nを無限大に分割して、
一見、埋め尽したかの様に見えても、1次元、2次元・・、などに比べると、
いたる所、すき間、穴だらけとなっていて、
フラクタル・ディメンションの図形という事です。

シルピンスキーのガスケットは、3分割するために、辺を1/2に相似縮小します。
   (1/2)^D=1/3 で、D=LOG(1/3)/LOG(1/2)≒1.585(次元)

ここまでは、端数次元の、すき間だらけの図形で、良いのですが、

 問題は、ドラゴン集合、レヴィのC曲線、ペアノの曲線、のような群です。
 2分割するために、辺を1/√2に相似縮小しています。
   (1/√2)^D=1/2 で、D=LOG(1/2)/LOG(1/√2)=2.000(次元)

丁度、2次元であるにも、かかわらず、
親集合に2次元平面を設定しても、すき間だらけの集合に分割されて行きます。
原因は、親集合の外側に展開されているためです。
相似次元どうりに2次元が、ベタの平面になるためには、常に親集合の内側に向かって
はじめて言える事だと、思います。
例えば、ペアノの曲線は、親集合に直角2等辺三角形の平面を使用すると、展開は、
親集合から少しも はみ出なくなり、完全に隙間無くベタの平面に分割されて行きます。

ですから、
シルピンスキーのガスケットの相似次元 1.585 を正しく描画するには、親集合三角形の
内側へ、展開すべきでは、ないでしょうか?


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