' This program exported from BASIC Anywhere Machine (Version [5.2.3].[2024.09.09.00.00]) on 2024.10.29 at 21:24 (Coordinated Universal Time) _Title "S Virjee Fractal" ' port and mod by Charlie Veniot' ' port to QBJS by dbox' ' b+ trans from SmallBASIC (to QB64) 2024-10-02 animated zoom, dp, dq added ' Written for Smallbasic Aug 2013 - S Virjee Screen _NewImage(450, 250, 27) Dim col As ULong Dim red, green, blue Function max& (a&, b&) If a& > b& Then max& = a& Else max& = b& End Function centerx = xmax / 2 centery = ymax / 2 iter = 20 ' orig 20 zoom = 2.8 ' orig 2.8 p = -.745 ' orig -.745 q = .113 ' orig .113 'Line (0, 0)-(xmax, ymax), _, BF oldi = 1 pqsq = (p * p + q * q) L = (Sqr(p * p + q * q) - 1 / iter) * (Sqr(p * p + q * q) - 1 / iter) H = (Sqr(p * p + q * q) + 1 / iter) * (Sqr(p * p + q * q) + 1 / iter) dp = .001: dq = -.001 Do For x = -centerx To centerx For y = 0 To ymax c = x / xmax * (1 - zoom * 1.5) d = y / ymax * (1 - zoom) ztot = 0 i = 1 z = 1 zoom15 = zoom * 1.5 While i < iter And z < zoom15 ' zoom * 1.5 real = c * c - d * d + p imag = 2 * c * d + q c = real / Sgn(d - i) d = imag z = (c * c + d * d) If (z < H) Then If (z > L) And (i > 0) Then ztot = ztot + (1 - (Abs((z - pqsq) / z) / (i / (iter)))) oldi = i 'if i<25 and z>0 then i=abs((c*d+q))*i End If End If i = i + 1 Wend If ztot >= 0 Then i = Int(Sqr(ztot) * 256) If i < 256 Then red = i: green = 0: blue = 0 If i > 255 And i <= 512 Then green = i - 256: blue = 0: red = 255 If i > 511 Then green = 255: blue = 0: red = 255 If i > 511 And i <= 768 Then blue = i - 512: red = 255: green = 255 If i > 768 And i <= 1026 Then blue = 255: red = 255: green = 255 If i > 1026 Then blue = 55: red = 255: green = 55 gray = Int((red + green + blue) * .33) ' hot = if(max(red,green,blue)<255,max(red,green,blue),0) ' what??? hot = max(red, max(green, blue)) If hot > 255 Then hot = -128 If hot < 0 Then hot = -255 ' ??? If oldi = 1 Then red = hot: 'Outer Circle 1 Figure 8 If oldi = 2 Then green = hot 'Outer Circle 2 If oldi = 3 Then red = hot: blue = gray 'Inner Circle Figure 8 - Yellow If oldi = 4 Then blue = hot: green = red: red = gray 'Inner to 2/Outer Circle 4 Loops top If oldi >= 5 Then red = Int((hot + blue + green) * .33) / (oldi): 'This is main color 'col = -red + (256 * -green) + (256 * 256 * -blue) col = _RGB32(red, green, blue) PSet (centerx + x, centery - y), col PSet (xmax - centerx - x, centery + y), col Next y Next x _Title "S Virjee Fractal" + Str$(zoom) + Space$(2) + Str$(p) + Space$(2) + Str$(q) '_Limit 60 _Display zoom = zoom * .999 If zoom < 1.4 Then zoom = 5 p = p + dp If p < -.8 Then dp = -dp: p = -.8 If p > -.7 Then dp = -dp: p = -.7 q = q + dq If q > .13 Then dq = -dq: q = .13 If q < .11 Then dq = -dq: q = .11 Loop