3. содержание практических работ по теме «графика

advertisement
1
Санкт-Петербургское государственное бюджетное профессиональное
образовательное учреждение
«Колледж информационных технологий»
МЕТОДИЧЕСКИЕ УКАЗАНИЯ
для выполнения практических работ по теме «Графика»
дисциплины «Основы алгоритмизации и
программирования»
для специальности 09.02.05 (230701)
«Прикладная информатика в экономике»
Разработала
преподаватель СПб ГБПОУ:
Матысик Ирина Алексеевна
СПб 2015
2
Методическая разработка рассмотрена на заседании цикловой комиссии
спецдисциплин. Рекомендована к использованию в качестве методических указаний
для проведения практических работ по дисциплине «Основы алгоритмизации и
программирования» для специальности 09.02.05 (230701) «Прикладная информатика в
экономике».
Протокол от «____»__________20___г. №______
Председатель комиссии
Ф.И.О.
3
АННОТАЦИЯ
Представленные методические указания для выполнения практических работ
являются частью учебно-методического комплекса по учебной дисциплине
вариативного цикла «Основы алгоритмизации и программирования» для
специальности 09.02.05 (230701) «Прикладная информатика в экономике».
Методические указания предназначены для студентов очной формы обучения. В
пособие представлены цели и задачи комплекса практических работ по дисциплине,
правила их проведения и критерии оценивания. В методических указаниях содержится
теоретический материал в компактной форме, посвященный программированию
графики в визуальной среде. Для каждой практической работы указаны ее тема, цель, а
так же дифференцированное задание на практическую часть. В конце каждой
практической работы представлен список вопросов для контроля полученных при
выполнении практической работы знаний и умений.
Комплекс практических работ по теме «Графика» снабжен иллюстративным
материалом в виде изображений фрагментов работающих приложений, относящихся к
теме практической работы. Для некоторых практических работ имеются фрамегменты
программного кода с подробными пояснениями для освещения сложных вопросов,
требующих повышенного внимания от студентов.
4
ОГЛАВЛЕНИЕ
ВВЕДЕНИЕ................................................................................................................... 6
1. ОБЩИЕ ПОЛОЖЕНИЯ............................................................................................. 7
1.1. Назначение методических указаний ............................................................ 7
1.2. Правила выполнения практической работы ................................................ 8
1.3. Порядок выполнения практической работы................................................ 9
1.4. Правила защиты практической работы ....................................................... 9
1.5. Критерии оценивания практической работы ............................................ 10
2. ТЕОРЕТИЧЕСКАЯ ЧАСТЬ ПРАКТИЧЕСКИХ РАБОТ ПО ТЕМЕ «ГРАФИКА»........... 11
2.1. Компонент «Картинка» (Image).................................................................... 11
2.2. Компонента «Фигура» (Shape) ..................................................................... 12
2.3. Технология перетаскивания компонентов в графике.................................. 13
2.4. Назначение класса TCanvas .......................................................................... 15
2.5. Формулы вращения ....................................................................................... 17
2.6. Битовый образ ............................................................................................... 20
2.7. Режимы пера .................................................................................................. 23
2.8. Работа с цветом. Класс Graphics::TColor ..................................................... 24
3. СОДЕРЖАНИЕ ПРАКТИЧЕСКИХ РАБОТ ПО ТЕМЕ «ГРАФИКА» ............................ 26
Практическая работа №1. Построение графических фигур. Приложение
«Редактор фигур» ................................................................................................. 26
Практическая работа №2. Спецификации класса TCanvas. Приложение
«Графические примитивы» ................................................................................. 27
Практическая работа №3. Алгоритмы графических построений. Приложение
«Геометрическая фигура».................................................................................... 28
5
Практическая работа №4. Реализация вращения в графике. Приложение
«Вращение планет» .............................................................................................. 29
Практическая работа №5. Вращения в графике. Приложение «Часы» ............. 30
Практическая работа №6. Алгоритм спрайтовой анимации. Приложение
«Мультик» ............................................................................................................ 31
Практическая работа №7. Рисование по пикселям. Приложение «Графический
редактор» .............................................................................................................. 32
Практическая работа №8. Обработка цвета. Приложение «Эффекты с цветом»
............................................................................................................................... 33
СПИСОК ИСПОЛЬЗУЕМЫХ ИСТОЧНИКОВ ............................................................... 36
6
ВВЕДЕНИЕ
Учреждения среднего профессионального образования позволяют приобрести
студенту определенный круг ключевых знаний, умений и профессиональных
компетенций, которые обеспечат ему эффективную творческую профессиональную
деятельность в постоянно развивающихся социально-экономических условиях, быть
востребованным специалистом на рынке труда в области компьютерной индустрии.
Специфика подготовки обучающихся по специальности 09.02.05 (230701)
«Прикладная информатика в экономике» требует от студента знания не только
теоретических основ программирования, но и умения создавать реальное программное
обеспечение на конкретном языке программирования. Одной из технологий,
способствующей приобретению и развитию профессиональных компетенций
обучающихся по разработке программ, является проведение практических работ по
дисциплине «Основы алгоритмизации и программирования». Практическая работа
предполагает закрепление материала, пройденного на аудиторных теоретических
занятиях по курс «Основы алгоритмизации и программирования», и разработана на
данном теоретическом фундаменте.
Представленные методические указания к практическим работам составляют
часть учебно-методического комплекса по дисциплине «Основы алгоритмизации и
программирования». Сборник посвящен одному из разделов дисциплины и связан с
разработкой приложений для операционной системы Windows на основе графических
построений. Проекты разрабатываются на основе объектно-ориентированного
программирования и событийно-ориентированной технологии.
Комплекс предполагает наличие у студентов опыта работы в среде C++ Builder и
знания основ языка программирования C/C++. Перед выполнением задания следует
ознакомиться с необходимым теоретическим материалом по тематике практической
работы. Каждая практическая работа содержит цель, дифференцированную
постановку задания и критерии оценивания. Имеется картинка фрагмента
выполняющегося приложения, как примерный образец предполагаемого результата. В
конце каждой практической работы содержится список вопросов для контроля
качества усвоения материала и приобретенных практических умений. Внимательное
изучение указаний и консультирование у преподавателя поможет студенту разработать
программный код и получить положительную оценку за практическую работу.
Практические занятия проводятся в аудиториях колледжа и выполняются на
компьютерах. Работа ведется студентами индивидуально или совместно в команде.
Требования к содержанию комплекса практических работ по дисциплине «Основы
алгоритмизации и программирования» регламентированы для специальности 09.02.05:
федеральным
государственным
образовательным
стандартом
среднего
профессионального образования;
учебным планом;
рабочей программой учебной дисциплины;
потребностями ведущих учреждений, организаций и предприятий города.
7
1. ОБЩИЕ ПОЛОЖЕНИЯ
1.1. Назначение методических указаний
Выполнение комплекса практических работ по дисциплине «Основы
алгоритмизации и программирования» является составной частью образовательного
процесса по специальности 09.02.05 «Прикладная информатика в экономике».
В результате выполнения комплекса практических работ по дисциплине
«Основы алгоритмизации и программирования» обучающийся должен уметь:
составлять алгоритмы решаемых задач;
работать в среде программирования;
реализовывать построенные алгоритмы в виде программ на конкретном языке
программирования высокого уровня.
В результате выполнения комплекса практических работ по дисциплине
«Основы алгоритмизации и программирования» обучающийся должен знать:
принципы построения алгоритмов;
типы данных и базовые конструкции изучаемых языков программирования;
основные приемы программирования.
В результате выполнения комплекса практических работ по дисциплине
обучающийся должен приобрести следующие общие компетенции:
ОК 1. Понимать сущность и социальную значимость своей будущей профессии,
проявлять к ней устойчивый интерес.
ОК 2. Организовывать собственную деятельность, выбирать типовые методы и
способы выполнения профессиональных задач, оценивать их эффективность и
качество.
ОК 3. Принимать решения в стандартных и нестандартных ситуациях и нести за
них ответственность.
ОК 4. Осуществлять поиск и использование информации, необходимой для
эффективного выполнения профессиональных задач, профессионального и
личностного развития.
ОК 5. Использовать информационно-коммуникационные технологии в
профессиональной деятельности.
ОК 6. Работать в коллективе и команде, эффективно общаться с коллегами,
руководством, потребителями.
ОК 7. Брать на себя ответственность за работу членов команды (подчиненных),
результат выполнения заданий.
ОК 8. Самостоятельно определять задачи профессионального и личностного
развития, заниматься самообразованием, осознанно планировать повышение
квалификации.
ОК 9. Ориентироваться в условиях частой смены технологий в
профессиональной деятельности.
8
В результате выполнения комплекса практических работ по дисциплине
обучающийся должен приобрести следующие профессиональные компетенции:
ПК 1. Осуществлять разработку кода программного продукта на основе готовых
алгоритмов и компонентов.
ПК 2. Выполнять отладку программных модулей с использованием
программных и специализированных инструментов.
ПК 3. Выполнять тестирование программных модулей.
ПК 4. Осуществлять оптимизацию программного кода.
Список профессиональных компетенций составлен на основании размещения
дисциплины в вариативной части специальности 09.02.05 (230701) «Прикладная
информатика в экономике». Список носит рекомендательный характер и составлен на
основе исследования профессиональных компетенций схожих специальностей.
Представленные методические указания предназначены для того, чтобы помочь
студентам получить необходимые компетенции и подготовиться к эффективной
деятельности в качестве программиста. Выполнение заданий практических работ
поможет обучающимся быстрее адаптироваться к условиям их будущей
профессиональной деятельности.
1.2. Правила выполнения практической работы
Основная задача практических занятий - научиться применять теоретические
знания, полученные на лекциях при составлении программ на языке
программирования высокого уровня С/С++ в визуальной среде программирования C++
Builder. Поэтому к выполнению практических работ студенты приступают после
подробного изучения соответствующего теоретического материала.
Перед выполнением первой практической работы студенты получают указания
от преподавателя по порядку проведения, защите и оценивании практических работ.
При выполнении практических работ следует придерживаться следующих действий:
перед проведением практической работы необходимо подготовить рабочее место
в соответствии с правилами ТБ;
во время выполнения практической работы студент должен придерживаться
порядка выполнения практической работы (См. пункт 1.3). При этом он может
пользоваться собственными конспектами лекций, рекомендованными учебниками,
информацией из Интернета, методическими указаниями к практическим работам,
справочной помощью интегрированной среды разработки программ;
после разработки программного кода решаемой задачи, необходимо защитить
практическую работу у преподавателя в соответствие правилами защиты практической
работы (См. пункт 1.4);
защита практической работы заканчивается ее оцениванием в соответствие с
критериями оценивания (См. пункт 1.5);
после окончания практической работы студент приводит в порядок
лабораторное оборудование на рабочем месте в соответствии с правилами ТБ.
9
1.3. Порядок выполнения практической работы
Общий порядок выполнения практической работы содержит следующие этапы:
1. Получение технического задания на практическую работу от преподавателя.
2. Внимательное чтение задания. В случае возникновения сложностей в
понимании поставленного задания, необходимо обратиться к преподавателю за
разъяснением.
3. Определение тематики и направления задания.
4. Чтение теоретического материала по выбранной тематике.
5. Формализация поставленной задачи в форме, удобной для дальнейшего
решения задачи на ЭВМ.
6. Определение входных данных к задаче, их тип, структуру, источники
поступления в программу.
7. Определение выходных данных - результатов работы программы, их тип,
структуру, способы отображения и хранения.
8. Разработка алгоритма решения задачи на ЭВМ в словесной форме на
естественном языке или с использованием графических обозначений (блок-схема).
9. Написание программного кода на алгоритмическом языке согласно
разработанному на предыдущем шаге алгоритму.
10.Ввод текста программы в ЭВМ и сохранение его в виде файла с расширением
.cpp. Программа пишется строго по заданию, должна отражать ход решения задачи, не
должна иметь лишних функций и ненужных.
11.Компиляция исходного текста программы в интегрированной среде
разработки программ. При возникновении ошибок данного этапа, необходимо их
исправить в соответствии с рекомендациями компилятора.
12.При отсутствии ошибок компиляции, запустить программу на выполнение.
13.Провести тестирование программы. Выбрать исходные данные и подготовить
контрольный пример решения задачи на ЭВМ (разработать тестовые наборы).
14.В случае несоответствия исходных данных результатам, выполнить отладку
программного кода с применением встроенных в интегрированную среду средств.
15.Проанализировать полученные результаты, убедиться в правильности
выполнения контрольного примера.
16.Оформить разработанный программный код, используя отступы и
комментария.
17.Подготовиться к защите, ответив на контрольные вопросы в конце
практической работы.
1.4. Правила защиты практической работы
Практическая работа заканчивается ее защитой. Во время защиты преподаватель
выясняет степень усвоения материала и полученных навыков. Основная цель защиты –
демонстрация студентом полученных при выполнении практической работы умений,
10
знаний, компетенций. При защите практической работе студент должен:
кратко сформулировать цель работы и порядок ее проведения;
четко пояснять назначение, цель и результат каждого этапа разработки
программы;
показать навыки работы с интегрированной средой программирования;
отвечать на вопросы преподавателя, связанные с теоретическими моментами
практической работы;
продемонстрировать работающую программу с заранее подготовленными
тестовыми наборами;
выполнять анализ полученных программой результатов;
отвечать на вопросы преподавателя по разработанному программному коду;
сделать вывод о проделанной работе.
1.5. Критерии оценивания практической работы
По результатам защиты практической работы, происходит ее оценивание.
Основными критерии для оценивания практической работы являются:
объем выполненной работы в процентах;
правильность функционирования программы по разработанным сценариям;
количество успешных ответов у преподавателя на защите;
качество оформления программного кода.
Оценку «Отлично» студент получает, если:
практическая работа выполнена в полном объеме;
свободно ориентируется в программном коде;
отвечает на все вопросы преподавателя.
Оценку «Хорошо» студент получает, если:
практическая работа в основном выполнена, за исключением незначительных
недоработок;
отвечает почти на все вопросы преподавателя.
Оценку «Удовлетворительно» студент получает, если:
практическая работа выполнена не в полном объеме и решает только часть
поставленной задачи;
многие вопросы у студента вызывают сложности при ответе.
Оценку «Не удовлетворительно» студент получает, если:
отсутствует результирующий программный продукт;
не ориентируется в поставленной задаче и способах ее решения;
отсутствует заинтересованность в получении умений и знаний.
11
2. ТЕОРЕТИЧЕСКАЯ ЧАСТЬ ПРАКТИЧЕСКИХ РАБОТ ПО ТЕМЕ
«ГРАФИКА»
В данной части методических указаний кратко представлен теоретический
материал, необходимый для выполнения практических заданий. Более подробную
информацию по теме «Графика» можно получить из дополнительных источников и
материала лекционных занятий по дисциплине. Некоторые разделы теоретической
части содержат фрагменты программного кода, изучив который, студенту будет
значительно проще выполнить поставленное задание на практическую работу.
Для выполнения практических работ по теме «Графика» студенту необходимо
иметь опыт работы в среде программирования C++ Builder при разработке
приложений для операционной системы Windows, уметь писать и отлаживать
программный код на языке программирования высокого уровня. Отметим основные
вопросы, требующие предварительной подготовки для выполнения практических
заданий.
1. Знать этапы разработки приложения в визуальной среде, их назначение и
способы реализации.
2. Представлять структуру окон среды и их назначение.
3.
Формулировать
основные
понятия
объектно-ориентированного
программирования и владеть ими при разработке программного кода.
4. Выполнять настройку свойств и уметь вызывать методы объектов средствами
интегрированной среды и программным кодом.
5. Создавать программный код обработчиков событий.
6. Разрабатывать графический интерфейс приложения с учетом требований
заказчика.
7. Реализовывать логическую составляющую приложения с использованием
основных конструкций и типов языка программирования.
2.1. Компонент «Картинка» (Image)
Компонент часто используется для украшения
приложения картинками. Компонент Image представляет
собой невидимый контейнер для отображения готового
изображения определенного графического формата (типа
BMP, WMF, ICO и другие). Находится на вкладке Additional
Палитры компонентов. Рассмотрим основные свойства
данного компонента.
Рисунок 1 – Компонент «Картинка»
Picture – отображаемая картинка в компоненте. Свойство является объектным.
12
AutoSize – при значении true размер компонента Image подгоняется к размеру
содержащегося в нем изображения, не искажая картинку.
Stretch – при значении true картинка подгоняется под реальный размер
компонента Image, искажая при этом рисунок.
Center – при значении true и размер компонента больше размера рисунка, то
центрируется изображение на площади Image.
Transparent - задает прозрачность изображения. Свойство действует только на
битовые матрицы. Прозрачным считается цвет левого нижнего пикселя.
Proportional – при значении true и при подгоне размера рисунка (Stretch=true)
сохраняются его пропорции, т.е. увеличиваются на одинаковый масштабный
множитель по высоте и ширине.
Спецификация свойства Picture:
Width, Height - задают размеры загруженного в Picture рисунка.
void LoadFromFile(путь к файлу) - выполняет загрузку картинки во время
выполнения программы.
void SaveToFile (путь к файлу) – сохранить картинку, расположенную в
компоненте Image в файл.
void Assign (объект_источник->Picture) – присваивание, копирование картинок.
2.2. Компонента «Фигура» (Shape)
Компонент Shape используется для отображения
различных геометрических фигур. Размер и положение
фигуры указывается с помощью свойств Height, Width, Left,
Top. Пользователь не может сам изменять размеры и
положение фигуры. Однако, используя события OnMouseUp
и OnMouseDown для фигуры, можно запрограммировать
необходимые действия. Находится на вкладке Additional.
Рисунок 2 – Компонент «Фигура»
Перечислим основные свойства компонента Shape.
Shape – задает нужную фигуру для рисования. Принимает значения:
stCircle - круг;
stEllipse - эллипс;
stRectangle - прямоугольник;
stRoundRect - прямоугольник со скругленными углами;
stRoundSquare - квадрат со скругленными углами;
stSquare - квадрат.
Pen – задает атрибуты карандаша для контура фигуры. Является объектным
свойством и имеет ряд настраиваемых атрибутов:
TColor Color - цвет линии, вычерчиваемой карандашом.
Style - вид (стиль) линии; может принимать значения:
13
psSolid - сплошная линия;
psDash - пунктирная линия, длинные штрихи;
psDot - пунктирная линия, короткие штрихи;
psDashDot – чередование длинного и короткого штрихов;
psDashDotDot – чередование одного длинного и двух коротких
штрихов;
psClear - линия не отображается.
Width - толщина линии (в пикселях) только для сплошного стиля.
Brush – задает атрибуты кисти для заливки замкнутых областей. Свойство
является объектным типом.
Color - цвет закрашивания замкнутой области;
Style – стиль заполнения области. Может принимать:
bsSolid - сплошная заливка;
bsClear - область не закрашивается;
bsHorizontal - горизонтальная штриховка;
bsVertical - вертикальная штриховка;
bsFDiagonal - диагональная штриховка с наклоном линий вперед;
bsBDiagonal - диагональная штриховка с наклоном линий назад;
bsCross - горизонтально-вертикальная штриховка, в клетку;
bsDiagCross - диагональная штриховка, в клетку.
2.3. Технология перетаскивания компонентов в графике
Известно, что расположение компонента на плоскости указывается в свойствах
Left и Top визульаных компонентов. Для осуществления механизма перетаскивания,
надо изменять данные свойства, написав программный код обработчиков событий от
мыши:
1. OnMouseDown – нажатие кнопки мыши (начало перетаскивания);
2. OnMouseMove – перемещение мыши (процесс перетаскивания);
3. OnMouseUp – отпускание кнопки мыши (завершение перетаскивания).
Обозначим (x0, y0) – старое положение компонента, (X, Y) – текущее положение
курсора мыши (параметры события). Пересчет нового положения объекта происходит
по формулам:
объект->Left = объект->Left + (X - x0);
(1)
объект->Top = объект->Top + (Y - y0);
Для реализации механизма перетаскивания потребуются следующие глобальные
переменные:
int
x0, y0;
//Координаты положения начала перетаскивания
bool
drag;
//Подтверждение перетаскивания:
//true – перемещение с нажатой кнопкой мыши
//false – перемещение без нажатой кнопки
Для перетаскиваемого компонента требуется написать обработчик события
14
OnMouseDown, в котором необходимо выполнить следующие действия:
x0=X;
//Зафиксировать координаты мыши в момент нажатия
y0=Y
drag=true;
//Сигнал о начале перетаскивания
При перемещении мыши по поверхности с удержанной левой кнопкой возникает
событие OnMouseMove для перетаскиваемого компонента, в котором вычисляется
новое положение объекта по предложенным выше формулам (1).
if (drag==true)
//Проверка, что кнопка мыши в нажатом состоянии
{
//Формулы пересчета }
Перетаскивание объекта завершается при отпускании кнопки мыши. При этом
возникает событие OnMouseUp для перетаскиваемого объекта, в котором надо
выключить флажок перетаскивания:
drag=false;
Пример. Перетаскивание фигуры осуществляется левой кнопкой мыши,
изменение размера фигуры – правой кнопкой мыши.
int x0, y0, kn;
bool drag;
//-----Начало перетаскивания-----------------------------void __fastcall TForm1::Shape1MouseDown
(TObject *Sender,TMouseButton Button, TShiftState Shift, int X, int Y)
{
x0=X;
y0=Y;
//Координаты начала перетаскивания
drag=true;
//Фиксация перетаскивания
if (Button==mbLeft) kn=1;
//Левая или правая
else
kn=2;
//Правая
}
//----Процесс перетаскивания------------------------------void __fastcall TForm1::Shape1MouseMove
(TObject *Sender, TShiftState Shift, int X, int Y)
{
if (drag==true)
//Нажата кнопка мыши
if (kn==1)
//Для левой кнопки - перетаскивание
{
Form1->Shape1->Left=Form1->Shape1->Left+(X-x0);
Form1->Shape1->Top=Form1->Shape1->Top+(Y-y0);
}
else
//Для правой кнопки – изменение размера
{
Form1->Shape1->Width=Form1->Shape1->Width+(X-x0);
Form1->Shape1->Height=Form1->Shape1->Height+(Y-y0);
15
x0=X;
y0=Y;
}
}
//-----Завершение перетаскивания---------------------------void __fastcall TForm1::Shape1MouseUp
(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y)
{
drag=false;
//Отключить перемещение
}
2.4. Назначение класса TCanvas
Ряд объектов (Form, Image, PaintBox и др.) имеют неопубликованное свойство
Canvas (холст, поверхность), с помощью которого можно рисовать на поверхности
этих компонентов. Свойство Canvas доступно только при выполнении приложения,
следовательно, изображения, полученные с помощью этого свойства, являются
динамическими и существуют только в процессе выполнения приложения.
Холст состоит из отдельных пикселей. Левый верхний имеет координаты (0,0), а
координаты правого нижнего пикселя зависят от размера холста, который можно
получить, обратившись к свойствам Height и Width того объекта, на котором рисуется
изображение. Координата X возрастает при перемещении слева направо, а координата
Y – при перемещении сверху вниз. Для выполнения операций с холстом используется
заголовочный файл Graphics.hpp.
Методы класса TCanvas позволяют выводить графические примитивы (точки,
линии, окружности, прямоугольники и т.д.). Свойства класса TCanvas задают
характеристики выводимых графических примитивов: цвет, толщину и стиль линий,
цвет и маску заполнения областей, характеристики шрифта при выводе текстовой
информации.
2.4.1. Свойства класса TCanvas
С помощью свойств происходит настройка параметров режимов рисования.
ClipRect – определяет доступную область для рисования в событии OnPaint.
Pixels[int X][int Y] - двумерный массив цветов пикселей изображения. С
помощью этого свойства можно получить доступ к любому пикселю картинки, чтобы
прочитать его или изменить.
PenPos - определяет текущее положение пера.
Pen (карандаш) – определяет атрибуты пера для рисования линий, границ и
геометрических фигур. Аналог свойства компонента Shape.
Brush (кисть) - используется для заливки (закрашивания) замкнутых областей,
например геометрических фигур. Аналог свойства компонента Shape.
Font – устанавливает параметры шрифта для текста на поверхности рисования.
Можно использовать стандартное диалоговое окно FontDialog.
16
2.4.2. Методы класса TCanvas
Методы строят графические изображения с учетом установленных свойств.
MoveTo(int x, int y) - перемещает графическое перо в новую пиксельную
позицию (x, y). При перемещении пера рисование не происходит.
LinеТо(int x, int y) - вычерчивает прямую линию от текущей позиции пера до
точки с координатами (x, y). После вычерчивания линии, координаты ее конца
являются текущей позицией пера.
Polyline(TPoint m[], int kol) - вычерчивает ломаную линию, последовательно
соединяя kol точек, координаты которых находятся в массиве m.
Polygon (TPoint m[], int kol) – работает аналогично методу PolyLine, но
вычерчивает закрашенный замкнутый многоугольник.
Rectangle(int x1, int y1, int x2, int y2) или void Rectangle(TRect r) – вычерчивается
прямоугольник c контуром и закрашенной областью.
FillRect(TRect r) - вычерчивает закрашенный прямоугольник без контура. Для
заполнения плоскости фигуры используются свойства объекта Brush.
FrameRect(TRect r) — только контур прямоугольника толщиной в один пиксель.
Используется объект Brush для задания свойств линии.
RoundRect(int x1, int y1, int х2, int у2, int
х3, int у3) – прямоугольник со скругленными
углами; параметры x3, y3 задают размер
эллипса скругления.
Рисунок 3 – Параметры метода RoundRect
Ellipse(int x1, int y1, int х2, int у2) или void
Ellipse(TRect r) - вычерчивает закрашенный эллипс
или окружность. Параметры задают координаты
прямоугольника, в который будет вписан эллипс.
Рисунок 4 – Параметры метода Ellipse
Arc(int x1, int y1, int х2, int у2, int х3, int у3,
int х4, int у4) - вычерчивает дугу окружности или
эллипса. Параметры x1, y1, х2, у2 задает
координаты
прямоугольника,
в
который
вписывается дуга: начальную и конечную точку
пересечения дуги эллипса с прямой, исходящей
из центра эллипса.
Рисунок 5 – Параметры метода Arc
17
Chord(int x1, int y1, int x2, int y2, int x3, int y3, int x4, int y4) – рисует хорду, т.е.
часть эллипса, образованного дугой и прямой линией, соединяющей концы дуги.
Параметры аналогичны методу Arc.
Pie(int x1, int y1, int x2, int y2, int х3, int у3, int х4, int у4) - рисует сектор эллипса
или круга. Параметры аналогичны методу Arc.
FloodFill(x, y, col, f) – закрашивает текущими настройками кисти замкнутую
фигуру с контуром цвета col. Параметры x, y задают координату точки начала
окрашивания; четвертый параметр – способ заливки. Может принимать значения:
fsBorder – залить всю область до границы с цветом col;
fsSurface – залить всю область до границы с любым цветом, кроме col.
TextOut(int x, int у, String s) – выводит строку s в позиции (x, y). Параметры
шрифта задаются свойством Font объекта Canvas. Фон текста закрашивается текущим
цветом кисти.
TextHeight(String s) и int TextWidth(String s) – возвращают пиксельную высоту и
ширину строки s с учетом установленного шрифта.
2.4.3. Событие графики
Событие OnPaint имеют все компоненты, у которых есть свойство Canvas,
кроме компонента Image. Именно в этом событии выполняют основную работу по
выводу графики на поверхность компонента (Canvas). Событие происходит каждый
раз, когда нужно перерисовать рисунок на холсте компонента. Перерисовка возникает,
когда изменяется содержимое холста компонента (например, при анимации) или когда
необходимо восстановить часть или весь компонент, если до этого он был перекрыт
другими компонентами. Операционная система сообщает приложению о
необходимости перерисовки путем вызова события OnPaint. Вызвать событие OnPaint
можно и программным способом методом Repaint() или Invalidate() компонента. Для
компонента Image данного события не требуется, т.к. в этом классе предусмотрены все
необходимые действия по перерисовки изображения в случае его порчи.
2.5. Формулы вращения
Для построения геометрических фигур используются различные математические
законы и формулы. Рассмотрим формулы вращения.
18
Рисунок 6 – Формулы вращения
Пример 1. Построение геометрических фигур по формулам вращения
Программа строит правильный многоугольник путем расчёта координат вершин
многоугольника по формулам вращения.
void __fastcall TForm1::Button3Click (TObject *Sender)
{
//Настройка параметров карандаша
PaintBox2->Canvas->Pen->Color = clBlack;
N = StrToInt(Edit2->Text);
//Число вершин в многоугольнике
int R = StrToInt(Edit3->Text);
//Радиус многоугольника вращения
p = new TPoint[N];
//Массив вершин многоугольника
int centerX = PaintBox1->Width/2; //Координаты центра многоугольника
int centerY = PaintBox1->Height/2;
float angle = M_PI*2/N;
//Размер угла вершины многоугольника
for(int i=0; i<N; i++)
//Заполнение вершин значениями по формулам
{
p[i].x = centerX + R * cos (angle*i);
p[i].y = centerY + R * sin (angle*i);
}
PaintBox2->Canvas->Polygon (p, N-1);
//Изобразить многоугольник
Пример 2. Движение одного объекта вокруг неподвижного другого объекта
#define RZ 50
//Радиус Земли
19
#define RL 30
//Радиус Луны
#define RO 200
//Радиус орбиты вращения
//Глобальные величины
int xc, yc, xl, yl;
//Центры Земли и луны
float ug=0;
//Угол вращения
//Событие прорисовки формы - начальные установки
void __fastcall TForm1::FormPaint(TObject *Sender)
{
//Прорисовка Земли
xc=Form1->Width/2
//Центр Земли
yc=Form1->Height/2;
Form1->Canvas->Brush->Color=clYellow;
//Цвет Земли
Form1->Canvas->Ellipse(xc-RZ, yc-RZ, xc+RZ, yc+RZ); //Земля
//Прорисовка Луны
xl=xc+RO;
/
/Центр Луны на оси Х
yl=yc;
Form1->Canvas->Pen->Color=Form1->Color;
//Контур Луны
Form1->Canvas->Brush->Color=clBlue;
//Цвет Луны
Form1->Canvas->Ellipse(xl-RL, yl-RL, xl+RL, yl+RL);
//Луна видна
Form1->Timer1->Enabled=true;
//включить таймер
}
//Событие таймера - движение луны
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
//Стереть Луну в старой позиции
Form1->Canvas->Brush->Color=Form1->Color;
Form1->Canvas->Ellipse(xl-RL, yl-RL, xl+RL, yl+RL);
//Рассчитать новое положение Луны
ug=ug+M_PI/100;
//Новый угол поворота
if (ug>=2*M_PI) ug=0;
//Пройден весь круг
xl=xc+RO*cos(ug);
//Новая позиция Луны
yl=yc-RO*sin(ug);
//Изобразить Луну на новом месте
Form1->Canvas->Brush->Color=clBlue;
//Луна видна
Form1->Canvas->Ellipse(xl-RL, yl-RL, xl+RL, yl+RL);
}
Пример 3. Изображение секундной стрелки часов
#define HS 2*M_PI/60.
//Угол в радианах для секундной стрелки
#define R 200
//Радиус циферблата
20
int xc, yc, x, y;
//Центры часов и координаты стрелки
float ug;
//Угол вращения
Word sek, min, h, msek, sek_tek; //Для времени
//Функция рисования секундной стрелки-------void strelka_sek (int x1, int y1, int x2, int y2, TColor c)
{
Form1->Canvas->Pen->Color=c;
//Цвет стрелки
Form1->Canvas->MoveTo(x1, y1);
//Из центра часов
Form1->Canvas->LineTo(x2, y2);
//До конца стрелки
}
//Событие прорисовки формы-------------------void __fastcall TForm1::FormPaint(TObject *Sender)
{
xc=Form1->Width/2;
//Центр часов
yc=Form1->Height/2;
DecodeTime(Time(), h, min, sek, msek); //Текущее время
x=xc+R*sin(sek*HS);
//Угол секундной стрелки
y=yc-R*cos(sek*HS);
strelka_sek(xc, yc, x,y, clRed);
//Нарисовать стрелку
Form1->Timer1->Enabled=true;
//включить таймер
}
//Событие таймера-----------------------void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
DecodeTime(Time(),h,min,sek_tek,msek); //Текущее время
if (sek_tek!=sek)
//Если время изменилось
{
Form1->Caption="Текущие секунды="+IntToStr(sek_tek);
trelka_sek(xc, yc, x,y, Form1->Color);//Стереть стрелку в старом положении
x=xc+R*sin(sek_tek*HS);
//Конец секундной стрелки
y=yc-R*cos(sek_tek*HS);
strelka_sek(xc, yc, x,y, clRed);
//Изобразить стрелку в новом положении
sek=sek_tek;
//Переприсвоение нового и старого времени
}
2.6. Битовый образ
Битовый образ - это невидимая графическая поверхность в памяти ПК, на
которой программа может строить изображение по пикселям. Класс TBitmap работает
с внеэкранной битовой матрицей для обеспечения быстрых операций создания,
копирования, преобразования и сохранения битового изображения. Класс часто
21
используется для хранения графического изображения с целью его восстановления в
случаях его искажения. Битовые образы используются в спрайтовых
мультипликационных программах, когда объект-спрайт двигается по некоторому
цветному фону, не затирая его при движении.
Битовый образ не является компонентом. Он создается как объект класса
TBitmap командой new и уничтожается командой delete или методом Free().
Последовательность действий для работы с битовым образом:
1. описать объект класса TBitmap, например: Graphics::TBitmap *bit;
2. выделить динамическую память, например: bit = new Graphics::TBitmap;
3. освободить динамическую память битового образа: bit->Free().
Перемещение рисунка происходит по следующему алгоритму:
вывести спрайт на экран в текущей позиции;
через некоторое время стереть спрайт;
рассчитать новое положение спрайта по формулам, учитывая предыдущие
координаты;
Подбором времени между выводом и удалением спрайта, а так же расстоянием
между старым и новым положением спрайта, можно добиться впечатления плавного
его движения.
2.6.1. Спецификация класса TBitmap
Canvas – область рисования на битовом образе.
TransparentColor – цвет, который будет считаться прозрачным (неотображаемым)
при выводе изображения на экран (по умолчанию цвет левого нижнего пикселя
картинки в битовом образе).
Transparent – если свойство имеет значение true, то фрагменты рисунка цвета
TransparentColor, не будут выведены, т.е. через них будет проглядывать фон.
Width, Height – ширина и высота изображения в битовом образе.
Empty – если свойство имеет значение true, то битовый образ не содержит
никакого изображения.
Modified – указывает, был ли изменен битовый образ. Если свойство имеет
значение true, то образ был модифицирован с момента загрузки или создания.
Monochrome – определяет, будет ли изображение в Bitmap монохромным.
void LoadFromFile (“файл .bmp”), void SaveToFile (“файлу .bmp”) – загрузить или
сохранить картинку битового образа в файле .bmp. При копировании из файла
свойства Width и Height объекта класса TBitmap устанавливаются равными размеру
копируемой картинки.
2.6.2. Работа с графическими областями
Графические изображения одного объекта могут быть скопированы на канву
другого объекта либо целиком (методы Draw, StretchDraw), либо частично (метод
CopyRect). Рассмотрим методы, выполняющие операции с графическими областями.
void CopyRect (TRect Dest, TCanvas *Canvas, TRect Source) – копирование
прямоугольника Source из объекта Canvas в прямоугольник Dest объекта, вызвавшего
22
этот метод. Область копирования будет растянута или сжата под размер области
приемника. Например: копирование картинки из компонента Image на всю форму
Form1->Canvas->CopyRect(Form1->Canvas->ClipRect, Image1->Canvas,
Image1->Canvas->ClipRect);
Например: копирование всего образа в нужный прямоугольник формы
TRect d, s;
//Прямоугольники
d=Rect ( 10, 10, 110, 110 );
//Прямоугольник приемника
s=Rect ( 0, 0, Bit->Width, Bit->Height );
//Прямоугольник источника
Form1->Canvas->CopyRect(d, Bit->Canvas, s); //Копирование прямоугольников
void Draw (int X, int Y, источник) – метод копирует картинку, хранящуюся в
источнике, на поверхность Canvas компонента, вызвавшего метод. Параметры X и Y
определяют положение левого верхнего угла картинки на поверхности компонента.
Размеры копируемой картинки сохраняются. В качестве источника может быть
битовая матрица, пиктограмма или метафайл. Например:
Bit->LoadFromFile(OpenPictureDialog1->FileName);
Form1->Canvas->Draw(0, 0, Bit);
Метод Draw можно использовать в событии OnPaint для восстановления
испорченного изображения:
if (Bit!=NULL)
Form1->Canvas->Draw(0, 0, Bit);
void StretchDraw (TRect область-приемник, источник) – метод копирования
изображения из источника в область-приемник типа TRect. Размер копируемого
рисунка подгоняется под размер прямоугольника-приемника. Этим метод StretchDraw
отличается от метода Draw, который сохраняет размер неизменным. Источник может
быть любым объектом: битовой матрицей, пиктограммой или метафайлом. Например:
просмотр произвольного файла в заданной области формы.
Bit->LoadFromFile (Form1->OpenDialog1->FileName);
Form1->Canvas->StretchDraw(Rect(0, 0, 100,100), Bit);
Пример. Перемещение спрайта с применением битовых образов
Graphics::TBitmap *fon, *spr, *buf; //Для битовых образов
int w, h, x, y;
//Размер и координаты
TRect dest, sour;
//Прямоугольники копирования
//Сохраняет фон под спрайтом и рисует спрайт
void ris()
{sour=Rect(x,y,x+w,y+h);
//Прямоугольник под спрайтом
buf->Canvas->CopyRect(dest, Form1->Canvas, sour);
Form1->Canvas->Draw(x,y,spr);
//Вывод спрайта
Form1->Timer1->Enabled=true;
//Включить таймер
}
23
//Подготовительные действия при запуске приложения
__fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner)
{
Form1->Timer1->Enabled=false;
//Сначала выключен
fon=new Graphics::TBitmap;
//Подготовить фон
fon->LoadFromFile("fon.bmp");
//Картинка фона в битовом образе
spr=new Graphics::TBitmap;
spr->LoadFromFile("athena.bmp");
spr->Transparent=true;
w=spr->Width;
h=spr->Height;
//Подготовить спрайт
//Спрайт в битовом образе
//Прозрачность спрайта
//Размеры спрайта
buf=new Graphics::TBitmap;
//Подготовить буфер под спрайтом
buf->Width=w; buf->Height=h;
//Задать размеры буфера
dest=Rect(0, 0, w, h);
//Прямоугольник на буфере
x=0; y=Form1->Height/2;
//Начальное положение спрайта
}
//--------------------------------------------------------------------------//Событие возникает при перерисовке изображения
void __fastcall TForm1::FormPaint(TObject *Sender)
{
Form1->Canvas->CopyRect (Form1->ClientRect, fon->Canvas,
Rect(0, 0, fon->Width, fon->Height));
//Подготовить фон
ris();
//Рисование спрайта
}
//--------------------------------------------------------------------------//Событие происходит при срабатывании таймера
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
Form1->Timer1->Enabled=false;
Form1->Canvas->Draw(x, y, buf);
//Стирание спрайта
x+=10;
//Изменение положения спрайта
ris();
//Рисование спрайта
}
2.7. Режимы пера
У канвы есть свойство Pen – перо, с помощью которого строятся изображения из
линий. Перо имеет свойство Mode (режим) – способ взаимодействия цвета пера и
цвета пикселей, по которым проводится это перо. Выбор значения Mode позволяет
получать различные эффекты. Наиболее интересным является режим pmNotXor –
24
сложение с фоном по инверсному исключающему ИЛИ. Правило режима pmNotXor:
если нарисовать фигуру на фоне один раз, а затем нарисовать эту фигуру повторно, то
нарисованная фигура исчезнет. Эту особенность режима pmNotXor можно
использовать для создания простой анимации.
Пример. Рисование линии левой кнопкой мыши
В событии OnMouseDown для прорисовываемого объекта (Form1)
dr=true;
//Фиксация перемещения
x1=x2=X;
//Фиксировать начало перемещения
y1=y2=Y;
Form1->Canvas->Pen->Mode=pmNotXor;
//Включить режим стирания
Form1->Canvas->MoveTo(x1, y1);
//Перо в позицию начала линии
Form1->Canvas->LineTo(x2, y2);
//Линия в 1 пиксель
В событии OnMouseMove для прорисовываемого объекта (Form1)
if (dr==true)
//Подтверждение перетаскивания
{
Form1->Canvas->MoveTo(x1, y1); //Стираем линию в старой позиции
Form1->Canvas->LineTo(x2, y2);
x2=X;
y2=Y;
//Меняем конец линии, начало - нет
Form1->Canvas->MoveTo(x1,y1); //Рисуем линию
Form1->Canvas->LineTo(x2,y2);
}
В событии OnMouseUp для прорисовываемого объекта (Form1)
dr=false;
//Отключить перетаскивание
Form1->Canvas->Pen->Mode=pmCopy; //Включить обычный режим пера
2.8. Работа с цветом. Класс Graphics::TColor
Цвет хранится в типе Graphics::TColor, который занимает 4 байта памяти. Цвет
представляется тремя составляющими: красным, зеленым и синим цветом (RGB –
Red, Green, Blue). Один байт может хранить число в диапазоне от 0 до 255 (от 0 до
0xFF). Тогда полный цвет в 16-ричной системе счисления может выглядеть так:
00BBGGRR. Первые 00 – это избыточный байт, BB – это 16-ричное число для цвета
Blue, GG – 16-ричное число для цвета Green, RR – 16-ричное число для цвета Red.
Для работы с цветом имеется ряд полезных функций. Рассмотрим некоторые из них.
int ColorToRGB (TColor c) – преобразует тип TColor в тип int.
BYTE GetRValue (int n), BYTE GetGValue (int n), BYTE GetBValue (int n) –
получить из числа n типа int составляющую красного, зеленого и синего цвета
соответственно. Результат записывается в переменную типа BYTE.
TColor RGB (BYTE r, BYTE g, BYTE b) – собирается цвет TColor из отдельных
составляющих красного, зеленого и синего цветов.
С цветом можно выполнять множество операций, что приводит к различным
цветовым эффектам, накладываемых на цветное изображение. К самым простым
25
преобразованиям цветового спектра относятся негатив и перевод изображения в
черно-белые оттенки цвета.
Оттенки серого цвета получаются комбинацией трех базовых составляющих
цветового спектра с одинаковым значением каждой из них. Например: для перевода
цветного изображения в черно-белое, можно воспользоваться формулой:
Color=(R+G+B)/3, где R, G, B – начальные составляющие цвета пикселя, а Color –
серый цвет, который следует перезаписать в каждую составляющую цвета и этим
цветом окрасить ранее цветной пиксель. Однако более точной формулой
преобразования является: Color=0.3*R+0.59*G+0.11*B, где учитывается факт
преобладания зеленой составляющей в цветовом спектре.
Негатив изображения достигается путем получения противоположных цветов
вычитанием из 255 текущего составляющего цвета: R=255-R; G=255-G; B=255-B.
Например, для красного цвета со значением R=100, негативу соответствует значение
255-100=155.
Пример 1. Преобразование картинки в черно-белое изображение
int i, j;
BYTE rr, gg, bb;
TColor ccc, cr;
for (j=0; j<=Form1->Image1->Height-1; j++)
//Перебрать все пикселы
for (i=0; i<=Form1.Image1.Width-1; i++)
{
ccc = Form1->Image1->Canvas->Pixels[i][j];
//Текущий цвет пикселя
rr = GetRValue (ccc);
//Разбиение спектра
gg = GetGValue (ccc);
bb = GetBValue (ccc);
cr = 0.3*rr+0.59*gg+0.11*bb;
//Оттенок серого
ccc = RGB (cr, cr, cr);
//Для трех составляющих
Form1->Image1->Canvas->Pixels[i][j] = ccc;
//Окрасить пиксел цветом
}
Пример 2. Отразить картинку зеркально по вертикали
int i, j;
TColor ccc, cr;
for (j=0; j<=Form1->Image1->Width/2-1; j++)
for (i=0; i<=Form1.Image1.Height-1; i++)
{
ccc1 = Form1->Image1->Canvas->Pixels[j][i];
ccc2 = Form1->Image1->Canvas->Pixels[Form1->Image1->Width-j-1][i];
Form1->Image1->Canvas->Pixels[j][i] = ccc2;
Form1->Image1->Canvas->Pixels[Form1->Image1->Width-j-1][i] = ccc1;
}
26
3. СОДЕРЖАНИЕ ПРАКТИЧЕСКИХ РАБОТ ПО ТЕМЕ «ГРАФИКА»
Практическая работа №1. Построение графических фигур. Приложение
«Редактор фигур»
1. Цель работы
Закрепление на конкретных примерах спецификацию компонента Shape.
Освоение технологии работы с инструментом «Кисть» и «Карандаш». Заполнение
замкнутых областей масками заполнения. Реализация механизма перетаскивания.
2. Задание на практическую работу
Разработать приложение с использованием компонента Shape и других
необходимых элементов интерфейса для создания приложения, выполняющего
операции с графической фигурой. Приложение должно настраивать отдельные
свойства графической фигуры, задавать свойства кисти и карандаша. Осуществить
перетаскивание фигуры и изменение ее размера с помощью событий от мыши.
На форме расположить компоненты: Shape – основной элемент интерфейса,
необходимое количество дополнительных элементов интерфейса, а так же восемь
маленьких фигур (Shape) для задания маски плоскости фигуры.
На оценку «Удовлетворительно»
1. Тип фигуры (свойство Shape) выбирать из выпадающего списка.
2. Левой кнопкой мыши выполнять перемещение фигуры.
3. Правой кнопкой мыши выполнять изменение размера фигуры.
На «Хорошо»
Настроить свойства карандаша для контура фигуры (цвет, толщину, стиль),
используя для этого необходимые элементы интерфейса.
На «Отлично»
Настроить
свойства
кисти (цвет, маску, цвет
маски). Маску выбирать из
восьми фигур, заполненных
стандартными масками. Для
этого
создать
событие
OnMouseDown, в котором
заполняется
плоскость
основной фигуры выбранной
маской.
Рисунок 6 – Фрагмент работы приложения «Редактор фигур»
27
3. Контрольные вопросы
1. Укажите назначение компонента Shape.
2. Перечислите возможности классов TPen и TBrush.
3. Опишите возможности организации перетаскивания элементов с помощью
событий от мыши.
4. Выпишите формулы расчёта координат при перемещении объекта.
Практическая работа №2. Спецификации класса TCanvas. Приложение
«Графические примитивы»
1. Цель работы
Закрепить теоретические сведения о спецификации класса TCanvas,
используемого для построения графических изображений по пикселам. Результатом
практической работы должно стать прикладное приложение «Графические
примитивы», которое выполняет построение графических фигур по заданным в
программе условиям.
2. Задание на практическую работу
Разработать приложение с использованием компонентов: PaintBox, Timer и
других необходимых элементов интерфейса для создания приложения, выполняющего
построение графических примитивов с заданными условиями отображения. Для
построения графических примитивов использовать спецификацию класса TCanvas
компонента PaintBox.
На оценку «Удовлетворительно»
1. На форме разместить компонент PaintBox, который должен занимать большую
часть формы и являться областью отображения графических примитивов.
2. В выпадающем списке выбрать тип примитива: точки, линии,
прямоугольники, круговые фигуры, дуги, хорды, сектора, шрифты. Выбрать нужный
примитив из выпадающего списка.
3. Атрибуты для каждого примитива задаются случайными значениями с учетом
возможного диапазона для данного свойства.
4. В контейнере RadioGroup выбрать режим отображения примитивов: по
одному, количество (указать нужное количество), бесконечно.
На оценку «Хорошо»
1. Обеспечить скорость смены рисования примитива, выбрав необходимое
значение для скорости таймера.
2. Обеспечить работу кнопок: «Пуск», «Пауза», «Очистить».
На оценку «Отлично»
1. Использовать четыре компонента PaintBox одного размера.
2. Для каждого компонента выбрать изображаемые в нем графические
примитивы с помощью компонента CheckListBox.
28
Рисунок 7– Фрагмент работы приложения «Графические примитивы»
3. Контрольные вопросы
1. Назовите назначение и возможности класса TCanvas.
2. Опишите свойства данного класса.
3. Опишите методы данного класса.
Практическая работа №3. Алгоритмы графических построений.
Приложение «Геометрическая фигура»
1. Цель работы
Закрепить теоретические сведения о спецификации класса TCanvas,
используемого для построения графических изображений по пикселам. Результатом
практической работы должно стать прикладное приложение, выполняющее
построения графических фигур на базе математических расчётных формул.
2. Практическая часть
Разработать приложение с использованием компонентов: PaintBox и других
необходимых элементов интерфейса для создания приложения, выполняющего
построение графических фигур правильной формы с заданными условиями
отображения и расчетными координатами вершин. Для построения графических
примитивов использовать спецификацию класса TCanvas компонента PaintBox.
На оценку «Удовлетворительно»
1. На форме разместить компонент PaintBox, который должен занимать большую
часть формы и являться областью отображения графических примитивов.
29
2. Задать количество вершин многоугольника.
3. Задать величину радиуса многоугольника.
4. Рассчитать координаты вершин многоугольника, используя формулы
вращения.
5. Построить многоугольник.
На оценку «Хорошо»
Установить флажок, с помощью которого задается режим соединения вершин
правильного многоугольника.
На оценку «Отлично»
Вводя коэффициент смещения, выполнить сдвиг вложенного многоугольника на
заданное значение коэффициента.
Рисунок 8 – Фрагмент работы приложения «Геометрическая фигура»
3 Контрольные вопросы
1. Назовите назначение и возможности класса TCanvas.
2. Выпишите формулы вращения.
3. Приведите формулу расчета координат вершин правильного многоугольника.
Практическая работа №4. Реализация вращения в графике. Приложение
«Вращение планет»
1. Цель работы
Закрепить теоретические сведения о спецификации класса TCanvas,
используемого для построения графических изображений по пикселам. Результатом
практической работы должно стать прикладное приложение «Вращение планет»,
30
построенные на базе алгоритма анимации путем стирания движущегося объекта.
2. Задание на практическую работу
Рисунок 9 – Слайд с заданием на практическую часть
3. Контрольные вопросы
1. Назовите назначение и возможности класса TCanvas.
2. Выпишите формулы вращения.
Практическая работа №5. Вращения в графике. Приложение «Часы»
1. Цель работы
Закрепить теоретические сведения о спецификации класса TCanvas,
используемого для построения графических изображений по пикселам. Результатом
практической работы должно стать прикладное приложение «Часы», построенные на
базе алгоритма анимации, отображающее текущее время с помощью движущихся
стрелок.
2. Задание на практическую работу
На оценку «Удовлетворительно»
1. Изобразить часы с вращающими тремя стрелками. Часовая стрелка
перемещается дискретно.
2. На циферблате отобразить 12 чисел для часов, а так же маркеры для секунд и
минут.
31
На оценку «Хорошо»
1.
Внутри
механических
часов
отобразить табло электронных часов.
2. Разработать функцию будильника.
На оценку «Отлично»
1.
Разработать
закон
плавного
перемещения часовой стрелке.
2. Вывести надписи для часов под углом.
3. Контрольные вопросы
1. Назовите назначение и возможности
класса TCanvas.
2. Выпишите формулы вращения.
Рисунок 10 – Фрагмент работы приложения «Часы»
Практическая работа №6. Алгоритм спрайтовой анимации. Приложение
«Мультик»
1. Цель работы
Закрепить теоретические знания по спецификации и применению возможностей
класса TBitmap (класс битовых образов) для организации мультипликации небольших
графических изображений. Результатом работы над темой должно стать приложение,
реализующее алгоритм спрайтовой анимации.
2. Задание на практическую работу
Разработать приложение, осуществляющее движение некоторого графического
объекта (спрайта) по графической поверхности, не затирая фон при движении.
Реализовать данные действия с помощью битовых образов.
На оценку «Удовлетворительно»
1. Подготовить картинки для фона и спрайта. Использовать битовый образ для
спрайта и фрагмента фона.
2. Выполнить движение спрайта слева на право. Когда спрайт окажется на
правой границе окна, начать движение с левой границы на той же высоте.
3. Клавишами [↑] и [↓] менять высоту спрайта.
На оценку «Хорошо»
Спрайт может менять только свою высоту клавишами [↓] и [↑], оставаясь по
горизонтали в центре экрана.
На оценку «Отлично»
Реализовать движение других спрайтов – «противников», двигающихся в
противоположном направлении.
32
Рисунок 11 - Фрагмент работы программы «Мультик»
3. Контрольные вопросы
1. Укажите назначение битовых образов.
2. Перечислите основные свойства и методы класса TBitmap.
3. Сформулируйте алгоритм спрайтовой мультипликации.
4. Перечислите методы работы с графическими областями.
Практическая работа №7. Рисование по пикселям. Приложение
«Графический редактор»
1. Цель работы
Закрепление на конкретных примерах полученных теоретических знаний при
изучении возможностей класса TCanvas – поверхность рисования, его свойств и
методов. Освоить режимы объекта Pen для рисования по поверхности при
перемещении мыши. Используя компонент SpeedButton, разработать панель
инструментов с режимами графического редактора.
2. Задание на практическую работу
Разработать приложение, осуществляющее различные операции с холстом
компонента PaintBox, реализовав начальные операции приложения «Графический
редактор». Приложение должно содержать панель инструментов, созданное с
помощью быстрых кнопок и осуществлять базовые операции графического редактора.
Закрепить умения программировать механизм перетаскивания событиями мыши и
режима пера pmNotXor.
33
На оценку «Удовлетворительно»
1. Очистить область рисования.
2. Сохранить изображение в файле.
3. Вывести изображение в область рисования из нужного файла.
4. Режим карандаша. Для данного режима дополнительно установить цвет и
толщину карандаша.
5. Режима линий. Для данного режима дополнительно установить цвет, толщину
и стиль линии.
7. Режим кисти. Для данного режима дополнительно настраивается цвет и маска
заполнения. Закраска происходит замкнутых областей.
На оценку «Хорошо»
1. Кнопки различных типов фигур. Для данного режима дополнительно
установить цвет контура и маску плоскости фигуры.
2.
Режим
текста.
Дополнительно
настраивается
шрифт и вводится строка текста,
выводимого на Canvas объекта.
На оценку «Отлично»
1. Режим Резинка, который
осуществляет стирание ранее
нарисованного
изображения.
Резинка отображается в виде
небольшого
квадрата.
Дополнительно
настраивается
размер резинки.
2. Режим распылителя.
Дополнительно выбирается цвет и
толщина распыления.
Рисунок 12 - Фрагмент работы программы «Графический редактор»
3. Контрольные вопросы
1. Перечислите свойства класса TCanvas.
2. Приведите программный код для стирания методами карандаша.
Практическая работа №8. Обработка цвета. Приложение «Эффекты с
цветом»
1. Цель работы
Освоить и закрепить на практике методику обработки цвета с помощью класса
TColor. На основании данного класса и компонента Image обработать графические
изображения, применив к ним различные алгоритмы обработки цвета.
34
2. Задание на практическую работу
Разработать приложение, обрабатывающее цвета отдельных пикселей и всего
графического изображения в целом. Выполнять с изображением различные
преобразования: негатив, яркость, повороты.
На оценку «Удовлетворительно»
1. Выбрать нужный файл .bmp и загрузить его в Image.
3. Выбрать пиксель на картинки, и его цветом залить компонент Shape.
4. Разбить цвет этого пикселя на составляющие и отобразить их в отдельных
компонентах Shape.
5. Для каждой составляющей цвета добавить ползунок, для изменения его
значения. При этом изменяется окраска фигуры, как отдельной составляющей цвета,
так и смешанного цвета.
6. Окрасить полученным цветом все пиксели картинки, цвет которых
совпадает с цветом пикселя, который был выбран изначально.
На оценку «Хорошо»
1. Добавить возможность перевода изображения в черно-белое представление;
2. Добавить возможность получения негатива изображения;
3. Добавить возможность увеличения и уменьшения яркости изображения.
На оценку «Отлично»
1. Выполнить повороты графического изображения по горизонтали.
2. Выполнить повороты графического изображения по вертикали.
Рисунок 13 - Фрагмент работы программы «Эффекты с цветом»
3. Контрольные вопросы
1. Как храниться цвет в памяти?
2. Перечислите функции обработки цвета.
35
ЗАКЛЮЧЕНИЕ
Программирование является интересным, творческим, но в то же время,
сложным процессом. Для освоения программирования требуется знание теоретических
вопросов
техники
программирования,
особенностей
конструкции
языка
программирования и умения логически мыслить. Все это вырабатывается опытным
путем за счет проведения практической работы за компьютером. Практические работы
направленны на экспериментальное подтверждение теоретических положений и
формирование учебных и профессиональных практических умений. Они составляют
важную часть теоретической и профессиональной практической подготовки учащихся.
Представленные методические указания является вспомогательным средством в
помощь студентам и преподавателям для проведения практических работ по теме
«Графика» дисциплины «Основы алгоритмизации и программирования» для
специальности 09.02.05 (230701) «Прикладная информатика в экономике» и являются
неотъемлемой частью учебно-методического комплекса по данной дисциплине. Так же
данное пособие можно использовать как вспомогательный справочный материал в
помощь при подготовке к экзамену.
В процессе практического занятия, как вида учебной деятельности,
обучающиеся выполняют практическое задание под руководством преподавателя в
соответствии с изученным учебным материалом.
Выполнение практических работ направлено на:
обобщение,
систематизацию,
углубление,
закрепление
полученных
теоретических знаний по конкретным темам изучаемой дисциплины;
формирование умений применять полученные знания на практике, реализацию
единства интеллектуальной и практической деятельности;
развитие интеллектуальных умений: аналитических, проектировочных;
конструктивных и других;
выработку при решении поставленных задач таких качеств, как
самостоятельность, ответственность, точность, творческая инициатива.
Содержание заданий комплекса практических работ позволит студентам
сформировать профессиональные и общие компетенции.
36
СПИСОК ИСПОЛЬЗУЕМЫХ ИСТОЧНИКОВ
Основные источники:
1. Эпштейн М.С. Программирование на языке С. - М.: ОИЦ «Академия», 2011.
2. Эпштейн М.С. Программирование на языке С. Практикум.- М.: ОИЦ
«Академия», 2011.
3. Архангельский А.Я. Программирование с C++ Builder . 7-е изд. – М.: ООО
«Бином-Пресс», 2011 г. – 896 с.: ил.
Дополнительные источники:
1. Семакин И.Г., Шестаков А.П. Основы программирования. - М.: ОИЦ
«Академия», 2013.
2. Семакин И.Г., Шестаков А.П. Основы программирования. Практикум - М.:
ОИЦ «Академия», 2012.
3. Дейтел Х.М., Дейтел П.Дж. Как программировать на С++. - М.: Бином-Пресс,
2010.
4. Культин Н. Б. C++ Builder в задачах и примерах. - СПб.: БХВ, 2012, 336 с.
5. Культин Н. Б. Самоучитель C++ Builder. - СПб.: БХВ, 2013.
Ресурсы сети Internet:
1. http://aco.ifmo.ru/el_books/applied_programming/ - ссылка на уроки по языку
программирования С++.
2. http://rutracker.org/forum/viewtopic.php?t=2746375 – аудио лекции по языку
программирования С++.
3. http://www.wmz-portal.ru/page-id-39.html - форум программистов.
4. http://aco.ifmo.ru/el_books/applied_programming/ - конспекты лекций по
прикладному программированию.
5. http://cplus-plus.ru/video-tutorials-on-c/ - книги, содержащие теоретический
материал и практические советы по написанию программного кода.
6. http://www.bcbdev.ru– сайт по основным вопросам программирования в среде
C++ Builder.
Download