Public Class Form1
    Private Const NMAX = 30                        '最大角数(30角形)
    Private Const NMIN = 20                        '最小角数(20角形)
    Private img As New Bitmap(300, 300)            '描画用ビットマップ
    Private X(NMAX) As Integer, Y(NMAX) As Integer '頂点座標
    Private R As Double = 100                      '半径
    Private X0 As Double = 150, Y0 As Double = 150 '中心座標
    Private N As Integer                           '実行中角数
    Private dN As Integer = 1                      '角数の増分値
    Private PC(8) As Pen                           '描画用Pen
    Private Sub initData()
        PC(0) = New Pen(Color.FromArgb(&HFF, &H0, &H0))
        PC(1) = New Pen(Color.FromArgb(&HFF, &H77, &H0))
        PC(2) = New Pen(Color.FromArgb(&H77, &H77, &H0))
        PC(3) = New Pen(Color.FromArgb(&H0, &H90, &H0))
        PC(4) = New Pen(Color.FromArgb(&H0, &H77, &H0))
        PC(5) = New Pen(Color.FromArgb(&H0, &H77, &H77))
        PC(6) = New Pen(Color.FromArgb(&H0, &H0, &HFF))
        PC(7) = New Pen(Color.FromArgb(&H77, &H0, &HFF))
        PC(8) = New Pen(Color.FromArgb(&HFF, &H0, &HFF))
    End Sub
    Private Sub drawDiamond()
        Dim g As Graphics = Graphics.FromImage(img) : g.Clear(Color.Black) '描画クリア
        Dim dTH As Double = 2 * Math.PI / N, TH As Double = 0
        For i = 0 To N
            X(i) = X0 + R * Math.Cos(TH) + 0.5
            Y(i) = Y0 + R * Math.Sin(TH) + 0.5
            TH = TH + dTH
        Next
        For i = 1 To N
            For j = 0 To i - 1
                'g.DrawLine(PC((i + j) Mod 9), X(j), Y(j), X(i), Y(i))
                g.DrawLine(PC(j Mod 9), X(j), Y(j), X(i), Y(i))
                'g.DrawLine(PC(i Mod 9), X(j), Y(j), X(i), Y(i))
            Next
        Next
        PictureBox1.Image = img : g.Dispose()
    End Sub
    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
        N = NMIN : dN = 1
        Timer1.Enabled = True
    End Sub
    Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
        initData() : N = NMIN
    End Sub
    Private Sub singleExe()
        drawDiamond()
        Label1.Text = "分割数 " & N
        If N >= NMAX Then dN = -1
        If N <= NMIN Then dN = 1
        N = N + dN
    End Sub
    Private Sub Timer1_Tick(sender As System.Object, e As System.EventArgs) Handles Timer1.Tick
        singleExe()
    End Sub
    Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click
        Timer1.Enabled = False
    End Sub
    Private Sub Button3_Click(sender As System.Object, e As System.EventArgs) Handles Button3.Click
        singleExe()
    End Sub
End Class