![]() | ![]() | ![]() | 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)
Una pequeña variación al codigo 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 de Baravelle |