|  |  | Spirale de Baravelle |

## Spirale de Baravelle

Comme nous l'avons vu précédement, à l'aide de FSD il est possible de construire de façon intuitive et simple des figures permettant de visionner des situations qui en programmation sont récursives - ou cycliques.

Nous pouvons un peu approfondir cet aspect, en modifiant le code Scheme utilisé pour la construction des nombres irrationnels, afin d'obtenir une figure fameuse de la littérature des mathématiques, à savoir la spirale de Baravelle.

Le code Scheme définissant la spirale est le suivant :

    (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 spirale de Baravelle suite à l'évaluation du code Scheme

À partir de la figure et du code Scheme correspondant nous percevons bien la nature itérative du mécanisme de construction de la figure. Un problème intéressant que nous laissons au lecteur, consiste à établir à quel moment les deux rameaux de la spirale convergent.

Une petite variation supplémentaire du code précédent :

    (new-figure "Spirale")

    (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)

conduit à une spirale simplifiée.

Spirale simplifiée

Le lecteur est invité à se divertir en créant de nouvelles variations !

|  |  | Spirale de Baravelle |