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

3.10.1. Почему никогда не произойдет «деление на нуль»?

Рассмотрим вертикальный отрезок прямой, для которого delx равен нулю. Почему же никогда не появляется код Р.у += (window. 1 - P.x) * dely/delx, который вызвал бы деление на нуль? Объясните также, Почему не появляется ни один из четырех операторов, где вычисляется delx/dely или del y/delx, если его знаменатель равен нулю.

3.10. Тематические задания

3.10.2. Выполняются ли два разделения во время одной итерации?

На первый взгляд кажется, что кодировку алгоритма Кохена-Сазерленда можно было бы улучшить, если заменить в нем такие строки, как else 1f (code & 2) на 1f (code & 2) и попытаться выполнить два «разделения» отрезка подряд. Тем не менее покажите, что такой подход приводит к вычислению ошибочных конечных точек и, как следствие, к катастрофе.

Тематическое задание 3.3. Реализация Canvas на Turbo С++

Уровень сложности III.

Представляется интересным разработать класс для рисования такого типа, как Canvas, в котором проработаны все детали, чтобы посмотреть, как многие его составляющие могут работать вместе. Иногда это делать даже необходимо, когда, например, недоступна библиотека поддержки, такая как OpenGL Здесь мы создадим класс Canvas для популярной графической платформы, использующей Turbo С++ фирмы Borland.

Мы хотим иметь реализацию класса Canvas, которая в основном имеет такой же интерфейс, как в листинге 3.6. В листинге 3.18 показана версия, разрабатываемая нами здесь (фрагменты, совпадающие с листингом 3.6, опущены). Конструктор берет нужную ширину и высоту, но не заголовок, поскольку Turbo С++ не поддерживает экранных окон с заголовками. Несколько новых частных элементов данных осуществляют внутреннее управление отсечением и преобразованием «окно - порт просмотра».

Листинг 3.18. Интерфейс для класса Canvas на Turbo С++ class Canvas { public:

Canvas(int width, int height): // constructor // конструктор

setUindow(),setViewport(),lineTo(),etc. as before II setwindow().setViewport().lineTo() и т.д.. как и раньше private:


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