The Sierpinski triangle (also with the original orthography SierpiĆski), also called the Sierpinski gasket or the Sierpinski Sieve, is a fractal and attractive fixed set with the overall shape of an equilateral triangle, subdivided recursively into smaller equilateral triangles.
Public Class Form1
'We have used the following rules
' -1 = turn right by angle
' +1 = turn left by angle
' 2 = 'a'
' 3 = 'b'
'Therefore te rules are represented like this
' 2 --> 3 -1 2 1 3
' 3 --> 2 +1 3 +1 2
'Start Symbol : a
'
Dim angle As Double
Dim size_of_triangle As Integer
Dim no_of_iter As Integer
Dim t As Integer
Dim lst As List(Of Integer) = New List(Of Integer)
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
numIter.Value = 7
numSize.Value = 4
numAngle.Value = 60
End Sub
Private Sub Form1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint
Dim drawingPt As Point = New Point(250, Me.ClientSize.Height - 5)
Dim D As Double = 0
Dim P1 As Point
For Each i As Integer In lst
Select Case i
Case -1
D -= angle
Case 1
D += angle
Case 2, 3
P1 = getNewPoint(drawingPt, D)
e.Graphics.DrawLine(Pens.Tomato, drawingPt, P1)
drawingPt = P1
End Select
Next
End Sub
Private Function getNewPoint(ByVal p0 As Point, ByVal d As Double) As Point
Dim p1 As Point
p1.X = p0.X + Math.Cos(d) * size_of_triangle
p1.Y = p0.Y + Math.Sin(d) * size_of_triangle
Return p1
End Function
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Label4.Visible = True
Me.TransparencyKey = Color.Beige
angle = (numAngle.Value) * Math.PI / 180
size_of_triangle = numSize.Value
no_of_iter = numIter.Value
t = 1
If (no_of_iter Mod 2) = 1 Then t = -1
lst = New List(Of Integer)
lst.Add(2)
For i As Integer = 0 To no_of_iter
lst = Expand(lst)
Next i
Me.Invalidate()
End Sub
Private Function Expand(ByVal lst As List(Of Integer)) As List(Of Integer)
Dim lst1 As List(Of Integer) = New List(Of Integer)
For Each i As Integer In lst
Select Case i
Case -1, 1
lst1.Add(i)
Case 2
' 2 --> 3 -1 2 -1 3
lst1.Add(3)
lst1.Add(-1 * t)
lst1.Add(2)
lst1.Add(-1 * t)
lst1.Add(3)
Case 3
' 3 --> 2 +1 3 +1 2
lst1.Add(2)
lst1.Add(1 * t)
lst1.Add(3)
lst1.Add(1 * t)
lst1.Add(2)
End Select
Next
Return lst1
End Function
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
Application.Exit()
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
Label4.Visible = False
Me.TransparencyKey = Color.Black
End Sub
End Class
Related articles








0 comments :
Post a Comment