54 lines
1.2 KiB
Text
54 lines
1.2 KiB
Text
' version 10-10-2016
|
|
' compile with: fbc -s console
|
|
|
|
Sub barnsley(height As UInteger)
|
|
|
|
Dim As Double x, y, xn, yn
|
|
Dim As Double f = height / 10.6
|
|
Dim As UInteger offset_x = height \ 4 - height \ 40
|
|
Dim As UInteger n, r
|
|
|
|
ScreenRes height \ 2, height, 32
|
|
|
|
For n = 1 To height * 50
|
|
|
|
r = Int(Rnd * 100) ' f from 0 to 99
|
|
|
|
Select Case As Const r
|
|
Case 0 To 84
|
|
xn = 0.85 * x + 0.04 * y
|
|
yn = -0.04 * x + 0.85 * y + 1.6
|
|
Case 85 To 91
|
|
xn = 0.2 * x - 0.26 * y
|
|
yn = 0.23 * x + 0.22 * y + 1.6
|
|
Case 92 To 98
|
|
xn = -0.15 * x + 0.28 * y
|
|
yn = 0.26 * x + 0.24 * y + 0.44
|
|
Case Else
|
|
xn = 0
|
|
yn = 0.16 * y
|
|
End Select
|
|
|
|
x = xn : y = yn
|
|
PSet( offset_x + x * f, height - y * f), RGB(0, 255, 0)
|
|
|
|
Next
|
|
' remove comment (') in next line to save window as .bmp file
|
|
' BSave "barnsley_fern_" + Str(height) + ".bmp", 0
|
|
|
|
End Sub
|
|
|
|
|
|
' ------=< MAIN >=------
|
|
|
|
' adjustable window height
|
|
' call the subroutine with the height you want
|
|
' it's possible to have a window that's large than your display
|
|
barnsley(800)
|
|
|
|
|
|
' empty keyboard buffer
|
|
While Inkey <> "" : Wend
|
|
Windowtitle "hit any key to end program"
|
|
Sleep
|
|
End
|