"アンモナイト"
"出力例"
反復関数系を使ってアトラクターを生成するカオスゲームプログラムを作成しろ(アンモナイトVer.)
10000 個のxとyのデータを生成して、散布図を描く。
10000 個のxとyのデータを生成して、散布図を描く。
"サンプルマクロ01"
"ヒント・解説01"
Public Sub Ammonite01() 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.06 Then xn = -0.29 * x + 0.59 yn = -0.2 * y - 0.32 ElseIf k >= 0.06 And k < 0.06 + 0.02 Then xn = -0.07 * x - 0.02 * y + 0.79 yn = -0.01 * x + 0.29 * y - 0.06 Else xn = 0.94 * x - 0.22 * y - 0.05 yn = 0.21 * x + 0.96 * y + 0.01 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 = 9 .MarkerForegroundColorIndex = 9 End With End With Set w1 = Nothing 'オブジェクトの解放 End Sub
反復関数系を用いてアンモナイト状の画像を計算する
初期値 :
x0=0, y0=0
座標変換1 (6%の確率で実行する) :
xn+1=-0.29xn+0.59 , yn+1=0.2yn -0.32
座標変換2 (2%の確率で実行する) :
xn+1=-0.07xn-0.02yn+0.79 , yn+1=-0.01xn+0.29yn -0.06
座標変換3 (92%の確率で実行する) :
xn+1=0.94xn-0.22yn-0.05 , yn+1=0.21xn+0.96yn +0.01
初期値 :
x0=0, y0=0
座標変換1 (6%の確率で実行する) :
xn+1=-0.29xn+0.59 , yn+1=0.2yn -0.32
座標変換2 (2%の確率で実行する) :
xn+1=-0.07xn-0.02yn+0.79 , yn+1=-0.01xn+0.29yn -0.06
座標変換3 (92%の確率で実行する) :
xn+1=0.94xn-0.22yn-0.05 , yn+1=0.21xn+0.96yn +0.01