"シダ"
"出力例"
反復関数系を使ってアトラクターを生成するカオスゲームプログラムを作成しろ。(シダVer.)
10000 個のxとyのデータを生成して、散布図を描く。
10000 個のxとyのデータを生成して、散布図を描く。
"サンプルマクロ01"
"ヒント・解説01"
Public Sub Pteridophyte01() Dim i As Long Dim w1 As Worksheet Dim x As Double, y As Double, xn As Double, yn As Double, k As Double Set w1 = Worksheets(1) Const n As Long = 10000 'データ数 x = 0: y = 0 '初期値 w1.Cells(1, 1) = x: w1.Cells(1, 2) = y For i = 1 To n 'データ生成 Randomize: k = Rnd() If k <= 0.01 Then xn = 0 yn = 0.16 * y ElseIf k <= 0.08 Then xn = 0.2 * x - 0.26 * y yn = 0.23 * x + 0.22 * y + 1.6 ElseIf k <= 0.15 Then xn = -0.15 * x + 0.28 * y yn = 0.26 * x + 0.24 * y + 0.44 Else xn = 0.85 * x + 0.04 * y yn = -0.04 * x + 0.85 * y + 1.6 End If w1.Cells(i + 1, 1) = xn w1.Cells(i + 1, 2) = yn x = xn: y = yn Next i With Charts.Add 'グラフ作成 .ChartType = xlXYScatter .SetSourceData Source:=w1.Range(w1.Cells(1, 1), w1.Cells(n, 2)) .HasLegend = False .PlotArea.Interior.ColorIndex = xlNone With .SeriesCollection(1) 'マーカー変更 .Smooth = False .MarkerSize = 2 .MarkerStyle = xlMarkerStyleCircle .MarkerBackgroundColorIndex = 43 .MarkerForegroundColorIndex = 43 End With End With Set w1 = Nothing 'オブジェクトの解放 End Sub
反復関数系を用いてシダ状の画像を計算する
初期値 :
x0=0 , y0=0
座標変換1 (1%の割合で実行する) :
xn+1=0 , yn+1=0.16yn
座標変換2 (7%の割合で実行する) :
xn+1=0.2xn-0.26yn , yn+1=0.23xn+0.22yn +1.6
座標変換3 (7%の割合で実行する) :
xn+1=-0.15xn+0.28yn , yn+1=0.26xn+0.24yn +0.44
座標変換4 (85%の割合で実行する) :
xn+1=0.85xn+0.04yn , yn+1=-0.04xn+0.85yn +1.6
初期値 :
x0=0 , y0=0
座標変換1 (1%の割合で実行する) :
xn+1=0 , yn+1=0.16yn
座標変換2 (7%の割合で実行する) :
xn+1=0.2xn-0.26yn , yn+1=0.23xn+0.22yn +1.6
座標変換3 (7%の割合で実行する) :
xn+1=-0.15xn+0.28yn , yn+1=0.26xn+0.24yn +0.44
座標変換4 (85%の割合で実行する) :
xn+1=0.85xn+0.04yn , yn+1=-0.04xn+0.85yn +1.6