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