Приводимая ниже процедура также рисует звезду, но без всякой сложной тригонометрии:

/drawStar{ % stack: х у % в стеке находятся х у moveto currentpoint translate 4{ 72 0 lineto currentpoint translate

33 Ф. Хилл

1026

Приложение Г. Введение в PostScript*

-144 rotate
} repeat closepath fill } def

Объясните, как работает этот алгоритм на примере вызова 300 400 drawStar. Где расположен центр этой звезды? Где находится начало координат системы, после того как звезда нарисована?

Г5. Команды решений и итераций Во всех языках программирования предусмотрены способы проверки величин, хранящихся в памяти, и выполнения различных операций в зависимости от результатов этой проверки. Кроме того, поддерживаются также команды управления повторением некоторого действия определенное число раз. Разумеется, язык PostScript также обладает такими свойствами.

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

numl num2 operator -» bool

где numl и numZ - числа, operator - один из операторов из списка, a bool - это true или false.

Пусть а и Ь являются числовыми величинами. Тогда, если обозначить словом «iff» понятие «if and only if> («тогда и только тогда»), мы имеем:

a b eq выдает true iff а - b; a b пе выдает true iff а ф b: a b ge выдает true iff a > b: a b le выдает true iff a <, b: a b gt выдает true iff a > b: a b It выдает true iff a < b:

(Эти команды соответственно эквиваленты следующим операторам языка С: ==, !=, >=, <=, >, <,.)


⇐ Предыдущая| |Следующая ⇒