vba seminar banner 
    Home   >>   Quiz   >>  Pteridophyte
"シダ" 
"出力例"
反復関数系を使ってアトラクターを生成するカオスゲームプログラムを作成しろ。(シダVer.)

10000 個のxとyのデータを生成して、散布図を描く。

pteridophyte01
"サンプルマクロ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