Mandelbrot Fractal Graphics (BCX basic)

vegaseat 1 Tallied Votes 165 Views Share

A simple experiment with the ever so popular Mandelbrot fractal graphics, call it mathematical art, nice to look at. This set of experiments loops through a number of colors to make the whole thing more exciting.

' experiments with Mandelbrot sets (math induced graphics)
' needs BCX basic, download free package from:
' http://www.rjpcomputing.com/programming/bcx/devsuite.html
' tested with BCX basic and Pelles C   vegaseat    01aug2005

' generates WinMain() and sets the Classname
GUI "mandelbrot2"

CONST Yellow = RGB(255,255,0)
CONST SeaGreen = RGB(60,179,113)
CONST Aqua = RGB(0,255,255)
CONST Blue = RGB(0,0,255)
CONST Orange = RGB(255,165,0)
CONST Red = RGB(255,0,0)
CONST Green = RGB(0,255,0)

GLOBAL Form1 AS CONTROL
GLOBAL Farbe AS INTEGER

Farbe = Yellow  ' start with this color

' create the form, center it, show it
SUB FORMLOAD
  Form1 = BCX_FORM("Mandelbrot Sets")
  BCX_SET_FORM_COLOR(Form1, 0)

  CENTER(Form1)
  SHOW(Form1)
END SUB

' code between BEGIN EVENTS/END EVENTS takes care of the event messages
BEGIN EVENTS
  SELECT CASE CBMSG
    CASE WM_CREATE
      ' 3500 miliseconds for each color
      IF NOT SetTimer(hWnd, 1, 3500, 0)  THEN
        MessageBox (hWnd, "timer error", "error", MB_OK)
        PostQuitMessage (0)
      END IF
    CASE WM_PAINT
      DIM RAW ps  AS PAINTSTRUCT
      DIM RAW hdc AS HDC
      hdc = BeginPaint (hWnd, &ps)
      DrawMandelbrot(hdc)
      DeleteDC (hdc)
      EndPaint (hWnd, &ps)
    CASE WM_TIMER
      SELECT CASE Farbe
        CASE Yellow
          Farbe = SeaGreen ' go from yellow to seagreen
        CASE SeaGreen
          Farbe = Aqua     ' from seagreen to aqua
        CASE Aqua
          Farbe = Orange   ' etc
        CASE Orange
          Farbe = Green    ' etc
        CASE Green
        Farbe = Blue
        CASE Blue
          Farbe = Red
        CASE Red
          Farbe = Yellow   ' back to yellow again
        CASE ELSE
          Farbe = Yellow   ' default Farbe
      END SELECT
    InvalidateRect(Form1,0,1)
  END SELECT
END EVENTS


SUB DrawMandelbrot (hdc AS HDC)
  DIM RAW Count AS INTEGER
  DIM RAW A AS SINGLE, B AS SINGLE, C AS SINGLE
  DIM RAW I AS SINGLE, R AS SINGLE

  FOR I = -1.3 TO 1.3 STEP .01
    DOEVENTS   ' process external events
    FOR R = -2.0 TO 1 STEP .01
      A = B = C = Count = 0
      WHILE ABS(A) <= 2 AND ABS(B) <= 2 AND Count < 128
        C = A*A - B*B + R
        B = 2*A*B + I
        A = C
        INCR Count
      WEND
      SetPixel (hdc, 280 + R*100, 140 + I*100, Count*Farbe)
    NEXT
  NEXT
  UpdateWindow(Form1)
END SUB
bumsfeld 413 Nearly a Posting Virtuoso

I do not know anything of BCX, but you make it read interesting.

Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.