Отсечение является фундаментальной операцией, которая в течение многих лет привлекала к себе повышенное внимание. Попутно были разработаны некоторые другие подходы. Некоторые из них мы изучим в тематических заданиях в конце этой главы и в главе 4.

Глава 3. Дополнительные инструменты для рисования

Френсис Хилл

Практическое упражнение 3.3.1. Ручная имитация clipSegment()

Пройдем вручную процедуру отсечения для случая окна с координатами (left, right, bottom, top) = (ЗО, 220,50,240) и следующими отрезками прямых:

1. р\ - (40,140), р2 - (100,200);

2. pi - (10,270),р2- (300,0);

3. р1-(20,10),р2-(20,200);

4. pl-(0,0),p2-(250,250).

Для каждого случая определите конечные точки отсекаемых отрезков и для визуальной проверки сделайте эскиз всей ситуации на миллиметровке.

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

Представляется естественным применять классы и пользоваться теми возможностями, которые они предоставляют для сокрытия данных. Поэтому мы разработаем класс, называемый Canvas (полотно), который обеспечивает удобную графическую канву для рисования прямых, многоугольников и прочих интересующих нас вещей. Этот класс предоставляет простые методы создания желаемого экранного окна, установки мирового окна и порта просмотра; кроме того, класс гарантирует правильное преобразование из окна в порт просмотра. В нем предлагаются подпрограммы moveToC) и lineToO, нравящиеся многим программистам, а также полезные подпрограммы «черепашьей графики», которые мы рассмотрим позднее в этой главе.


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