48885 (Розробка програми Sierpins, яка реалізує побудову рекурсивних кривих Серпінського), страница 2
Описание файла
Документ из архива "Розробка програми Sierpins, яка реалізує побудову рекурсивних кривих Серпінського", который расположен в категории "". Всё это находится в предмете "информатика" из 1 семестр, которые можно найти в файловом архиве . Не смотря на прямую связь этого архива с , его также можно найти и в других разделах. Архив можно найти в разделе "курсовые/домашние работы", в предмете "информатика, программирование" в общих файлах.
Онлайн просмотр документа "48885"
Текст 2 страницы из документа "48885"
( defvar *Max* 640 ) ;Максимальна ширина екрана за замовчуванням
( defvar *Max* 480 ) ;Максимальна висота екрана за замовчуванням
( defvar *SquareSize* 256 ) ;Розмір області для побудови
;;
;; Функція ініціалізує графічний режим, установлює перемінні
;; *Max* *Max* *SquareSize* відповідно до обраного режиму
;;
(
defun InitGraph()
(
case *VMode*
( 4 ;320x200 Color
( mode 4 )
( setq *MaxX* 320 *MaxY* 200 *SquareSize* 128 ) )
( 16 ;640x350 Color
( mode 16 )
( setq *MaxX* 640 *MaxY* 350 *SquareSize* 128 ) )
( 18 ;640x480 Color
( mode 18 ) )
( 106 ;800x600 Color
( mode 106 106 800 600 )
( setq *MaxX* 800 *MaxY* 600 *SquareSize* 512 ) )
( t ( error Unsupported graphics mode: *VMode* ) )
)
)
;;
;; Функція реалізує затримку на заданий час
;;
(
defun pause ( time )
( let ( ( fintime ( + ( * time internal-time-units-per-second )
( get-internal-run-time ) ) ) )
( loop ( when ( > ( get-internal-run-time) fintime )
( return-from pause ) ) ) )
)
;;
;; Функція цілочисленого розподілу
;;
(
defun div ( a b ) ( round ( / a b ) )
)
;;
;; Функція малювання прямої:
;; Параметри: - напрямок малювання (0-7)
;; - довжина прямої
;;
(
defun Line( Direction Size )
( setq x Px y Py )
(
case Direction
( 0 ( setq x ( + x Size) ) )
( 1 ( setq x ( + x Size ) y ( - y Size ) ) )
( 2 ( setq y ( - y Size) ) )
( 3 ( setq x ( - x Size ) y ( - y Size ) ) )
( 4 ( setq x ( - x Size) ) )
( 5 ( setq x ( - x Size ) y ( + y Size ) ) )
( 6 ( setq y ( + y Size) ) )
( 7 ( setq x ( + x Size ) y ( + y Size ) ) )
)
( move Px Py x y )
( setq Px x Py y )
)
;;
;; Функції A, B, C, D - рекурсивні функції малювання
;;
(
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 ) )
) )
)
(
defun B ( k )
( cond ( ( > k 0 )
( B ( - k 1 ) ) ( Line 3 h )
( C ( - k 1 ) ) ( Line 2 ( * 2 h ) )
( A ( - k 1 ) ) ( Line 1 h )
( B ( - k 1 ) )
) )
)
(
defun C ( k )
( cond ( ( > k 0 )
( C ( - k 1 ) ) ( Line 5 h )
( D ( - k 1 ) ) ( Line 4 ( * 2 h ) )
( B ( - k 1 ) ) ( Line 3 h )
( C ( - k 1 ) )
) )
)
(
defun D ( k )
( cond ( ( > k 0 )
( D ( - k 1 ) ) ( Line 7 h )
( A ( - k 1 ) ) ( Line 6 ( * 2 h ) )
( C ( - k 1 ) ) ( Line 5 h )
( D ( - k 1 ) )
) )
)
;;
;; Головна процедура
;; Параметри: - кількість ітерацій
;;
(
defun SierpinskiCurve ( Count )
( InitGraph ) ;Установка графічного режиму
( setq h ( div *SquareSize* 4 ) ) ;Обчислення довжини лінії
( setq x0 ( div *Max* 2 ) ) ;Обчислення початкової точки
( setq y0 ( + ( div *Max* 2 ) h ) ) ;для малювання
( ;Основний цикл
do (( i 1 )) ;Ініціалізація лічильника
(( eql i ( + Count 1 ) ) 'Done ) ;Умова завершення
( setq x0 ( - x0 h ) ) ;Обчислення координат початкової
( setq h ( div h 2 ) ) ;крапки для малювання і
( setq y0 ( + y0 h ) ) ;одиничної довжини лінії
( setq Px x0 Py y0 ) ;Установка пера
( color i ) ;Установка кольору для малювання
( A i ) ( Line 1 h ) ;Малювання
( B i ) ( Line 3 h )
( C i ) ( Line 5 h )
( D i ) ( Line 7 h )
( pause 1.0 ) ;Затримка
( setq i ( + i 1 )) ;Інкремент лічильника
) ;Кінець основного циклу
)
( print Try (SierpinskiCurve 4) ) ;Підказка
Додаток В. Тест програми
Тест проводився на робочій станції з наступною конфігурацією:
-
Pentium 166
-
32 Mb RAM
-
SyncMaster 17Glsi
-
S3 Trio64V+
-
Windows 95
Інтерпретатор XLisp був запущений у вікні MS-DOS.
Програма тестувалась при значеннях параметра Count від 1 до 4. У результаті тестів були отримані наступні зображення на екрані монітора :
Малюнок 3
Малюнок 4
Малюнок 5
Малюнок 6
1 Даний приклад передбачає, що XLisp встановлено в каталозі C:\XLISP и його запуск проводиться в режимі MS-DOS.