|  |  | Spirale di Baravelle |

## Spirale di Baravelle

Come abbiamo visto in precedenza, attraverso una FSD è possibile costruire in modo semplice e intuitivo, una figura che permette di "visualizzare" ciò che in programmazione è un ciclo.

Possiamo approfondire questo aspetto, modificando di poco il codice Scheme utilizzato per la costruzione dei numeri irrazionali, per ottenere una figura nota in letteratura come spirale di Baravelle. Il codice Scheme che definisce la spirale è il seguente:

    (new-figure "Baravelle")

     (define (triangle p1 p2 p3 n)

       (let* ((s1  (Segment "" extremities    p1 p2))
              (s2  (Segment "" extremities    p2 p3))
              (s3  (Segment "" extremities    p3 p1))
              (m   (Point   "" middle-2pts    p1 p3))
              (r   (Segment "" extremities    m  p3))
              (pe  (Line    "" orthogonal     p3 s3))
              (ci  (Circle  "" center-segment p3 r ))
              (p4  (Point   "" intersection2  pe ci)))

         (send pe  masked)
         (send ci  masked)
         (send p4  masked)
         (send m   masked)

     (if (> n 0)

         (triangle  m  p3  p4 (- n 1)))))

     (lets Point "A" free  0  5)
     (lets Point "B" free  5  5)
     (lets Point "C" free  5  0)

     (triangle A B C 9)

     (lets Point "D" free  0 -5)
     (lets Point "E" free -5 -5)
     (lets Point "F" free -5  0)

     (triangle D E F 9)

La figura nota come spirale di Baravelle è:

Spirale di Baravelle

Dalla figura e dal codice Scheme si intuisce la struttura iterativa alla base della costruzione.

Un problema interessante, che lasciamo al lettore, consiste nello stabilire dove convergono i due rami della spirale.

Una variazione ulteriore del codice precedente:

    (new-figure "Spiral")

     (define (square p1 p2 p3 p4 n)

     (let* ((s1 (Segment "" extremities p1 p2))
     (s2 (Segment "" extremities p2 p3))
     (s3 (Segment "" extremities p3 p4))
     (s4 (Segment "" extremities p4 p1))
     (A (Point "" on-curve s1 1/10))
     (B (Point "" on-curve s2 1/10))
     (C (Point "" on-curve s3 1/10))
     (D (Point "" on-curve s4 1/10)))

     (send A masked)
     (send B masked)
     (send C masked)
     (send D masked)

     (if (> n 0)

     (square A B C D (- n 1)))))

     (lets Point "M" free 5 5)
     (lets Point "N" free -5 5)
     (lets Point "O" free -5 -5)
     (lets Point "P" free 5 -5)

    (square M N O P 30)

conduce alla spirale rappresentata in figura:

Spirale

Il lettore è invitato a divertirsi creandone di nuove generalizzando la costruzione precedente!

|  |  | Spirale di Baravelle |