Public Class Form1 Public Const Pi = 3.14159265358979 Public Structure 位置データ Public X As Double Public Y As Double Public 角度 As Double End Structure Private 現在位置 As 位置データ ' 現在位置 Private 色 As Color ' 表示色 Private MaxAng As Double ' 最大角度 Private MaxDsp As Double Private Function 色設定(設定種類 As Integer, ID As Integer) As Color Select Case 設定種類 Case 1 : 色設定 = 色設定1(ID) Case 2 : 色設定 = 色設定2(ID) Case Else : 色設定 = 色設定3(ID) End Select End Function Private Function 色設定1(ID As Integer) As Color ' 色設定方法を以下の3種類用意する If ID > 60 Then 色設定1 = Color.FromArgb(8 * (ID - 60), 8 * (ID - 60), 4 * (ID - 60) + 125) ElseIf ID > 30 Then 色設定1 = Color.FromArgb(8 * (60 - ID), 0, 0) Else 色設定1 = Color.FromArgb(0, 8 * (30 - ID), 8 * (30 - ID)) End If End Function Private Function 色設定2(ID As Integer) As Color If ID > 60 Then 色設定2 = Color.FromArgb(8 * (ID - 60), 4 * (ID - 60) + 125, 8 * (ID - 60)) ElseIf ID > 30 Then 色設定2 = Color.FromArgb(8 * (60 - ID), 4 * (ID - 60) + 125, 0) Else 色設定2 = Color.FromArgb(8 * ID, 8 * (30 - ID), 8 * (30 - ID)) End If End Function Private Function 色設定3(ID As Integer) As Color If ID > 60 Then 色設定3 = Color.FromArgb(8 * (ID - 60), 4 * (ID - 60) + 125, 8 * (ID - 60)) ElseIf ID > 30 Then 色設定3 = Color.FromArgb(8 * (60 - ID), 4 * (ID - 60) + 125, 0) Else 色設定3 = Color.FromArgb(8 * ID, 8 * (30 - ID), 0) End If End Function Private Sub 初期位置(X As Double, Y As Double, TH As Double) 現在位置.X = X : 現在位置.Y = Y : 現在位置.角度 = TH End Sub Private Sub 方向変更(TH As Double) 現在位置.角度 = 現在位置.角度 + TH End Sub Private Sub 進む(長さ As Double) Dim TH As Double, X As Single, Y As Double Dim X1 As Integer, Y1 As Integer, X2 As Integer, Y2 As Integer Dim g As Graphics = PictureBox1.CreateGraphics() Dim p As Pen = New Pen(色) With 現在位置 TH = .角度 * Pi / 180 X = .X + 長さ * Math.Cos(TH) : Y = .Y + 長さ * Math.Sin(TH) X1 = .X + 10 : Y1 = 200 - .Y : X2 = X + 10 : Y2 = 200 - Y g.DrawLine(New Pen(色), X1, Y1, X2, Y2) .X = X : .Y = Y End With End Sub Private Sub 拡張コッホ曲線(N As Integer, TH As Double, 長さ As Double) ' 第1編で示したように Dim nn As Integer, R1 As Double, R2 As Double, L As Double If (N <= 0) Then ' 角度で描画方法を変える 進む(長さ) Else ' 方向・長さを固定 nn = N - 1 : L = 長さ / 3 If TH <= MaxAng Then R1 = L / (2 * Math.Cos(TH * Pi / 180)) : R2 = 0 Else R1 = L : R2 = L * (1 - 2 * Math.Cos(TH * Pi / 180)) End If 拡張コッホ曲線(nn, TH, L) : 方向変更(TH) 拡張コッホ曲線(nn, TH, R1) : 方向変更(-TH) If R2 > 0 Then 拡張コッホ曲線(nn, TH, R2) 方向変更(-TH) 拡張コッホ曲線(nn, TH, R1) : 方向変更(TH) 拡張コッホ曲線(nn, TH, L) End If End Sub Private Sub 描画(設定種類 As Integer) Dim g As Graphics = PictureBox1.CreateGraphics() Dim i As Integer g.Clear(Color.Black) MaxAng = Val(TextBox1.Text) : MaxDsp = Val(TextBox2.Text) For i = MaxDsp To 0 Step -1 初期位置(0, 0, 0) : 色 = 色設定(設定種類, i) 拡張コッホ曲線(7, i, 300) Next 初期位置(0, 0, 0) : 色 = Color.FromArgb(255, 255, 0) 拡張コッホ曲線(7, 60, 300) End Sub Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click 描画(1) End Sub Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click 描画(2) End Sub Private Sub Button3_Click(sender As System.Object, e As System.EventArgs) Handles Button3.Click 描画(3) End Sub End Class