(forbid)
(graphic)(clear)
(fill 3 0 0)
(setq ABSOLUT t)
(setq RELATIV nil)
(setq KARTESISCH t)
(setq POLAR nil)
;neupos berechnet Streckenmitte
(defun neupos (xeck yeck)
              (setq x (+ x(/(- xeck x)2.0)))(setq y(+ y(/(- yeck y)2.0))))

;zeichnen ist die Hauptfunktion
(defun zeichnen (&aux x y z)
 (setq x 200.0)(setq y 190.0)
 (count 600
    (setq z (random 3))
    (cond ((< z 1.0)(neupos -200.0 -190.0)) ;Eckpunkt zufällig
          ((< z 2.0)(neupos -200.0  190.0)) ;wählen
          (t        (neupos  200.0  190.0)))
    (draw ABSOLUT KARTESISCH -1 x y)
    (draw RELATIV KARTESISCH  1 0 0))) ;Punkt zeichnen


(defun baum_zeichnen (seitenlänge &aux rechtes_quadrat linkes_quadrat)
  (count 4 (draw RELATIV POLAR 1 0.0 seitenlänge)
           (draw RELATIV POLAR -1 90.0 0.0)
  )
  (setq rechtes_quadrat (* 4/5 seitenlänge))
  (setq linkes_quadrat (* 3/5 seitenlänge))
  (cond ((>= linkes_quadrat 2.0)
         (draw RELATIV POLAR -1 0.0 seitenlänge)
         (draw RELATIV POLAR -1 -36.87 0.0)
         (baum_zeichnen rechtes_quadrat)
         (draw RELATIV POLAR -1 90.0 rechtes_quadrat)
         (baum_zeichnen linkes_quadrat)
         (draw RELATIV POLAR -1 180.0 rechtes_quadrat)
         (draw RELATIV POLAR -1 -53.13 seitenlänge)
         (draw RELATIV POLAR -1 180.0 0.0)))
)

(defun tanze (n &aux i) ; n gibt die Anzahl der Verfeinerungen an
    (setq i 1)
    (count anzahl
      (cond ((eq (nth i schritte) 'rechts)(draw RELATIV POLAR -1 -90.0 0))
            ((eq (nth i schritte) 'links )(draw RELATIV POLAR -1  90.0 0)))
      (cond ((< n maxN) (tanze (+ n 1)))
            (t (draw RELATIV POLAR 1 0.0 laenge)))
      (cond ((eq (nth i schritte) 'rechts)(draw RELATIV POLAR -1  90.0 0))
            ((eq (nth i schritte) 'links )(draw RELATIV POLAR -1 -90.0 0)))
      (setq i (+ i 1))))

(defun TanzDerSchildkröte (&aux wi winkel)
  (setq anzahl 6) ; 6 Tanzschritte
  (setq schritte '(vor rechts vor links vor vor))
  (setq maxN 2) ; 3-te Verfeinerung
  (setq laenge 3) ; einzelne Streckenlängen
  (setq wi 0)(setq winkel 72) ; Drehwinkel
  (draw ABSOLUT KARTESISCH -1 -60 -120)
  (draw ABSOLUT POLAR -1 0 0)
  (terpri)(princ "Tanz der Schildkröte")(terpri)
  (while (< wi 360)
     (tanze 0)(draw ()() -1 winkel 0)
     (setq wi (+ wi winkel))))
(terpri)(terpri)
(princ "ALisp-Demo : Grafik mit dem (draw)-Befehl")
(terpri)(princ "Bitte ca. 10 Min.)")(terpri)(princ "warten")(terpri)(terpri)
(princ "Fluch des Pharao")(terpri)
(zeichnen)
(draw t t -1 28 -80)(draw t nil -1 90.0 0)
(terpri)(princ "Baum des Pythagoras")(terpri)
(baum_zeichnen 40)
(TanzDerSchildkröte)
(allow)