Лекция 7 Язык PostScript. Язык PostScript (Введение) В этой лекции мы начнем заниматься одним интересным языке программирования, который сильно отличается.

Презентация:



Advertisements
Похожие презентации
Лекция 8 Кривые линии и ограничение изображения. Дуга окружности Конечно же, хочется рисовать не только прямые линии, но и …, разумеется, например, окружности.
Advertisements

Познакомиться с созданием рисунков в QBasic, изучить графические примитивы, научиться их применять на практике.
Графика REM, SCREEN, LINE, PSET, CIRCLE, PAINT, DRAW…
Графика в QBASIC РИСОВАНИЕ ПРЯМОУГОЛЬНИКОВ РИСОВАНИЕ ОКРУЖНОСТЕЙ Режимы экрана РИСОВАНИЕ дуг эллипсов Закраска произвольной области.
Операторы машинной графики. содержание Общие сведения PSET LINE DRAW CIRCLE PAINT.
Информатика и ИКТ 5 класс Графические исполнители в среде программирования Free Basic.
Ребята, с построением графиков функций мы с вами уже встречались и не раз. Мы с вами строили множества линейных функций и парабол. В общем виде любую.
К. Поляков, Программирование на алгоритмическом языке Введение.
Основные графические возможности языка QBASIC Разработала: учитель информатики МБОУ СОШ 49 Веревкина В.Н.
Использование графических методов. DRAW.BEGIN(DRAWAREA1) DRAW.BEGIN(FMain) DRAW.LINE (X1,Y1,X2,Y2) Использование графических методов. С помощью методов.
Информатика – 9 -11класс Булатова А.В. учитель информатики МОУ СОШ 20.
Тексты в памяти компьютера. При двоичном кодировании текстовой информации чаще всего каждому символу ставится в соответствие уникальная цепочка из 8 нулей.
Информатика и ИКТ 6 класс Гимназия 1 г. Новокуйбышевска Учитель информатики: Красакова О.Н. Информатика и ИКТ. 6 класс Графические исполнители в среде.
ОПЕРАЦИИ И СТАНДАРТНЫЕ ФУНКЦИИ языка PASCAL. Темы: Операции Функции Приоритетность.
Графика в QBasic 1. В QBASIC существуют специальные графические операторы для создания изображений, но они требуют переключения в другой режим работы.
Программирование графических изображений Программирование графических изображений на языке Бейсик 256.
Paint это программа для рисования на компьютере. Для того чтобы открыть Paint нужно нажать на кнопку «Пуск», навести мышку на пункт «Программы», из списка.
Машинная графика Операторы построения точки, отрезка, прямоугольника, закрашенного прямоугольника.
Основы обработки графических изображений. Что такое Paint?
Программирование в ЛОГО Процедуры с параметрами. Ранее мы научились писать программы на листе программ и заставлять черепашек выполнять придуманные нами.
Транксрипт:

Лекция 7 Язык PostScript

Язык PostScript (Введение) В этой лекции мы начнем заниматься одним интересным языке программирования, который сильно отличается от языков традиционной линии Паскаль- Си-Java. Это язык PostScript, алгоритмический язык, предназна- ченный для описания изображений. Он был разработан в 1985 году американской фирмой Adobe Systems, Inc., для того, чтобы упростить передачу информации из компьютера в принтер. С ростом разрешения принтеров, (количества точек на дюйм), объем информации о странице растет пропорционально квадрату этого разрешения.

Зачем нужен язык Возникла идея разработать алгоритмический язык, чтобы компьютер описывал на этом языке печатаемую страницу, а находящийся в принтере интерпретатор языка выполнял бы эту программу и тем самым рисовал страницу. Так и было сделано. Были разработаны специальные «постскриптовские» принтеры и даже высокоточные наборные устройства, работающие с этим языком.

Интерпретаторы В дальнейшем обнаружилось, что иногда (даже часто) хочется до печати изображения на бумаге или наборной пленке посмотреть, что получается, на экране дисплея. С этой целью были созданы интерпретаторы Постскрипта, работающие в обычном компьютере. Эти интерпретаторы оказались очень удобны; они позволяют не только показывать результат на экране, но и печатать его на практически любом принтере (вплоть до самого дешевого 9- точечного), а не только на специальном. Более того, они позволяют выводить результаты в виде графического файла в одном из стандартных форматов. Наиболее распространен и известен интерпретатор GhostScript, которым будем пользоваться и мы.

Некоторые общие элементы языка В основе лежит понятие стека, которое, я надеюсь, вам знакомо. Стек универсальное хранилище данных, чисел, строк, массивов, процедур. Каждый элемент данных занимает в стеке одно место, все места одинакового размера. Новый элемент располагается сверху. В Пост Скрипте есть некоторое (довольно большое) число стандартных слов, которые можно назвать командами, действиями, операторами, функциями или процедурами языка. Будем пользоваться этими названиями как синонимами, так как, например, слово add, описывающее сложение, нам естественно назвать операцией, слово sin, вычисляющее синус, функцией, а установку ширины линии действием или командой.

Действия Основные действия производятся с элементами стека. Например, программный текст add mul sub исполняется так: положить в стек число 32, выше 0.5, затем 43, затем 17, после этого выполнить действие add, затем mul, затем sub. Действие add сложение. Оно снимает со стека два числа, складывает их и кладет результат в стек. После этого действия в стеке будут лежать mul умножение. Аналогично сложению оно перемножает два снятых со стека числа, а результат кладет в стек. sub вычитание, верхнее число вычитается из нижнего, так что в нашем примере окончательно получится 2.

Действия (продолжение) o Вполне аналогично этим действиям определяются odiv деление oidiv деление нацело omod остаток от деления oneg изменение знака oabs нахождение абсолютного значения o Все эти действия берут операнды из стека и кладут в стек.

Стандартные функции exp Вычисление экспоненты log Десятичный логарифм ln Натуральный логарифм sqrt Квадратный корень cos Косинус угла, аргумент задается в градусах sin Синус угла atan Арктангенс, его аргумент задается как пара (числитель, знаменатель)

Операции со стеком dup копирование pop сброс exch обмен roll перестановка index выборка copy копия участка

Упражнение Вычисление гипотенузы по катетам % это комментарий % a b исходное состояние стека dup % a b b mul % a b*b exch % b*b a dup mul % b*b a*a add % b*b+a*a sqrt % желанный результат Очень важно, что такие действия, которые мы описываем сами, можно превращать в слова, а их потом наряду со стандартными словами используются для вычислений и для описания других слов. Например, /hypot{dup mul exch dup mul add sqrt}def

Определение новых слов Описание слова состоит из его названия со знаком косой черты, действий, составляющих слово, и завершающего слова def. И название и действия должны занимать по одной позиции стека, так что, если мы хотим, чтобы слово вызывало выполнение нескольких операций, этот набор операций должен быть помещен в фигурные скобки. Описание без фигурных скобок /h a b dup mul exch dup add sqrt def определит константу h по значениям a и b, выработан- ным в момент исполнения этого описания. Слово h будет класть эту константу в стек. Мы могли бы определить h и проще, с использованием слова hypot /h a b hypot def

Использование описаний Возможность добавления описаний просто замечательна, она используется и для введения констант и переменных. Да-да, и переменных, так как слова можно переопределять. Например, вот так выглядит прибавление единицы к счетчику iter и увеличение накопителя sum на величину, лежащую в стеке /iter iter 1 add def % в стек кладется название слова, затем связанное % с ним значение, которое увеличивается и % оставляется в стеке, затем это новое значение % связывается с данным словом. /sum exch sum add def % в стеке уже лежит значение, добавляемое к sum, % его нужно поменять местами с названием. Обратите внимание на то, что значение, лежащее в стеке, и название можно просто переставить, в стеке они равноправны.

Плоскость изображения Постскрипт манипулирует с таким привычным и школьным объектом как евклидова плоскость с введенной на ней системой самых обычных декартовых координат. Представьте себе просто лист бумаги. Первоначально начало координат находится в его левом нижнем углу, ось X идет вправо, ось Y вверх, единицей измерения является пункт (point), 1/72 часть дюйма. Углы измеряются в градусах и отсчитываются от оси X против часовой стрелки.

Изменение системы координат Начало координат можно изменить, для этого нужно положить в стек координаты нового начала, вычисленные в текущей координатной системе и выполнить действие translate, которое снимет эти координаты со стека и изменит систему a dup b add translate Можно изменить шкалу единиц отдельно по оси X и по оси Y, для этого служит действие scale. Отметим, что -1 1 scale выполняет зеркальное отображение плоскости. А можно еще повернуть систему координат: 35 rotate повернет координатные оси против часовой стрелки на 35°.

Текущая точка Есть понятие текущей точки, это такая особая системная переменная, которая может быть и не установлена. Ее установка выполняется действием moveto, которое снимает со стека два числа и трактует их как новые координаты текущей точки. Например, moveto Слово currentpoint кладет в стек координаты текущей точки. Наряду с moveto, работающей с абсолютными координатами точки, имеется действие rmoveto, добавляющее к координатам текущей точки требуемые значения. Таким образом, для того, чтобы сдвинуть текущую точку вверх на 120, нужно выполнить rmoveto

Путь Когда мы хотим что-то нарисовать, а Пост Скрипт предназначен именно для рисования, и все, о чем мы пока говорили, носит вспомогательный характер, мы должны создать рисовальный контур, который называется путем. Самый простой путь состоит из прямолинейных участков. Действие lineto проводит отрезок от текущей точки до точки, координаты которой берутся со стека. Эта концевая точка становится текущей и, конечно может быть использована дальше. Например, moveto lineto lineto lineto lineto lineto lineto lineto lineto получилась лесенка из четырех ступенек.

Использование относительных сдвигов У lineto, конечно, есть «брат», работающий с приращениями, и его, конечно, зовут rlineto. Вот тот же пример moveto 50 0 rlineto rlineto Вот бы цикл устроить и написать просто число повторов! Такой цикл есть. Он выполняется командой repeat, перед которой пишется число повторов и в фигурных скобках повторяемое действие. Вот так moveto 4 { 50 0 rlineto rlineto } repeat

Рисование пути Теперь можно накопленный путь нарисовать. Для этого есть действие stroke. При исполнении stroke путь и текущая точка теряются, и нужно все начинать заново. Есть много возможностей изменения свойств проводимой линии. Прежде всего, можно установить ширину линии. Ширина также измеряется в пунктах, но при этом, если вы измените масштаб, то ширина изменится. Для установки используется команда setlinewidth, например, 0.5 setlinewidth Можно изменить «пунктирность» линии (по умолчанию линия, конечно, сплошная), способ стыковки прямоугольных участков, способ оформления свободного конца, но это потом!

Цвет изображения Очень важна возможность менять цвет изображения. Цвет можно выбирать как градацию серого (это очень удобно, если у вас черно-белый принтер, потому что он сможет изобразить серый цвет любой яркости, смешивая черные и белые точки в нужной пропорции). Установка этой градации выполняется действием a setgray где a задает этот уровень, 0 для сплошного черного, 1 для сплошного белого, чем ближе к 1, тем светлее. Другая возможность выбор полноценного цвета. В Постскрипте используются системы описания цветов RGB и CMYK. Мы рассмотрим только одну из них.

Цвет (RGB) В системе RGB цвет получается смешением красного (Red), зеленого (Green) и синего компонентов (Blue). Доля каждого компонента лежит между 0 и 1. Наиболее удобные цвета можно заранее описать как команды. Например, /RED{ setrgbcolor}def % красный /WHITE{ setrgbcolor}def % белый /YELLOW{ setrgbcolor}def % желтый /BROWN{ setrgbcolor}def % коричневый Можно с помощью Пост Скрипта хорошо поэкспериментировать с разными цветами. Отметим, что постскриптовские краски «непрозрачные», что было под краской, уже не видно.

Закрашивание области Мало того, что мы можем нарисовать построенный путь. В случае, если этот путь замкнут, можно закрасить его внутренность (залить ее) установленным в настоящее время цветом. Заливку выполняет команда fill. Как и stroke, эта команда уничтожает использованный ею путь и установку текущей точки. Но что же делать, если мы хотим нарисовать, например, желтую фигуру с зеленой рамкой? Должен же быть какой-то выход. Выход есть.

Стек графических состояний Вся совокупность установок, влияющих на рисование объектов, цвет, толщина и другие параметры линии, начало координат, масштабы и направление координатных осей, все это образует графическое состояние. Имеется специальное хранилище графических состояний, конечно же, тоже стек; и текущее графическое состояние можно сохранить в стеке командой gsave, а затем восстановить командой grestore. Таким образом, чтобы нарисовать желтую фигуру с зеленой рамкой, нужно выполнить gsave YELLOW fill grestore GREEN stroke т.-е. сохранить графическое состояние, установить желтый цвет, залить им фигуру, восстановить графическое состояние (а значит и путь и цвет) и прорисовать контур.

Пример («Невозможный треугольник») Рассмотрим пример, в кото- ром все, что мы уже узнали, используется для рисования красивой картинки. (Это «Невозможный треугольник» Пенрозов, использованный замечательным голландским художником М. Эшером для своей литографии «Водопад».)

Кстати, Эшер

Рисование треугольника %! Начало файла /l{lineto}def /S{stroke}def % Сокращения /FS{gsave setgray fill grestore S}def % закраска и обвод. Обратите внимание: % уровень "серости" берется из стека /Triangle{ P1 0.5 FS M P1 0.8 FS M P1 S}def % Фигура состоит из трех одинаковых частей серого, % светло-серого и белого цвета, повернутых на 120º. % Рисование контура выполняет P1, а поворот и % перенос начальной точки - M % За начальную принята нижняя точка картинки,так % что начальная точка светлосерой части % отстоит на один шаг влево и девять шагов вверх

Рисование треугольника (2) /M{p1 1 L 9 U translate -120 rotate} def % p1 - начальная точка (см. ниже) % команды L и U выполняют шаги влево и вверх % будет и команда R для шагов вправо /U { step mul add} def % шаг вверх прост: умножаем число шагов % на размер шага, определяющий масштаб, % и прибавляем результат к координате Y % точки, лежащей в стеке.

Рисование треугольника (3) % Нам потребуется команда, которая к точке % (x0,y0) прибавляет (a*x1,a*y1). % Напишем эту команду, фиксируя состояние % стека после каждого действия /offset { % x0 y0 a x1 y1 - начальное состояние 2 index mul % x0 y0 a x1 a*y1 3 1 roll mul % x0 y0 a*y1 a*x1 4 3 roll add % y0 a*y1 x'=x0+a*x1 3 1 roll add } def % Имея команду offset, написать шаги влево и % вправо уже нетрудно, нужно только запасти % одну константу - косинус 30 градусов /cos sqrt def

Рисование треугольника (4) /L {step mul cos30 neg 0.5 offset}def /R {step mul cos offset}def % С командой M покончено. Параметр step % остается не определенным, % - оставим его на "потом".

Рисование треугольника (5) % Теперь P1: если присмотреться, то видно, что % каждый кусок рисуется как один контур /P1{ p1 moveto p2 l p6 l p4 l p8 l p13 l p16 l p17 l p18 l p14 l p15 l p9 l p11 l p10 l p12 l p7 l p1 l}def % точки рХ выражаются друг через друга /p1 {0 0} def % начало /p2 {p1 4 U} def /p16 {p1 5 U}def % вверх от p1 /p17 {p1 8 U} def % дальше без комментариев /p15{p2 2 R}def /p3{p1 1 R}def /p7{p1 9 R}def /p4{p3 1 U}def /p5{p3 2 U}def /p6{p3 3 U}def /p14{p3 5 U}def /p18{p3 7 U}def /p8{p4 3 R}def /p10{p4 4 R}def /p12{p4 8 R}def /p9{p8 3 U}def /p13{p8 4 U}def /p11{p10 2 U}def

Рисование треугольника (6) % осталось выбрать шаг, сдвинуть начало % координат и нарисовать /step 40 def translate Triangle showpage % завершающее действие, которое разрешает % принтеру вывести готовую страницу

А дальше Дальше нужно упражняться. Следующий раз будут кривые линии и другие более сложные конструкции языка.