' This program exported from BASIC Anywhere Machine (Version [5.2.3].[2024.09.09.00.00]) on 2026.01.01 at 21:45 (Coordinated Universal Time)
' This program by Charlie Veniot is a port and mod of a QB64 program by
' Kurt Moerman, shared with the "BASIC Programming Language" Facebook group
' (https://www.facebook.com/share/p/1BnaiB8Q67/)

_TITLE "Julia Fractal"
'       -−-−-−-−-−-−-

' z_new = z^2 + c  z and c are complex numbers
' z = zr + zi*j  zr and zc depend on coordinates inside image
' c = cr + ci*j  cr and ci remain constant
' z^2 = (zr+zi*j)^2 = zr^2 + 2*zr*zi*j - zi^2 = zr^2 - zi^2  + 2*zr*zi*j
' z^2 + c = (zr^2 - zi^2 + cr)  + (2*zr*zi + ci)*j ' real and imaginary part

OPTION EXPLICIT

CONST f% = 10  
DIM AS LONG co
DIM AS INTEGER x, y, counter, r, g, b
DIM AS DOUBLE cr, ci, zr, zi, zr_new, Zi_new
DIM rm% = 33, gm% = 129, bm% = 65, _
    rf% = 8,  gf% = 2,   bf% = 4, countermax% = 1024

SCREEN _NEWIMAGE( 160 * f%, 800, 32 )

CLS
cr = -0.5125 ' constant value c
ci = 0.5213

🔶loop_start:
FOR x = 0 TO XMAX - 1
    FOR y = 0 TO YMAX - 1
        zr = x / ( XMAX - 2 ) * 3.0 - 1.5
        zi = y / ( YMAX - 2 ) * 2.0 - 1.0
        counter = 0
        WHILE ( counter < countermax% ) AND ( ( zr ^ 2 + zi ^ 2 ) < 4 )
            zr_new = zr ^ 2 - zi ^ 2 + cr
            zi = 2 * zr * zi + ci
            zr = zr_new
            counter = counter + 1
        WEND
        counter = INT( SQR( counter ) * 8 )
        r = ( counter MOD rm% ) * rf% : IF r > 255 THEN r = 255
        g = ( counter MOD gm% ) * gf% : IF g > 255 THEN g = 255
        b = ( counter MOD bm% ) * bf% : IF b > 255 THEN b = 255
        co = _RGB32( r, g, b )
        PSET( x, y ), co
    NEXT y
    IF x MOD f% = 0 THEN SLEEP 0.001
NEXT x
SLEEP 5
rm% = RND * 255
gm% = RND * 255
bm% = RND * 255
rf% = RND * 11
gf% = RND * 11
bf% = RND * 11
countermax% = 1500 ' RND * 5000 + 90
GOTO 🔶loop_start