Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
метод_лаб_КИТ_КЭМ_new.doc
Скачиваний:
5
Добавлен:
06.02.2016
Размер:
640.51 Кб
Скачать

МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ УКРАИНЫ

ДОНЕЦКИЙ НАЦИОНАЛЬНЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ

  1. Методические указания и задания

  2. К ЛАБОРАТОРНЫМ РАБОТАМ ПО КУРСУ

  3. МЕТОДЫ И СПОСОБЫ КОМПЬЮТЕРНЫХ ИНФОРМАЦИОННЫХ ТЕХНОЛОГИЙ ”

для студентов специальности 6.050101

“ Компьютерный эколого-экономический мониторинг”

Утверждено на заседании кафедры

“Компьютерные системы мониторинга”

протокол № 3 от 26.11.10

Утверждено на заседании

учебно-издательского совета ДонНТУ

протокол № __ от __________

    1. Донецк – ДонНТУ - 2010

      1. УДК 681.3

  1. Методические указания и задания к лабораторным работам по курсу “Методы и способы компьютерных информационных технологий“, (для студентов специальности 7.080407 “Компьютерный эколого-экономический мониторинг ”/

  2. сост.: доц. Губенко Н.Е., асс. Миргород В.С. – Донецк: ДонНТУ, 2010 - 96с.

Приведены теоретические сведения, методические рекомендации, примеры и задания для выполнения лабораторных работ по следующим разделам дисциплины:

  • Программирование растровых изображений на языке PostScript;

  • работа с манипулятором «мышь»;

  • работа с драйверами CD-ROM;

- программирование видеокарты;

- работа с LPT портом.

Составители: Губенко Н.Е., к.т.н., доцент

Миргород В.С., ассистент

Рецензент:

Лабораторная работа №1

Тема: Программирование простейших растровых изображений на языке PostScript.

Цель работы: освоение принципов и приобретение навыков программирования простейших изображений на языке описания страниц растровых изображений PostScript.

Методические указания к лабораторной работе

PostScript создавался в качестве простого стандартного языка для описания вида текста, чертежей и простых изображений ,выводимых на растровые устройства. Язык содержит около 250 операторов, что позволяет одни и те же действия запрограммировать самыми разными способами. Описание страниц на PostScript не зависит от устройства, на котором страница будет воспроизведена. Программы на PostScript генерируются приложениями, например текстовыми процессорами, программами для настольных издательских систем и т.п.

Виртуальное postscript-устройство (принтер, монитор) - это устройство, в котором имеется интерпретатор языка PostScript. Интерпретатор PostScript читает текстовый файл с описанием страницы, полученный из компьютера, и преобразует его в растровую форму, согласованную с типом устройства, которая и выводится на печать или на экран. Преимущества:

  • описание страницы во много раз компактнее даже сильно сжатого изображения;

  • процесс подготовки печатной страницы требует значительного времени: если пересылается описание, то подготовкой к печати занимается процессор принтера или дисплейный процессор, что освобождает процессор персонального компьютера (ПК) для выполнения другой работы и тем самым повышает его производительность;

  • самое важное преимущество - это независимость описания от типа устройства.

Текущая страница (ТС) - "идеальная" страница в памяти, на которой рисует PostScript. Она не зависит от физических характеристик устройства, на который страница будет вводиться. В начале работы программы это совершенно чистая страница.

Текущий траектория (ТТ) - это набор соединенных между собой отдельных геометрических объектов (точек, линий, кривых), которые вместе описывают фигуры и их положение на странице. На текущий путь не накладывается никаких ограничений. Элементы текущего пути задаются их позициями на текущей странице.

Текущая траектория обрезки (ТТО) или траектория отсечения - это границы области, в которой может быть нарисовано изображение.

Пространство устройства (ПУ) - определяет встроенную систему координат растрового устройства для адресации точек на странице.

Пространство пользователя (ПП) - используется для удобства независимого программирования с использованием понятия СИСТЕМА КООРДИНАТ ПОЛЬЗОВАТЕЛЯ (СКП). Позиция элемента на странице задается парой X,Y. PostScript допускает преобразование пространства пользователя:

  • начало СКП можно переносить в любую точку;

  • оси СКП могут быть повернутыми в любую сторону;

  • масштаб по каждой из осей может быть изменен, то есть можно задать линейное преобразование из ПП в ПУ.

Преобразование из ПП в ПУ осуществляется при выводе с помощью ТЕКУЩЕЙ МАТРИЦЫ ПРЕОБРАЗОВАНИЙ (ТМП), имеющей размеры 3х3.

Графический статус системы - определяется текущей траекторией и текущей матрицей преобразований.

Стек:

При программировании на PostScript широко используется концепция стека. СТЕК есть линейная структура, доступ к которой возможен только через ее вершину. PostScript оперирует четырьмя различными стеками: операндов, словарей, выполнения и состояния графики.

Стек операндов - содержит собственно объекты PostScript и результаты действий над ними. Операторы PostScript получают операнды только через стек.

Стек словарей - содержит переменные и словари, открытые в настоящий момент.

Словарь - суть набор пар «имя-значение». Все поименованные значения хранятся в словарях. Операнды также хранятся в словарях вместе с их кодами. Если программа ссылается на некоторое имя, то интерпретатор просматривает стек сверху вниз и ищет первое вхождение этого имени.

Занесение чисел в стек:

Любое число, появившееся в исходном файле PostScript-программы заносится в стек. Например, напишем строку:

-81 110.4 +777

Интерпретатор по мере ее чтения слева направо выполнит следующие действия:

- заносит в стек число -81;

- перемещает указатель на следующую свободную позицию;

- заносит в стек число 110.4;

- перемещает указатель на следующую позицию и т. д.

Стек будет иметь вид:

777

110.4

-81

Число 777 размещается в вершине стека, и оно может быть использовано первым в какой-либо операции. Остальные числа используются в порядке, обратном порядку их занесения в стек.

Таким же образом в стек заносятся PostScript-объекты любого вида: массивы, строки и словари.

Набор символов:

Все символы делятся на специальные и регулярные. Все виды скобок (круглые, квадратные, фигурные, угловые) и знак процента являются для PostScript специальными знаками. Остальные символы -подмножество кода ASCII, используются в программе без ограничений и называются регулярными символами.

Имя - любая последовательность символов, которую нельзя интерпретировать как число и построенная из любых символов, кроме скобок, пробелов, знаков % и /. Если перед именем стоит символ «/», то имя помещается в стек как операнд, иначе оно ищется в стеке словарей. Если найденное имя есть процедура, то она выполняется, иначе имя помещается в стек операндов.

Типы даннях:

Данные делятся на основные и дополнительные. Основные: целые, действительные, логические, массивы и строки. Дополнительные: mark (отметка, метка) и dictionary (словарь).

Константы:

В PostScript используются константы трех типов: целые, действительные и строковые.

Примеры записи целых:

+745 -61 48889 0

Если величина числа превышает предел для представления целых чисел, оно автоматически конвертируется интерпретатором в число типа real.

Примеры записи действительных чисел:

-122.0 33.3E-5 +.0065

Беззнаковые целые числа могут быть записаны в любой позиционной системе счисления с использование префикса в виде:

база#число

где: база - основание системы счисления (десятичное целое число от 2 до 36); число - представление числа в указанной базой системе счисления.

Цифры в системах счисления по основанию больше 10 представляются буквами латинского алфавита от A до Z. Например:

18#75cb2e 8#5347 2#11001011

Строка - это последовательность символов, заключенная в круглые скобки. Символы можно также представлять шестнадцатеричными кодами, заключая их в угловые скобки.

Массивы - последовательность объектов, заключенных в квадратные скобки. Они могут быть двух типов: регулярные (содержащие объекты одного типа) и нерегулярные (содержать объекты разных типов).

Комментарий - любой текст, начинающийся символом «%».

Операторы по своему функциональному назначению делятся на три группы: арифметические, работы с текстом и графикой и работы со стеком. Оператор побуждает интерпретатор к выполнению определенных действий. Программа выполняется путем продвижения интерпретатора от слова к слову, проверки слов по внутреннему словарю на соответствие множеству имен операторов. Если слова в словаре найдено, то выполняются все связанные с ним действия, а затем переход к следующему слову в исходном файле.

При разработке программы необходимо учитывать, что операнды-объекты любого вида предварительно размещаются в стеке операндов, а не адресуются непосредственно указанием имени переменной. Такой стиль программирования, при котором операнды задаются до операции над ними, называется ПОСТФИКСНОЙ НОТАЦИЕЙ или польской инверсной записью. Выполняемый оператор забирает операнды из вершины стека, совершает над ними действие и, в общем случае, возвращает результат в вершину стека. Поэтому операторы записываются в следующем виде:

arg1 arg2 … argN operator result

Так запись операции сложения двух чисел, допустим 24+115, в PostScript будет выглядеть следующим образом:

24 115 add

Разделители объектов - пробелы, символы табуляции и новой строки, а также круглые и квадратные скобки.

Гибкость языка:

Несмотря на большое количество встроенных операторов в PostScript нет зарезервированных слов. Любое слово переопределяемо. Программа в PostScript может рассматриваться как данные.

Арифметические операторы:

Унарная операция:

neg – изменить знак числа в вершине стека.

Пример: -543 neg = > 543

Бинарные операции:

Add - сложение,

Sub - вычитание,

div - деление,

idiv - целочисленное деление.

mod - остаток от деления.

Операнды операторов MOD и IDIV должны быть целыми числами.

Mul - перемножает два числа в вершине стека, помещая вместо них их произведение.

При выполнении этих операций оба операнда извлекаются из вершины стека. Вторым операндом всегда выступает число из вершины стека, а вторым - число, находящееся под ним.

Примеры записи арифметических выражений:

Обратите внимание на то, что выражения на языке PostScript можно представить несколькими способами!

  1. 23 + ( 8 : 2 )

    1. а) 8 2 div 23 add

    2. б) 23 8 2 div add

  2. 39 - ( 4*7 )

    1. а) 39 4 7 mul sub

    2. б) 4 7 mul 39 exch sub

В случае б) оператор EXCH меняет местами положение двух верхних чисел в вершине стека. Применение оператора EXCH вызвано тем, что SUB вычитает число в вершине стека из следующего за ним, что без EXCH приводит к неверному порядку действий.

Операторы управления стеком:

Эта группа операторов добавляет, удаляет и изменяет порядок следования элементов в стеке.

Clear - очистка стека - удаляет из стека все элементы

а1...аn clear

Сount - число элементов в стеке.

a1...an count a1...an n

Dup - дублирует в стеке его верхний элемент

a1 dup a1 a1

8 dup -> 8 8

Pop - удаляет из стека его верхний элемент

an...a2 a1 pop -> an...a2

25 31 4 pop -> 25 31

Roll - циклически сдвигает элементы стека. При этом число и направление сдвига задается первым (верхним) элементом, а количество сдвигаемых элементов - вторым. Если первый элемент положительный, сдвиг осуществляется вправо, иначе - влево.

15 7 8 9 3 1 roll -> 15 9 7 8

15 7 8 9 3 -1 roll -> 15 8 9 7

Copy дублирует n верхних элементов стеков

a1...an n copy a1...an a1...an

= = удаляет элемент из вершины стека и отображает его на экране.

Pstack - печатает все содержимое стека, не изменяя его.

Формирование графических изображений:

Программирование изображения в PostScript начинается с конструирования траектории на идеальной поверхности, называемой текущей страницей. Траектория есть набор прямых и кривых линий, определяющих разомкнутые или замкнутые области (которые возможно будут заполнены). Линии могут иметь разную толщину и тип. После того, как заполнение текущей страницы закончено, ее можно вывести на физическое устройство. Таким образом, получение графических изображений осуществляется в три этапа:

- конструирование траектории;

- нанесение ее на текущую поверхность;

- вывод страницы.

Операторы конструирования траектории:

x y moveto - точку с координатами х, у делает текущей на текущей странице;

dx dy rmoveto - перемещает текущую точку на текущей странице на величину dx dy;

х у lineto добавляет к траектории отрезок прямой от текущей точки до точки с координатами х у;

dx dy rlineto добавляет к траектории отрезок прямой от текущей точки до точки с координатами х + dx у + dy;

x y r angl1 angl2 arc - добавляет к заданной траектории дугу (окружность) и требует наличия в стеке пяти аргументов: координат х, у центра окружности, радиуса, угла начала дуги, угла конца дуги. Дуга строится против часовой стрелки:

100 100 42 30 110 arc

Аналогичный ARC оператор ARCN строит угол по часовой стрелке. Сравните:

100 100 42 30 110 arcn

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

Чтобы нарисовать окружность, нужно задать ARC угол в 360 градусов, например:

150 200 60 0 360 arc

x1 y1 x2 y2 r arcto - сглаживание углов. Пересекающиеся линии часто бывает необходимо соединить плавной кривой. В стеке задаются координаты двух точек и радиус. Оператор рисует сегмент прямой линии от текущей точки по направлению к точке х1, у1, а затем дугу до её пересечения со второй прямой. ARCTO возвращает в стеке координаты начала и конца дуги. Если они не нужны, то эти числа следует удалить из стека:

4 {pop} repeat

Операторы управления выводом:

- newpath - очищает текущую траекторию и готовит систему к началу конструирования новой траектории. Оператор необходим перед началом любой новой траектории;

- closepath - закрывает текущую траекторию, добавляя при этом отрезок, начало котрого - текущая точка, а конец - начальная точка траектории;

- stroke - вызывает рисование сконструированного нами пути на текущей странице с учетом текущих атрибутов ( текущей толщины линии, текущего цвета пера, текущего образа линии, текущего способа соединения линий).

В системе координат, принятой в PostScript по умолчанию, начало координат находится в нижнем левом углу страницы. Координата х увеличивается вправо, а у - при движении вверх. Единица длины в этой системе равна 1/72 дюйма. По умолчанию текущий цвет пера - черный, а текущий образ линии - сплошная.

- showpage - отображает (печатает) текущую страницу и подготавливает новую.

ПРИМЕР:

Написать программу, рисующую квадрат со стороной один дюйм, расположенный в центре страницы:

newpath

200 300 moveto

0 72 rlineto

0 -72 rlineto

-72 0 rlineto

stroke

showpage

Наш квадрат, как вы заметили, имеет выщерблину в левом нижнем углу, так как линии соединяются без учета толщины. Чтобы избежать этого явления, следует использовать оператор CLOTHEPATH.

Операторы управления свойствами:

- setlinewidth - позволяет вам установить ширину линии Х * 1/72 дюйма. Данный оператор действует на все линии, помещаемые на текущую страницу, пока не встретится другой оператор setlinewidth;

- fill - закрывает текущую траекторию и заполняет ее текущим цветом (уровнем серого) и очищает текущую траекторию. Используется вместо stroke ;

- setgray - задает уровень серого цвета для заполнения фигуры в долях от единицы (в интервале от 0 - черный цвет до 1 - белый);

- R G B setrgbcolor - задает сочетание интенсивностей трех основных цветов (красного, зеленого и синего); интенсивность выражается числом в диапазоне от 0 до 1 (0 - полное отсутствие соответствующего цвета, 1 - максимальная его интенсивность);

- H S B sethsbcolor - задает тон (цвет), насыщенность, яркость. Тон определяет цвет как точку на цветовом круге (0 градусов - чистый красный. 120 градусов – чистый зеленый, 240 градусов - чистый синий; остальные цвета спектра определяются смешением двух соседних цветов). Насыщенность цвета задается числом (0 - отсутствие цвета, 1 - максимальная насыщенность). Яркость, то есть содержание белого цвета в данном, задается числом от 0 до 1 (0 - черный, 1 - белый).

ПРИМЕР: Рисование перекрывающихся областей

При рисовании перекрывающихся областей цвет их пересечения определяется цветом, нанесенным на текущую страницу последним. Нарисуем два перекрывающихся прямоугольника.

%!

newpath % серый квадрат

200 300 moveto

0 72 rlineto

72 0 rlineto

0 -72 rlineto

сlosepath

0.5 setgray

fill

newpath % светлый квадрат

236 336 moveto

0 72 rlineto

72 0 rlineto

0 -72 rlineto

closepath

.8 setgray

fill

showpage % отобразить

Обратите внимание, что каждый квадрат начинается с оператора moveto. Это связано с тем, что оператор fill очищает текущую траекторию и после него не определена текущая точка, поэтому lineto и rlineto не имеют начальной точки. Оператор stroke также очищает текущую траекторию.