フラクタル図形


マンデルブロート集合を描いてみました。

マンデルブロート集合の描画プログラムと色相を記述します。



 プログラムは簡単に描画するため「Visual Studio」で「Visual Basic」を使用しました。 各プログラムは、基本的に同じですが、それぞれの色相を変化させるために各プログラムを 少し変化させています。
 色付けには、繰返し回数を使用しています。



  色相1のプログラム


1.プログラム。
 kは、繰返しの計算回数です。i, jは縦横の位置です。

Public Class Form1
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        REM マンデルブロート1, 2016/12/06
        Dim xmin, xmax, ymin, ymax As Double
        Dim cr, ci, dx, dy, zr, zi, wr, wi As Double
        Dim i, j, k, r, g, b As Integer
        Dim gr As Graphics = PictureBox1.CreateGraphics
        Dim w As Integer = PictureBox1.ClientRectangle.Width
        Dim h As Integer = PictureBox1.ClientRectangle.Height

        gr.Clear(PictureBox1.BackColor)
        xmin = Val(TextBox1.Text)
        xmax = Val(TextBox2.Text)
        ymin = Val(TextBox3.Text)
        ymax = Val(TextBox4.Text)

        dx = (xmax - xmin) / w
        dy = (ymax - ymin) / h

        For i = 0 To h - 1
            For j = 0 To w - 1
                cr = xmin + j * dx
                ci = ymin + i * dy
                zr = 0
                zi = 0

                For k = 0 To 600
                    wr = zr * zr - zi * zi + cr
                    wi = 2 * zr * zi + ci
                    If (wr * wr + wi * wi > 4) Then Exit For
                    zr = wr : zi = wi
                Next

                If (k Mod 3) = 0 Then
                    r = 255 : g = 0 : b = 0
                Else
                    r = k : g = k + 64 : b = k + 128
                End If


                gr.DrawRectangle(New Pen(ColorTranslator.FromOle(RGB(r, g, b))), j, i, 1, 1)
            Next
        Next
    End Sub

    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
        End
    End Sub
End Class					
						

2.描画結果です。




  色相2のプログラム


1.プログラム。

Public Class Form1
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        REM マンデルブロート2, 2016/12/06

        Dim Res, Ree, Ims, Ime As Double
        Dim Re, Im As Double
        Dim dr, di, zr, zi As Double
        Dim cr, ci As Double
        Dim i, j, c, k As Integer

        Dim g As Graphics = PictureBox1.CreateGraphics
        Dim mybrush As New SolidBrush(Color.Black)
        Dim wi As Integer = PictureBox1.ClientRectangle.Width
        Dim he As Integer = PictureBox1.ClientRectangle.Height

        g.Clear(PictureBox1.BackColor)
        Res = Val(TextBox1.Text)
        Ree = Val(TextBox2.Text)
        Ims = Val(TextBox3.Text)
        Ime = Val(TextBox4.Text)

        dr = (Ree - Res) / wi
        di = (Ime - Ims) / he

        For i = 0 To he - 1
            For j = 0 To wi - 1
                cr = Res + j * dr
                ci = Ims + i * di
                zr = 0
                zi = 0

                For k = 0 To 600
                    Re = zr * zr - zi * zi + cr
                    Im = 2 * zr * zi + ci
                    If (Re * Re + Im * Im > 4) Then Exit For
                    zr = Re : zi = Im
                Next
                c = k Mod 7
                Select Case c
                    Case 0
                        mybrush.Color = Color.Yellow
                    Case 1
                        mybrush.Color = Color.Magenta
                    Case 2
                        mybrush.Color = Color.Red
                    Case 3
                        mybrush.Color = Color.Lime
                    Case 4
                        mybrush.Color = Color.Pink
                    Case 5
                        mybrush.Color = Color.Gold
                    Case 6
                        mybrush.Color = Color.Black

                End Select
                g.FillRectangle(mybrush, j, i, 1, 1)
            Next
        Next
    End Sub
End Class
						

2.描画結果です。




  色相3のプログラム


1.プログラム。

Public Class Form1
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        REM マンデルブロート2, 2016/12/06

        Dim Res, Ree, Ims, Ime As Double
        Dim Re, Im As Double
        Dim dr, di, zr, zi As Double
        Dim cr, ci As Double
        Dim i, j, c, k, r, g, b, d As Integer

        Dim gr As Graphics = PictureBox1.CreateGraphics
        Dim mybrush As New SolidBrush(Color.Black)
        Dim wi As Integer = PictureBox1.ClientRectangle.Width
        Dim he As Integer = PictureBox1.ClientRectangle.Height

        gr.Clear(PictureBox1.BackColor)
        Res = Val(TextBox1.Text)
        Ree = Val(TextBox2.Text)
        Ims = Val(TextBox3.Text)
        Ime = Val(TextBox4.Text)

        dr = (Ree - Res) / wi
        di = (Ime - Ims) / he

        For i = 0 To he - 1
            For j = 0 To wi - 1
                cr = Res + j * dr
                ci = Ims + i * di
                zr = 0
                zi = 0

                For k = 0 To 1023
                    Re = zr * zr - zi * zi + cr
                    Im = 2 * zr * zi + ci
                    If (Re * Re + Im * Im > 4) Then Exit For
                    zr = Re : zi = Im
                Next

                d = (k Mod 64) * 4
                If d <= 0 Then
                    r = 0 : g = 0 : b = 0
                Else
                    c = Int(d / 43)
                    Select Case c
                        Case 0
                            r = 255 : g = d * 5 : b = 0
                        Case 1
                            r = (88 - d) * 5 : g = 255 : b = 0
                        Case 2
                            r = 0 : g = 255 : b = (d - 86) * 5
                        Case 3
                            r = 0 : g = (172 - d) * 5 : b = 255
                        Case 4
                            r = (d - 172) * 5 : g = 0 : b = 255
                        Case 5
                            r = 255 : g = 0 : b = (255 - d) * 5
                    End Select

                End If

                gr.DrawRectangle(New Pen(ColorTranslator.FromOle(RGB(r, g, b))), j, i, 1, 1)
            Next
        Next
    End Sub

    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
        End
    End Sub

End Class
						

2.描画結果です。




  色相4のプログラム


1.プログラム。

Public Class Form1
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        REM マンデルブロート2, 2016/12/06

        Dim Res, Ree, Ims, Ime As Double
        Dim Re, Im As Double
        Dim dr, di, zr, zi As Double
        Dim cr, ci As Double
        Dim i, j, c, k, r, g, b, d As Integer

        Dim gr As Graphics = PictureBox1.CreateGraphics
        Dim mybrush As New SolidBrush(Color.Black)
        Dim wi As Integer = PictureBox1.ClientRectangle.Width
        Dim he As Integer = PictureBox1.ClientRectangle.Height

        gr.Clear(PictureBox1.BackColor)
        Res = Val(TextBox1.Text)
        Ree = Val(TextBox2.Text)
        Ims = Val(TextBox3.Text)
        Ime = Val(TextBox4.Text)

        dr = (Ree - Res) / wi
        di = (Ime - Ims) / he

        For i = 0 To he - 1
            For j = 0 To wi - 1
                cr = Res + j * dr
                ci = Ims + i * di
                zr = 0
                zi = 0

                For k = 0 To 1023
                    Re = zr * zr - zi * zi + cr
                    Im = 2 * zr * zi + ci
                    If (Re * Re + Im * Im > 4) Then Exit For
                    zr = Re : zi = Im
                Next

                d = (k Mod 32) * 8
                c = Int(d / 42.667)

                Select Case c
                        Case 0
                        r = 0 : g = d * 6 : b = 255
                    Case 1
                        r = 0 : g = 255 : b = 255 - 6 * (d - 43)
                    Case 2
                        r = 6 * (d - 86) : g = 255 : b = 0
                    Case 3
                        r = 255 : g = 255 - 6 * (d - 129) : b = 0
                    Case 4
                        r = 255 : g = 0 : b = 6 * (d - 171)
                    Case 5
                        r = 255 - 6 * (d - 214) : g = 0 : b = 255
                    Case Else
                        r = 0 : g = 0 : b = 0
                End Select

                gr.DrawRectangle(New Pen(ColorTranslator.FromOle(RGB(r, g, b))), j, i, 1, 1)
            Next
        Next
    End Sub

    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
        End
    End Sub
End Class
						

2.描画結果です。




  色相5のプログラム


1.プログラム。

Public Class Form1
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        REM マンデルブロート2, 2016/12/06

        Dim Res, Ree, Ims, Ime As Double
        Dim Re, Im As Double
        Dim dr, di, zr, zi As Double
        Dim cr, ci As Double
        Dim i, j, c, k As Integer

        Dim g As Graphics = PictureBox1.CreateGraphics
        Dim mybrush As New SolidBrush(Color.Black)
        Dim wi As Integer = PictureBox1.ClientRectangle.Width
        Dim he As Integer = PictureBox1.ClientRectangle.Height

        g.Clear(PictureBox1.BackColor)
        Res = Val(TextBox1.Text)
        Ree = Val(TextBox2.Text)
        Ims = Val(TextBox3.Text)
        Ime = Val(TextBox4.Text)

        dr = (Ree - Res) / wi
        di = (Ime - Ims) / he

        For i = 0 To he - 1
            For j = 0 To wi - 1
                cr = Res + j * dr
                ci = Ims + i * di
                zr = 0
                zi = 0

                For k = 0 To 600
                    Re = zr * zr - zi * zi + cr
                    Im = 2 * zr * zi + ci
                    If (Re * Re + Im * Im > 4) Then Exit For
                    zr = Re : zi = Im
                Next
                c = k Mod 7
                Select Case c
                    Case 0
                        mybrush.Color = Color.DeepPink
                    Case 1
                        mybrush.Color = Color.Magenta
                    Case 2
                        mybrush.Color = Color.HotPink
                    Case 3
                        mybrush.Color = Color.LightPink
                    Case 4
                        mybrush.Color = Color.Pink
                    Case 5
                        mybrush.Color = Color.PeachPuff
                    Case 6
                        mybrush.Color = Color.Red

                End Select
                g.FillRectangle(mybrush, j, i, 1, 1)
            Next
        Next
    End Sub


End Class

						

2.描画結果です。