Читаем Цифровой журнал «Компьютерра» № 146 полностью

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

Под указательным пальцем на световом пере находилась кнопка спуска

Решение этой проблемы вылилось в разработку обобщённого понятия «ограничитель» (constraint), описывающего границы самых разнообразных объектов, формируемых Sketchpad. Тогда же Сазерленд пришёл к мысли об унификации элементов, составляющих рисунок в Sketchpad. Он предложил представлять любой нарисованный элемент n-компонентной структурой, в которой атомарной единицей был бы компонент.

Структура n-компонентного элемента «линия»

Например, компонент «отрезок» представлялся двумя компонентами «точка», каждый из которых представлялся двумя компонентами "X"- и "Y"-координаты. В свою очередь, треугольник составляется из трёх компонентов «отрезок». С помощью компонентов типа «ограничитель» можно было задать отношения между визуальными компонентами. Установив ограничитель «параллельность» между двумя отрезками, можно было менять координаты одного из них, не заботясь об изменении координат другого отрезка. Тот автоматически перерисовывался параллельным первому. Точно так же, выбрав ограничитель «равенство», можно было сделать все грани многоугольника одинаковыми, превратив его в равнобедренный.

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

Выравнивание фигур с помощью ограничителя «параллельность». Обратите внимание на ряд функциональных клавиш у левого края дисплея

Разработав базовые подходы к визуализации элементов рисунка, Сазерленд озаботился его хранением. Для быстрого вывода рисунка на экран компьютеру требовалась структура, хранящая координаты массива точек, составляющих рисунок. В Sketchpad каждая точка описывалась 36-разрядным словом, двадцать бит которого содержали координаты X и Y, а шестнадцать были указателем на элемент n-компонентной структуры, к которой принадлежит точка. Для проектировщика же требовалось хранить сведения обо всех элементах n-компонентоной структуры, составляющей рисунок.

Чтобы унифицировать эти данные, Сазерленд позаимствовал подход, применявшийся в редакторе Scopewriter, где файл, содержащий сведения о том или ином символе, представлял собой стек шестнадцатибитных указателей на элемент. Сазерленд расширил это представление, введя так называемую «кольцевую структуру» — замкнутый буфер, содержащий указатели на элементы n-компонентной структуры.

Родительские элементы в кольцевой структуре именовались «курица» (hen), а следовавшие за ней дочерние элементы логично обзывались «цыплятами» (chicken). Специальная процедура позволяла дополнить любую n-компонентную структуру новыми дочерними элементами, разместив «цыплят» позади «курицы». Кольцевая структура обеспечивала компьютеру возможность быстро просматривать множество родительских и дочерних элементов, выбирая необходимые для отображения на экране.

Создав в Sketchpad элементы лица, Сазерленд научил картинку подмигивать

Усилиями Сазерленда в библиотеку хранимых компонентов Sketchpad попали не только геометрические фигуры, но и символы алфавита, цифры, научные символы, радиотехнические элементы и даже такие элементы, как «глаз», «нос», «рот», позволяющие нарисовать, например, такое лицо.

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

Сделанный на Sketchpad чертёж моста с «привязанными» к элементам его конструкции расчётами механических напряжений

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

Похожие книги