class="p1"> •GUI.cpp
До главы 16 мы можем игнорировать файлы графического пользовательского интерфейса.
Задание
Это задание напоминает программу “Привет, мир!”. Его цель — ознакомить вас с простейшими графическими средствами.
1. Напишите программу, создающую пустой объект класса Simple_window размером 600×400 пикселей с меткой Мое окно, скомпилируйте ее, отредактируйте связи и выполните. Помните о том, что вы должны подключить библиотеку FLTK, описанную в приложении Г, вставить заголовочные файлы Graph.h, Window.h, GUI.h и Simple_Window.h в ваш код, а также включить в проект файлы Graph.cpp и Window.cpp.
2. Добавьте примеры из раздела 12.7 один за другим, сравнивая их друг с другом.
3. Выполните программу, внеся небольшие изменения (например, измените цвет, местоположение фигур или количество точек) в каждом из примеров.
Контрольные вопросы
1. Зачем нужна графика?
2. Почему нельзя обойтись без графики?
3. Чем графика интересна программисту?
4. Что такое окно?
5. В каком пространстве имен находятся наши классы графического интерфейса (наша графическая библиотека)?
6. Какие графические файлы необходимы для использования графических средств из нашей библиотеки?
7. Что представляет собой простейшее окно?
8. Что представляет собой минимальное окно?
9. Что такое метка окна?
10. Как задать метку окна?
11. Что собой представляют экранные, оконные и математические координаты?
12. Приведите примеры простых фигур, которые можно отобразить на экране.
13. Какие команды связывают фигуру с окном?
14. Какие основные фигуры можно использовать для того, чтобы нарисовать шестиугольник?
15. Как вывести текст в окне?
16. Как поместить в окне фотографию вашего лучшего друга или подруги? Напишите свою программу.
17. Представьте, что вы создали объект класса Window, но на экране ничего не появилось. Перечислите возможные причины.
18. Представьте, что вы создали объект класса Shape, но на экране ничего не появилось. Перечислите возможные причины.
Термины
Упражнения
Для выполнения приведенных ниже изображений рекомендуем использовать класс Simple_window.
1. Нарисуйте прямоугольник как объект класса Rectangle и как объект класса Polygon. Сделайте линии объекта класса Polygon красными, а линии объекта класса Rectangle синими.
2. Нарисуйте объект класса Rectangle с размерами 100×300 и поместите в него слово “Привет!”.
3. Нарисуйте ваши инициалы высотой 150 пикселей. Используйте толстую линию. Нарисуйте каждый инициал другим цветом.
4. Нарисуйте доску для игры в крестики-нолики размером 3×3, чередуя белые и красные квадраты.
5. Нарисуйте красную рамку шириной один дюйм вокруг прямоугольника, высота которого составляет три четверти высоты вашего экрана, а ширина — две трети ширины экрана.
6. Что произойдет, если вы нарисуете фигуру, которая не помещается в окне? Что произойдет, если вы нарисуете окно, которое не помещается на экране? Напишите две программы, иллюстрирующие эти эффекты.
7. Нарисуйте двумерный дом анфас, как это делают дети: дверь, два окна и крыша с дымовой трубой. Детали можете выбрать сами, можете даже нарисовать дымок из трубы.
8. Нарисуйте пять олимпийских колец. Если помните их цвета, то раскрасьте их.
9. Выведите на экран фотографию вашего друга. Напишите его имя в заголовке окна и в заголовке внутри окна.
10. Нарисуйте диаграмму файлов из раздела 12.8.
11. Нарисуйте ряд правильных многоугольников, вложенных друг в друга. Наиболее глубоко вложенный многоугольник должен быть равносторонним треугольником, вложенным в квадрат, вложенный в пятиугольник, и т.д. Для любителей математики: пусть все точки каждого N - многоугольника касаются сторон (N+1) - многоугольника.
12. Суперэллипс — это двумерная фигура, определенная уравнением
Поищите в веб информацию о суперэллипсе, чтобы лучше представить его себе. Напишите программу, которая рисует звездообразные шаблоны, соединяя точки, лежащие на суперэллипсе. Пусть параметры a, b, m, n и N вводятся как аргументы. Выберите N точек на суперэллипсе, определенном параметрами a, b, m и n. Пусть эти точки лежат на равном расстоянии друг от друга. Соедините каждую из этих N точек с одной или несколькими другими точками (если хотите, можете задать количество таких точек с помощью дополнительного аргумента или использовать число N–1, т.е. все другие точки).
13. Придумайте способ раскрасить контур суперэллипса из предыдущего упражнения. Нарисуйте разные линии разным цветом.
Послесловие
В идеальном проекте каждая сущность непосредственно представляется в программе. Часто мы выражаем наши идеи в виде классов, реальные вещи — в виде объектов классов, а действия и вычисления — в виде функций. Графика — это область, в который эта мысль нашла очевидное воплощение. У нас есть понятия, например окружности и многоугольники, и мы выражаем их в программе в виде классов, например Circle и Polygon. Графика отличается от других приложений тем, что, создавая графические программы, программист может сразу видеть объекты классов на экране. Иначе говоря, состояние такой программы непосредственно доступно для наблюдения — в большинстве приложений этой возможности мы лишены. Это непосредственное соответствие между идеями, кодом и выводом делает программирование графики очень привлекательным. Однако помните, что графика — это лишь иллюстрация общей идеи использования классов для выражения основных понятий в виде кода. Эта идея носит намного более общий характер: все наши идеи могут быть выражены в коде либо в виде класса, либо в виде объекта класса, либо в виде совокупности классов.
Глава 13
Графические классы
“Язык, не изменяющий ваш образ мышления,
изучать не стоит”.
Расхожее мнение
В главе 12 описано, что можно сделать с помощью графики и набора простых интерфейсных классов и как это сделать. В этой главе рассматриваются многие из этих классов. Она посвящена проектированию, использованию и реализации индивидуальных интерфейсных классов, таких как Point, Color, Polygon и Open_polyline, а также методам их использования. В следующей главе будут изложены идеи, связанные с проектированием связанных классов, а также описаны другие их методы реализации.
13.1. Обзор графических классов
Библиотеки графики и графического пользовательского интерфейса предоставляют множество возможностей. Слово “множество” означает сотни классов, часто содержащих десятки функций. Их описания, справочные руководства и документация напоминают учебники по ботанике, в которых перечислены тысячи растений, упорядоченных в соответствии с устаревшей классификацией. Это обескураживает! Обзор возможностей совершенных библиотек графики и графического пользовательского интерфейса может быть увлекательным занятием. Он может вызвать у читателей ощущения