Fibonacci numbers and the Golden Spiral.

The sequence "1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610,...." is called the Fibonacci series.

Given "1,1" the next number is produced by adding its two preceding numbers, and repeating as many times as you wish.


    lastButTwo =1
    lastButOne =1

    print right$( space$( 60) +str$( lastButTwo), 46)
    print right$( space$( 60) +str$( lastButOne), 46)

  [offWeGo]
    newNumber   =lastButTwo +lastButOne
    lastButTwo  =lastButOne
    lastButOne  =newNumber
    print right$( space$( 60) +str$( newNumber), 46)
    if newNumber <1E40 then goto [offWeGo]

    end
The output of the program is right-aligned to show better, and note LB giving precision well beyond what many languages give.

                                             1
                                             1
                                             2
                                             3
                                             5
                                             8
                                            13
                                            21
                                            34
                                            55
                                            89
                                           144
                                           233
                                           377
                                           610
                                           987
                                          1597
                                          2584
                                          4181
                                          6765
                                         10946
                                         17711
                                         28657
                                         46368
                                         75025
                                        121393
                                        196418
                                        317811
                                        514229
                                        832040
                                       1346269
                                       2178309
                                       3524578
                                       5702887
                                       9227465
                                      14930352
                                      24157817
                                      39088169
                                      63245986
                                     102334155
                                     165580141
                                     267914296
                                     433494437
                                     701408733
                                    1134903170
                                    1836311903
                                    2971215073
                                    4807526976
                                    7778742049
                                   12586269025
                                   20365011074
                                   32951280099
                                   53316291173
                                   86267571272
                                  139583862445
                                  225851433717
                                  365435296162
                                  591286729879
                                  956722026041
                                 1548008755920
                                 2504730781961
                                 4052739537881
                                 6557470319842
                                10610209857723
                                17167680177565
                                27777890035288
                                44945570212853
                                72723460248141
                               117669030460994
                               190392490709135
                               308061521170129
                               498454011879264
                               806515533049393
                              1304969544928657
                              2111485077978050
                              3416454622906707
                              5527939700884757
                              8944394323791464
                             14472334024676221
                             23416728348467685
                             37889062373143906
                             61305790721611591
                             99194853094755497
                            160500643816367088
                            259695496911122585
                            420196140727489673
                            679891637638612258
                           1100087778366101931
                           1779979416004714189
                           2880067194370816120
                           4660046610375530309
                           7540113804746346429
                          12200160415121876738
                          19740274219868223167
                          31940434634990099905
                          51680708854858323072
                          83621143489848422977
                         135301852344706746049
                         218922995834555169026
                         354224848179261915075
                         573147844013817084101
                         927372692193078999176
                        1500520536206896083277
                        2427893228399975082453
                        3928413764606871165730
                        6356306993006846248183
                       10284720757613717413913
                       16641027750620563662096
                       26925748508234281076009
                       43566776258854844738105
                       70492524767089125814114
                      114059301025943970552219
                      184551825793033096366333
                      298611126818977066918552
                      483162952612010163284885
                      781774079430987230203437
                     1264937032042997393488322
                     2046711111473984623691759
                     3311648143516982017180081
                     5358359254990966640871840
                     8670007398507948658051921
                    14028366653498915298923761
                    22698374052006863956975682
                    36726740705505779255899443
                    59425114757512643212875125
                    96151855463018422468774568
                   155576970220531065681649693
                   251728825683549488150424261
                   407305795904080553832073954
                   659034621587630041982498215
                  1066340417491710595814572169
                  1725375039079340637797070384
                  2791715456571051233611642553
                  4517090495650391871408712937
                  7308805952221443105020355490
                 11825896447871834976429068427
                 19134702400093278081449423917
                 30960598847965113057878492344
                 50095301248058391139327916261
                 81055900096023504197206408605
                131151201344081895336534324866
                212207101440105399533740733471
                343358302784187294870275058337
                555565404224292694404015791808
                898923707008479989274290850145
               1454489111232772683678306641953
               2353412818241252672952597492098
               3807901929474025356630904134051
               6161314747715278029583501626149
               9969216677189303386214405760200
              16130531424904581415797907386349
              26099748102093884802012313146549
              42230279526998466217810220532898
              68330027629092351019822533679447
             110560307156090817237632754212345
             178890334785183168257455287891792
             289450641941273985495088042104137
             468340976726457153752543329995929
             757791618667731139247631372100066
            1226132595394188293000174702095995
            1983924214061919432247806074196061
            3210056809456107725247980776292056
            5193981023518027157495786850488117
            8404037832974134882743767626780173
           13598018856492162040239554477268290
           22002056689466296922983322104048463
           35600075545958458963222876581316753
           57602132235424755886206198685365216
           93202207781383214849429075266681969
          150804340016807970735635273952047185
          244006547798191185585064349218729154
          394810887814999156320699623170776339
          638817435613190341905763972389505493
         1033628323428189498226463595560281832
         1672445759041379840132227567949787325
         2706074082469569338358691163510069157
         4378519841510949178490918731459856482
         7084593923980518516849609894969925639
        11463113765491467695340528626429782121
        18547707689471986212190138521399707760
        30010821454963453907530667147829489881
        48558529144435440119720805669229197641
        78569350599398894027251472817058687522
       127127879743834334146972278486287885163
       205697230343233228174223751303346572685
       332825110087067562321196029789634457848
       538522340430300790495419781092981030533
       871347450517368352816615810882615488381
      1409869790947669143312035591975596518914
      2281217241465037496128651402858212007295
      3691087032412706639440686994833808526209
      5972304273877744135569338397692020533504
      9663391306290450775010025392525829059713
     15635695580168194910579363790217849593217
These increasing integers make a staircase of treads which get progressively bigger..

    WindowWidth  =1200
    WindowHeight = 640

    nomainwin

    dim col$( 16)

    for j =0 to 16
        col$( j) =str$( 40 +215 *rnd( 1)) +" " +str$( 40 +215 *rnd( 1)) +" " +str$( 40 +215 *rnd( 1))
    next j

    open "Fibonacci boxes" for graphics as #w

    #w "trapclose [quit]"
    #w "color black ; size 2"
    #w "font courier 6"
    #w "fill 100 100 40 ; flush"

    global position

    position   = 1

    lastButTwo = 1
    lastButOne = 1

    call square lastButTwo

    position =2
    call square lastButOne

  [offWeGo]
    newNumber   =lastButTwo +lastButOne
    lastButTwo  =lastButOne
    lastButOne  =newNumber

    position    =position +lastButTwo
    call square lastButOne

    if newNumber <50 then goto [offWeGo]

    wait

    sub square side
        f =16
        #w "up ; goto "; f *position +20; " "; 25
        #w "down"
        #w "backcolor "; col$( int( 16 *rnd( 1)))
        #w "boxfilled "; f *position +20 +f *side; " "; 25 +f *side
        #w "up ; goto "; f *position +20; " "; 18
        #w "\"; " "; str$( side); " "
    end sub

[quit]
    close #w
    end

Visual representation as a spiral

If the Fibonacci terms are used as forward steps, separated by right-angle turns, you find the points lie on a spiral path. You can find excellent references in Wikipedia under Fibonacci, Golden Spiral, etc, and lovely photos of natural structures like a sunflower head which follow this kind of spiral pattern.

My first attempt at such a layoutwere not the 'standard' layout.


    '   The golden spiral is a logarithmic spiral that grows outward by a factor of the golden ratio
    '       for every 90 degrees of rotation (pitch about 17.03239 degrees).

    '   It can be approximated by a "Fibonacci spiral", made of a sequence of quarter circles with radii
    '       proportional to Fibonacci numbers on a tiling with sides following Fibonacci series.

    F$ ="1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610"    '   15 terms

    '   r =a *exp( b *theta)

    '   b =growthFactor =phi = ( 1 +5^0.5) /2 =1.6180339887....

    nomainwin

    WindowWidth  =650
    WindowHeight =650
    cx           =440
    cy           =340

    global theta
    global pi
    theta        =0    '   due East, in radians
    pi           =3.1415926535
    facing       =0

    open "Spiral" for graphics_nsb as #w

    #w "trapclose quit"

    #w "goto ";  cx; " "; cy; " ; down ; turn 90 ; fill 100 100 40 ; flush"
    #w "color 200 160 30 ; size 2"

    for j =1 to 12
        pace =val( word$( F$, j, ","))
        #w "color darkblue"

        for s =1 to 6
           #w "go "; pace *4; " ; turn 90"
        next s

        #w "turn -90 ; color red ; posxy xOld yOld"
        'call arc startAngle, endAngle,  segments, centerX, centerY, radius
        select case facing
            case  0
                X =xOld -pace *4: Y =yOld
            case 90
                X =xOld         : Y =yOld -pace *4
            case 180
                X =xOld +pace *4: Y =yOld
            case 270
                X =xOld:          Y =yOld +pace *4
        end select

        call arc 0 -90 *pi /180 +facing *pi/4, facing *pi /4, 180, X, Y, pace *4
        #w "up ; goto "; xOld; " "; yOld; " ; down ; turn 0"
        facing =( facing +90) mod 360
        call timr 500
    next j

    #w "getbmp scr 0 0 800 600"
    bmpsave "scr", "goldenRatioSpiralCorrected" +str$( time$( "seconds")) +".bmp"
    wait

  sub quit h$
    close #h$
    end
  end sub

    sub timr t
        timer t, [o]
        wait
      [o]
        timer 0
    end sub

    sub arc startAngle, endAngle, segments, centreX, centreY, radius    '   David Drake's arc routine.
        resolution  = (endAngle -startAngle) /segments      ' Calculates steps in arc based on segments
        x           = centreX +radius *cos( startAngle)     ' Calculate start point of arc (X)
        y           = centreY +radius *sin( startAngle)     ' Calculate start point of arc (Y)
        #w "place "; x; " "; y                              ' Place starting point of arc

        for angle = startAngle to endAngle step resolution  ' Sweep arc
            x   = centreX +radius *cos( angle)              ' Calculate arc point (X)
            y   = centreY +radius *sin( angle)              ' Calculate arc point (Y)
            #w "goto "; x; " "; y                           ' Draw line to next point on arc
        next angle
    end sub

Some references well worth looking at..

Fibonacci Spiral- Wikipedia

Fibonacci number -Wikipedia

Golden Spiral

Real world 'Fibonacci' occurrences

Nature examples


As always, feel free to email me for help..