Draw strange attractors (fractals)

Started by nandagopal, Sep 01, 2008, 11:37 AM

Previous topic - Next topic

nandagopal



If you plot a sequence of point (x1, y1), (x1, y2), ..., the points can settle into one of several patterns. For example, they can enter a repeating cycle, tend towards infinity, or look chaotic. Another option is following a strange attractor. In that case, the points clearly follow some pattern but not an obvious repeating cycle.

This example plots points given by the equations:

    X' = A0 + A1 * x + A2 * x * x + A3 * x * y + A4 * y + A5 * y * y
    Y' = A6 + A7 * x + A8 * x * x + A9 * x * y + A10 * y + A11 * y * y

For various values of A1, A2, ... A11.

The program uses a Timer to plot points. The following code shows the Tick event handler that draws the curve. It plots 1,000 points at a time to improve performance and reduce flicker. For each iteration, the routine generates the next (X, Y) point and draws it on the Bitmap named m_Bitmap. After it has finished its 1,000 points, it draws the Bitmap onto the picCanvas control so you can see the result.


Private X As Double
Private Y As Double

Private Sub tmrDrawPoint_Timer()
Dim i As Integer
Dim new_x As Double
Dim new_y As Double
Dim pix_x As Integer
Dim pix_y As Integer

    For i = 1 To 100
        new_x = A(0) + A(1) * X + A(2) * X * X + A(3) * X * _
             Y + A(4) * Y + A(5)
* Y * Y
        new_y = A(6) + A(7) * X + A(8) * X * X + A(9) * X * _
             Y + A(10) * Y +
A(11) * Y * Y
        X = new_x
        Y = new_y

        pix_x = (X - m_Wxmin) / m_Wwid * m_Wid
        pix_y = m_Hgt - (Y - m_Wymin) / m_Whgt * m_Hgt - 1
        If (pix_x >= 0) And (pix_x < m_Wid) And _
           (pix_y >= 0) And (pix_y < m_Hgt) _
        Then
            picCanvas.PSet (pix_x, pix_y), vbBlue
        End If
    Next i
End Sub