新しく発言する EXIT インデックスへ
リンク:「BASICで描く自己相似図形」の一部...

  リンク:「BASICで描く自己相似図形」の一部に、ミス・プリントがあります。 SECOND 2007/08/27 22:10:52  (修正1回)
  ご指摘ありがとうございました。 白石 和夫 2007/08/28 09:09:43 
   └!より自然な草木に近づくように見えます。 SECOND 2007/08/28 12:11:36 

  リンク:「BASICで描く自己相似図形」の一部に、ミス・プリントがあります。 SECOND 2007/08/27 22:10:52  (修正1回) ツリーへ

リンク:「BASICで描く自己相似図形」の一部に、ミス・プリントがあります。 返事を書く ノートメニュー
SECOND <cszcthjjdj> 2007/08/27 22:10:52 ** この記事は1回修正されてます
リンク:「BASICで描く自己相似図形」の一部に、ミス・プリントがあります。

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
コッホ曲線
Levy曲線の定義で,f2 も裏向き相似変換に替えて,
f1 =scale(1,-1)*rotate(π/4)*scale(1/√2),

f2 = shift(1,0)*rotate(π/4)*scale(1/√2)*shift(1,0) ←ミス・プリント
f2 = shift(-1,0)*rotate(π/4)*scale(1,-1)*scale(1/√2)*shift(1,0) ←これで描ける。

とすると,次の図が得られる。

一見,何の変哲もない直角2等辺3角形に見えるが,実は,ペアノ曲線である。



ここで,定数を少し変えて,

f1 =scale(1,-1)*rotate(π/6)*scale(1/√3),

f2 = shift(1,0)*rotate(π/6)*scale(1/√3)*shift(1,0) ←ミス・プリント
f2 = shift(-1,0)*rotate(π/6)*scale(1,-1)*scale(1/√3)*shift(1,0) ←これで描ける。

とすると,次の図が得られる。

これは,コッホ曲線である。



ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
縮小率の異なる相似写像に関する自己相似図形
次の図形は,

f1=SCALE(1,-1)*SCALE(1/√3)*ROTATE(π/8)

f2=SHIFT(-1,0)*SCALE(1,-1)*SCALE(2/3)*SHIFT(1,0)

に関する自己相似図形である。

 このように,f1,f2の縮小率に差がある場合には,次のプログラムのように,総合の縮小率を表す変数sを用意して,再帰呼び出しを行うごとにそれに縮小率を乗じていくようにするとよい。

100 PICTURE D(s)
110 IF s<0.001 THEN
120 PLOT POINTS: 0,0
130 ELSE
140 DRAW D(s*r) WITH SCALE(1,-1)*SCALE(r)*ROTATE(alfa)
150 DRAW D(s*2/3) WITH SHIFT(-1,0)*SCALE(1,-1)*SCALE(2/3)*SHIFT(1,0)
160 END IF
170 END PICTURE
180 LET alfa=pi/8
190 LET r=1/SQR(3)
200 SET WINDOW -0.5,1.5,-1,1
210 SET POINT STYLE 1
220 DRAW D(1)
230 END


!この例題での、質問ですが、

!0階写像の、親集合を、(0,0)~(1,0)線分として、2分岐の縮小率が異なる場合、

!何れか片方の「写像の領域寸法」が、速めに1画素以下となって、以降は、
!残り1分岐だけでいいようですが、平行移動を含む、縮小写像の場合、
!「写像の位置」の移動が、以降の写像で1画素を越えるケースも、あるので、
!原則として、遅い方に合わせ、以下の様に揃えてよろしいですか?

!140 DRAW D(s*2/3) WITH SCALE(1,-1)*SCALE(r)*ROTATE(alfa)
!150 DRAW D(s*2/3) WITH SHIFT(-1,0)*SCALE(1,-1)*SCALE(2/3)*SHIFT(1,0)


!テスト・プログラム
PICTURE D(s)
IF s<lmt THEN
PLOT POINTS: 0,0
ELSE
DRAW D(s*r1) WITH SCALE(1,-1)*SCALE(r)*ROTATE(alfa)
DRAW D(s*r2) WITH SHIFT(-1,0)*SCALE(1,-1)*SCALE(2/3)*SHIFT(1,0)
END IF
END PICTURE

SET POINT STYLE 1
LET alfa=pi/8
LET r=1/SQR(3)

LET r1=r
LET r2=r
SET WINDOW -0.15, 1.15, -1.04, 0.26
ASK PIXEL SIZE(0,0;1,0) px,py
LET lmt=1/px
PRINT using"### ### %.####":px,py,lmt
DRAW D(1)

LET r1=r
LET r2=2/3
SET WINDOW -0.15, 1.15, -0.62, 0.68
DRAW D(1)

LET r1=2/3
LET r2=2/3
SET WINDOW -0.15, 1.15, -0.19, 1.11
DRAW D(1)

END

  ご指摘ありがとうございました。 白石 和夫 2007/08/28 09:09:43  ツリーへ

Re: リンク:「BASICで描く自己相似図形」の一部に、ミス・プリントがあります。 返事を書く ノートメニュー
白石 和夫 <fbdfvqwhki> 2007/08/28 09:09:43
ご指摘ありがとうございました。
さっそく,修正しました。

ご質問の件ですが,遅い方に揃える分には問題ないように思います。

   └!より自然な草木に近づくように見えます。 SECOND 2007/08/28 12:11:36  ツリーへ

Re: ご指摘ありがとうございました。 返事を書く ノートメニュー
SECOND <cszcthjjdj> 2007/08/28 12:11:36
!より自然な草木に近づくように見えます。

!縮小率によって、同じ階に揃えない写像の方が、より自然な枝分かれに見えます。
!アンモナイトの場合も、同じ傾向を、見ました。
!数学的には、N階写像に揃っていないので、悩んでいます。


!テスト・プログラム2
PICTURE D(s)
IF s<=lmt THEN
!PLOT POINTS: 0,0
PLOT LINES: 0,0;1,0 !  親集合の全点を、使ってみる。
ELSE
DRAW D(s*r1) WITH SCALE(1,-1)*SCALE(r)*ROTATE(alfa)
DRAW D(s*r2) WITH SHIFT(-1,0)*SCALE(1,-1)*SCALE(2/3)*SHIFT(1,0)
END IF
END PICTURE

SET POINT STYLE 1
LET alfa=pi/8
LET r=1/SQR(3)

LET r1=r
LET r2=r
SET WINDOW -0.15, 1.15, -1.04, 0.26
ASK PIXEL SIZE(0,0;1,0) px,py
LET lmt=0.1 !1/px       階数を、故意に落してみる。
PRINT USING"### ### %.#### → %.####":px,py,1/px,lmt
DRAW D(1)

LET r1=r
LET r2=2/3
SET WINDOW -0.15, 1.15, -0.62, 0.68
DRAW D(1)

LET r1=2/3
LET r2=2/3
SET WINDOW -0.15, 1.15, -0.19, 1.11
DRAW D(1)

END


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