|  |  | Espiral de Baravelle |

## Espiral de Baravelle

Como vimos anteriormente, con la ayuda de una FSD es posible construir de manera intuitiva y simple figuras que permiten visualizar situaciones que en un programa son ya sea iterativas o recursivas.

Profundicemos un poco más en este aspecto. Modificando el código Scheme utilizado para la construcción de los números irracionales, podemos obtener una figura famosa en la literatura matemática: la espiral de Baravelle.

El código Scheme que define la espiral es el siguiente :

    (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 espiral de Baravelle obtenida al evaluar el código Scheme

Con base en la figura y en el código Scheme correspondiente, vemos claramente la naturaleza iterativa del mecanismo de construcción de la figura. Un problema interesante, que dejamos al lector, consiste en establecer en qué momento las dos ramas de la espiral convergen.

Una pequeña variación al código precedente :

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

Obtenemos, pues, una espiral simplificada.

Espiral simplificada

El lector está invitado a divertirse creando nuevas variaciones.

|  |  | Espiral de Baravelle |