Home
Search
 
What's New
Index
Books
Links
Q & A
Newsletter
Banners
 
Feedback
Tip Jar
 
C# Helper...
 
XML RSS Feed
Follow VBHelper on Twitter Follow VBHelper on Twitter
 
 
 
MSDN Visual Basic Community
 
 
 
 
 
TitleDraw a Sierpinski fractal curve in Visual Basic .NET
DescriptionThis example shows how to draw a Sierpinski fractal curve in Visual Basic .NET.
Keywordsexample program, Sierpinski curve, space-filling curve, example, Windows Forms programming, fractal, Visual Basic .NET, VB.NET
CategoriesGraphics, Algorithms, Graphics
 

The Sierpinski curve is a space-filling curve that is in some ways similar to the Hilbert curve.

The curve is drawn by 4 functions named SierpA, SierpB, SierpC, and SierpD that draw curves across the top, right, bottom, and left sides of the area being drawn.

Each of the functions calls other functions to do the work. For example, SierpA calls itself to draw a horizontal section, draws a line down and to the right, calls SierpB to draw down, draws a horizontal segment, calls SierpD, draws another segment, and finishes by calling SierpA.

The following code shows the SierpA function. If you check the Refresh checkbox, the function refreshes the image on the screen so you can see the curve as it is drawn.

 
' Draw right across the top.
Private Sub SierpA(ByVal gr As Graphics, ByVal depth As _
    Integer, ByVal dx As Single, ByVal dy As Single, ByRef x _
    As Single, ByRef y As Single)
    If (depth > 0) Then
        depth -= 1

        SierpA(gr, depth, dx, dy, x, y)
        DrawRel(gr, x, y, dx, dy)
        SierpB(gr, depth, dx, dy, x, y)
        DrawRel(gr, x, y, 2 * dx, 0)
        SierpD(gr, depth, dx, dy, x, y)
        DrawRel(gr, x, y, dx, -dy)
        SierpA(gr, depth, dx, dy, x, y)
    End If

    If (m_Refresh) Then picCanvas.Refresh()
End Sub
 

The Sierpinski function shown in the following code puts the pieces together by calling each of the other functions to draw part of the whole curve.

 
' Draw a Sierpinski curve.
Private Sub Sierpinski(ByVal gr As Graphics, ByVal depth As _
    Integer, ByVal dx As Single, ByVal dy As Single)
    Dim x As Single = 2 * dx
    Dim y As Single = dy

    SierpA(gr, depth, dx, dy, x, y)
    DrawRel(gr, x, y, dx, dy)
    SierpB(gr, depth, dx, dy, x, y)
    DrawRel(gr, x, y, -dx, dy)
    SierpC(gr, depth, dx, dy, x, y)
    DrawRel(gr, x, y, -dx, -dy)
    SierpD(gr, depth, dx, dy, x, y)
    DrawRel(gr, x, y, dx, -dy)

    picCanvas.Refresh()
End Sub
 
As a point of interest, note that space-filling curves like this one and the Hilbert curve can give approximate solutions to the Traveling Salesperson Problem (TSP) where the goal is to visit a series of points and return to a starting point while following the shortest possible path. Simply overlay a space-filling curve on the map of the area and visit the points in the order in which the target points are visited by the curve. The result isn't perfect but it's a pretty good start.
 
 
 
 
Copyright © 1997-2010 Rocky Mountain Computer Consulting, Inc.   All rights reserved.
  Updated