1) масштабирование с множителем 5,

2) поворот на угол А,

3) перемещение на (фс, йу), выполняемых именно в этом порядке. Список всех вентилей схемы хранится вместе с параметрами преобразований для каждого из них.

Френсис Хилл

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

clear the screen // очищаем экран

ford - 0: 1 < numberOfGates: i++)

5.5. Использование аффинных преобразований в программах

// for each gate

// для каждого вентиля

{

pushCTO: // remember the СТ // запоминаем СТ

transiate2D(dx[i]. dy[i]): // apply the transformation // применяем преобразование

rotate2D(A[i]):

scale2D(S[i]. S[i]):

drawGate(type[i]): // draw one of the two types // рисуем один из двух типов рорСТО: // restore the СТ // восстанавливаем СТ }

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

Практические упражнения

5.5.1. Разработка преобразований В предположении, что OpenGL недоступен, детально опишите следующие подпрограммы, выполняющие элементарные изменения системы координат:

void scale2D(double sx. double sy): void translate2D(double dx. double dy);

5.5.2. Реализация «вталкивания» и «выталкивания» в стеке преобразований Определите, при отсутствии OpenGL, соответствующие типы данных для стека преобразований и напишите подпрограммы pushCTO and рорСТО.

5.5.3. Мозаика из шестиугольников Гексагональный узор предлагает богатый набор мозаик, поскольку правильные шестиугольники точно совмещаются друг с другом, как в пчелиных сотах. На рис. 5.46 показано девять столбцов упакованных шестиугольников. Эти шестиугольники начерчены пустыми, однако внутри них можно рисовать различные интересные фигуры.


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