на 90 В°.
Основний образ кривих Серпінського задається схемою:
В
S: A Г¤ B ГҐ C ГЈ D Г¤
В
а рекурсивні складові (Горизонтальні і вертикальні відрізки - подвійної довжини):
A: A Г¤ B Г D Г¦ A
B: B ГЈ C ГЎ A Г¤ B
C: C ГҐ D Гџ B ГЈ C
D: D Г¦ A Гў C ГҐ D
В
Припустимо, що для побудови частини прямої в нашому розпорядженні є процедура Line , пересуваюча перо в заданому напрямку на задану відстань, причому напрямок задається цілочисловим параметром i , як градусів. Якщо одиничну пряму позначити через h , то за допомогою рекурсивних звернень до аналогічно складеним процедурам для B і D і до самої A досить просто написати процедуру, відповідну схемою А .
(defun A (k)
(cond ((> k 0)
(A (- k 1)) (Line 1 h)
(B (- k 1)) (Line 0 (* 2 h))
(D (- k 1)) (Line 7 h)
(A (- k 1)))))
Ця процедура ініціюється головною програмою по одному разу для кожної кривої Серпінського, утворюють наведений малюнок. Вживання явного параметра для рівня гарантує закінчення роботи, так як глибина рекурсії не може бути більше k . Головна програма будується за зразком S . Її завдання - встановити початкову точку кривої, тобто вихідні координати пера ( P x і P y ) і одиничну довжину прирощення h . Квадрат, де малюється крива, поміщається в середині екрана, заданої ширини і висоти.
Графічне зображення отриманого алгоритму представлено в наступному розділі (Малюнок 3).
Порівняно з таким рекурсивним побудовою еквівалентні програми, де уникали вживання рекурсії, виглядають вкрай складними і заплутаними.
Схема алгоритму
В
Малюнок 3 Схема алгоритму головної процедури
В
Малюнок 4 Схема алгоритму процедури A [1]
Текст програми
;; SIERPINS.LSP для XLISP версії 2.1
;; ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
;; Програма побудови кривих Серпінського i-го порядку.
;;
;; ЗАПУСК:> (SierpinskiCurve 4)
;;
;; Зауваження: Мінлива * VMode * управляє установкою відео режиму,
;; і за замовчуванням встановлена ​​в значення 18.
;; Ця установка відповідає режиму 640x480 Color,
...