![]() | ![]() | ![]() | 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 è:
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 di Baravelle |