Разработка программы на языке LISP для построения кривых Серпинского I-го порядка

Алгоритм для построения кривых на экране монитора или на графопостроителе под управлением вычислительной машины. Особенности кривой Серпинского. Схема алгоритма главной процедуры. Тестирование программы и запуск интерпретатора XLisp в окне MS-DOS.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 12.02.2013
Размер файла 395,5 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

1

МИНИСТЕРСТВО ВЫСШЕГО И СРЕДНЕГО СПЕЦИАЛЬНОГО ОБРАЗОВАНИЯ РФ

МОСКОВСКИЙ ИНСТИТУТ РАДИОТЕХНИКИ, ЭЛЕКТРОНИКИ И АВТОМАТИКИ

Курсовой проект

Тема: "Разработка программы на языке LISP для построения кривых Серпинского i-го порядка"

МОСКВА

Оглавление

  • 1. Задание
  • 2. Формализация задачи
  • 3. Схема алгоритма
  • 4. Текст программы
  • 5. Руководство пользователя
  • 6. Тест программы
  • Литература

1. Задание

Оригинальный узор на рисунке 1 состоит из суперпозиции четырех кривых. Эти кривые соответствуют некоторому регулярному образу. Алгоритм для построения этих кривых на экране монитора или на графопостроителе под управлением вычислительной машины описан в [1].

Задача проекта - реализовать этот алгоритм в виде программы на функциональном языке программирования Lisp.

2. Формализация задачи

Анализируя рисунок 1, можно обнаружить, что он получен путем наложения друг на друга нескольких кривых. Первые две из них показаны на рисунке 2. Кривая Si называется кривой Серпинского i-го порядка. Необходимо выяснить, какова рекурсивная схема этих кривых.

Главная особенность кривой Серпинского состоит в том, что она замкнута и в ней нет пересечений. Это означает, что основная рекурсивная схема должна давать разомкнутую кривую линию, четыре части которой соединяются линиями, не принадлежащими самому рекурсивному образу. И действительно, эти замыкающие линии представляют собой отрезки прямых в четырех внешних углах, на рисунке 2 они выделены жирными линиями. Можно считать, что они принадлежат к непустой начальной кривой S - квадрату, "стоящему" на одном углу. Теперь достаточно легко составить рекурсивную схему.

Четыре составляющих образа, для наглядности, обозначим через A, B, C, D, а процедуры, рисующие соединительные прямые, будем обозначать стрелками, указывающими соответствующем направлении. Надо отметить, что четыре рекурсивных образа по существу идентичны, но лишь повертываются на 90.

Основной образ кривых Серпинского задается схемой:

а рекурсивные составляющие (горизонтальные и вертикальные отрезки - двойной длины):

Предположим, что для построения части прямой в нашем распоряжении есть процедура Line, передвигающая перо в заданном направлении на заданное расстояние, причем направление задается целочисленным параметром i, как градусов. Если единичную прямую обозначить через h, то с помощью рекурсивных обращений к аналогично составленным процедурам для B и D и к самой A довольно просто написать процедуру, соответствующую схеме А.

Эта процедура инициируется главной программой по одному разу для каждой кривой Серпинского, образующих приведенный рисунок. Употребление явного параметра для уровня гарантирует окончание работы, так как глубина рекурсии не может быть больше k. Главная программа строится по образцу S. Ее задача - установить начальную точку кривой, т.е. исходные координаты пера (Px и Py) и единичную длину приращения h. Квадрат, где рисуется кривая, помещается в середине экрана, заданной ширины и высоты.

Графическое изображение полученного алгоритма представлено в следующем разделе (Рисунок 3).

По сравнению с таким рекурсивным построением эквивалентные программы, где избегали употребления рекурсии, выглядят крайне сложными и запутанными.

3. Схема алгоритма

Рисунок 3 Схема алгоритма главной процедуры

Рисунок 4 Схема алгоритма процедуры A

4. Текст программы

;; SIERPINS.LSP для XLISP версии 2.1

;; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

;; Программа построения кривых Серпинского i-го порядка.

;;

;; ЗАПУСК: > (SierpinskiCurve 4)

;;

;; Замечание: Переменная *VMode* управляет установкой видео режима,

;; и по умолчанию установлена в значение 18.

;; Эта установка соответствует режиму 640x480 Color,

;; и работает на большинстве систем. В случае проблемы

;; с установкой этого режима необходимо выбрать

;; значение этой переменной в соответствии с документацией

;; на оборудование.

;;

( defvar *VMode* 18 ) ;Видео режим по умолчанию

( defvar *MaxX* 640 ) ;Максимальная ширина экрана по умолчанию

( defvar *MaxY* 480 ) ;Максимальная высота экрана по умолчанию

( defvar *SquareSize* 256 ) ;Размер области для построения

;;

;; Функция инициализирует графический режим, устанавливает переменные

;; *MaxX* *MaxY* *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 ) )

)

;;

;; Функция рисования прямой:

;; Параметры: <Direction> - направление рисования (0-7)

;; <Size> - длинна прямой

;;

(

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

) )

)

;;

;; Главная процедура

;; Параметры: <Count> - количество итераций

;;

(

defun SierpinskiCurve ( Count )

( InitGraph ) ;Установка графического режима

( setq h ( div *SquareSize* 4 ) ) ;Вычисление длины линии

( setq x0 ( div *MaxX* 2 ) ) ;Вычисление начальной точки

( setq y0 ( + ( div *MaxY* 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) ) ;Подсказка

5. Руководство пользователя

Требования к системе:

x86 персональный компьютер (386 минимум; 486, Pentium, или Pentium Pro рекомендуется)

Microsoft DOS 3.30 или выше

Microsoft Windows 3.1, Microsoft Windows for Workgroups, Microsoft Windows 95, Microsoft Windows NT 3.51 или 4.0

512 Kb RAM

5 Kb свободного пространства на жестком диске

Установленный интерпретатор XLisp версии 2.1 или выше

Для запуска программы необходимо:

Включить компьютер

Загрузить интерпретатор XLisp c параметром "Sierpins.lsp": C:\XLISP\XLISP.EXE SIERPINS.LSP

В ответ на приглашение XLisp ввести: (SierpinskiCurve 4)

6. Тест программы

Тест проводился на рабочей станции со следующей конфигурацией:

Pentium 166

32 Mb RAM

SyncMaster 17Glsi

S3 Trio64V+

Windows 95

Интерпретатор XLisp был запущен в окне MS-DOS.

Программа тестировалась при значениях параметра Count от 1 до 4. В результате тестов были получены следующие изображения на экране монитора:

алгоритм программа интерпретатор графопостроитель

Литература

"Алгоритм + структура данных = программа", H.Вирт

"XLisp-Plus 2.1 Programmers Manual", David Michael Betz

Размещено на Allbest.ru


Подобные документы

  • Рассмотрение алгоритма, основанного на использовании рекурсивной функции. Пример построения простого самоподобного фрактала - ковра Серпинского, снежинки Коха, кривых Пеано и Гильберта. Понятие L-система и терл-графика. Составление программы "Koch.m".

    курсовая работа [3,6 M], добавлен 14.12.2012

  • Математическая модель построения кривых Безье с описанием реализации на языке Visual С++. Вычисление длины кривой. Условие непрерывности соседних кривых Безье, частные случаи. Структура программы, вызываемые функции. Описание основных алгоритмов.

    курсовая работа [405,3 K], добавлен 06.08.2013

  • Сведения о фракталах, способы их построения. Неизменность геометрических особенностей фрактала при изменении масштаба. Алгоритм построения фрактала и его реализация в программе. Длина береговой линии и понятие фрактала. Салфетка и ковер Серпинского.

    курсовая работа [579,4 K], добавлен 12.01.2012

  • Сущность, основные свойства и классификация фракталов. Построение триадной кривой Коха и "дракона" Хартера-Хейтуэя, треугольник Серпинского и множество Жюлиа. Сущность L-кодирования. Создание программы на языке BorlandPascal для построения фракталов.

    курсовая работа [1,2 M], добавлен 13.04.2015

  • Словесное описание алгоритма программы. Открытие файла процедурой Rewrite, его проверка на наличие ошибок при открытии. Особенности построения диаграммы. Листинг программы, ее тестирование и отладка. Выполнение процедуры CloseFile при закрытии файла.

    контрольная работа [17,3 K], добавлен 11.06.2010

  • Формальная схема и закон функционирования моделируемой вычислительной системы для обработки программ. Составление алгоритма моделирующей программы на языке GPSS и листинга программы для стохастической модели. Верификация программы и анализ результатов.

    курсовая работа [347,3 K], добавлен 21.01.2013

  • Разработка программы для изображения в графическом режиме на экране структуры модели вычислительной машины и демонстрация функционирования при выполнении программы вычисления. Описание процесса разработки, обоснование структур данных и их форматов.

    курсовая работа [170,3 K], добавлен 07.06.2019

  • Этапы процедуры принятия решений. Разработка математического алгоритма. Блок-схема алгоритма работы программы. Разработка программы на языке программирования С++ в среде разработки MFC. Текст программы определения технического состояния станка с ЧПУ.

    курсовая работа [823,0 K], добавлен 18.12.2011

  • Разработка программы на языке Pascal. Описание переменных. Действия, которые должна выполнить программа согласно выбранного алгоритма. Детализация графической части программы. Листинг и тестирование программы. Вывод массива данных на экран монитора.

    контрольная работа [360,4 K], добавлен 13.06.2012

  • Характеристика программы для реализации проектов, созданных в формате трехмерного моделирования. Классификация кривых 2-го порядка. Построение окружности, эллипса, гиперболы и параболы в системе координат с помощью программного обеспечения 3D MAX.

    контрольная работа [667,7 K], добавлен 18.01.2014

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.