Без темы
<<  Язык javascript Язык SMS  >>
Язык PostScript
Язык PostScript
Язык PostScript (Введение)
Язык PostScript (Введение)
Зачем нужен язык
Зачем нужен язык
Интерпретаторы
Интерпретаторы
Некоторые общие элементы языка
Некоторые общие элементы языка
Действия
Действия
Действия (продолжение)
Действия (продолжение)
Стандартные функции
Стандартные функции
Операции со стеком
Операции со стеком
Упражнение
Упражнение
Определение новых слов
Определение новых слов
Использование описаний
Использование описаний
Плоскость изображения
Плоскость изображения
Изменение системы координат
Изменение системы координат
Текущая точка
Текущая точка
Путь
Путь
Использование относительных сдвигов
Использование относительных сдвигов
Рисование пути
Рисование пути
Цвет изображения
Цвет изображения
Цвет (RGB)
Цвет (RGB)
Закрашивание области
Закрашивание области
Стек графических состояний
Стек графических состояний
Пример («Невозможный треугольник»)
Пример («Невозможный треугольник»)
Кстати, Эшер
Кстати, Эшер
Рисование треугольника
Рисование треугольника
Рисование треугольника (2)
Рисование треугольника (2)
Рисование треугольника (3)
Рисование треугольника (3)
Рисование треугольника (4)
Рисование треугольника (4)
Рисование треугольника (5)
Рисование треугольника (5)
Рисование треугольника (6)
Рисование треугольника (6)
А дальше
А дальше

Презентация на тему: «Язык PostScript». Автор: Joseph V Romanovsky. Файл: «Язык PostScript.ppt». Размер zip-архива: 1139 КБ.

Язык PostScript

содержание презентации «Язык PostScript.ppt»
СлайдТекст
1 Язык PostScript

Язык PostScript

Лекция 7

2 Язык PostScript (Введение)

Язык PostScript (Введение)

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

3 Зачем нужен язык

Зачем нужен язык

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

4 Интерпретаторы

Интерпретаторы

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

5 Некоторые общие элементы языка

Некоторые общие элементы языка

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

6 Действия

Действия

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

7 Действия (продолжение)

Действия (продолжение)

Вполне аналогично этим действиям определяются div — деление idiv — деление нацело mod — остаток от деления neg — изменение знака abs — нахождение абсолютного значения Все эти действия берут операнды из стека и кладут в стек.

8 Стандартные функции

Стандартные функции

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

9 Операции со стеком

Операции со стеком

dup

Копирование

pop

Сброс

exch

Обмен

roll

Перестановка

index

Выборка

copy

Копия участка

31 75 43

31 75 43 43

31 75 43

31 75

31 75 43

31 43 75

31 75 43 3 2

75 43 31

31 75 43 1

31 75 43 75

31 75 43 2

31 75 43 75 43

10 Упражнение

Упражнение

Вычисление гипотенузы по катетам % это комментарий % 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

11 Определение новых слов

Определение новых слов

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

12 Использование описаний

Использование описаний

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

13 Плоскость изображения

Плоскость изображения

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

14 Изменение системы координат

Изменение системы координат

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

15 Текущая точка

Текущая точка

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

16 Путь

Путь

Когда мы хотим что-то нарисовать, а ПостСкрипт предназначен именно для рисования, и все, о чем мы пока говорили, носит вспомогательный характер, мы должны создать рисовальный контур, который называется путем. Самый простой путь состоит из прямолинейных участков. Действие lineto проводит отрезок от текущей точки до точки, координаты которой берутся со стека. Эта концевая точка становится текущей и, конечно может быть использована дальше. Например, 300 250 moveto 350 250 lineto 350 220 lineto 400 220 lineto 400 190 lineto 450 190 lineto 450 160 lineto 500 160 lineto 500 130 lineto — получилась лесенка из четырех ступенек.

17 Использование относительных сдвигов

Использование относительных сдвигов

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

18 Рисование пути

Рисование пути

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

19 Цвет изображения

Цвет изображения

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

20 Цвет (RGB)

Цвет (RGB)

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

21 Закрашивание области

Закрашивание области

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

22 Стек графических состояний

Стек графических состояний

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

23 Пример («Невозможный треугольник»)

Пример («Невозможный треугольник»)

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

24 Кстати, Эшер

Кстати, Эшер

25 Рисование треугольника

Рисование треугольника

%! Начало файла /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 % За начальную принята нижняя точка картинки,так % что начальная точка светлосерой части % отстоит на один шаг влево и девять шагов вверх

26 Рисование треугольника (2)

Рисование треугольника (2)

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

27 Рисование треугольника (3)

Рисование треугольника (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 градусов /cos30 0.75 sqrt def

28 Рисование треугольника (4)

Рисование треугольника (4)

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

29 Рисование треугольника (5)

Рисование треугольника (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

30 Рисование треугольника (6)

Рисование треугольника (6)

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

31 А дальше

А дальше

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

«Язык PostScript»
http://900igr.net/prezentacija/russkij-jazyk/jazyk-postscript-98427.html
cсылка на страницу

Без темы

322 презентации
Урок

Русский язык

100 тем
Слайды