МОСКОВСКИЙГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ ИМ. Н.Э. БАУМАНА
Калужский филиал
Факультет «ЭИУК»
Кафедра «ЭИУ-5»
ПОЯСНИТЕЛЬНАЯ ЗАПИСКА К КУРСОВОЙ РАБОТЕ
Тема:
“Векторный графический редактор”
Калуга, 2008 г.
/>/>/>/>Оглавление
1. Введение
2. Техническоезадание
2.1 Общиесведения
2.2 Назначениеи цели создания системы
2.3 Требованиек системе
2.4 Состави содержание работ по созданию системы
3. Исследовательскаячасть
3.1 Постановказадачи
3.2 Обоснованиевыбора темы
3.3 Обоснованиевыбора способа решения
3.4 Обоснованиевыбора платформы
3.5 Обоснованиевыбора языка программирования
4. Конструкторскаячасть
4.1 Функциональноеназначение
4.2 Руководствопрограммиста
5. Технологическаячасть
5.1 Назначениепрограммы
5.2 Условиявыполнения программы
5.3 Руководствопользователя
Заключение
Литература
/>/>/>
1. Введение
/>/>
Темакурсовой работы:
/>/>Разработкавекторного графического редактора.
Задачи:
Созданиеизображений при помощи набора графических примитивов (отрезки прямых,прямоугольники, треугольники, эллипсы) и зеркальное преобразованиепространства.
/>/>Цели:
/>/>1. Изучениесреды программирования С++ Builder
2. Изучениетеоретических основ векторной графики
/>/>3. Знакомствои использование алгоритмов преобразования пространства
/>/>4. Приобретениенавыков программирования на языке С++
Актуальностьданной темы заключается в том, что в ходе изучения курса специальности СистемыАвтоматизированного Проектирования происходитзнакомство с различными видами CAD систем. На основе CAD систем построенывекторные конструкторские редакторы, а также редакторы для геометрическогомоделирования пространства. Таким образом, при выполнении задания данной темыбыли изучены основы работы векторных графических редакторов, что внесетсущественный вклад в успешность дальнейшего процесса обучения курсу.
2. Техническое задание
/>/>2.1 Общие сведения
/>
2.1.1 Полное наименованиесистемы
Программадля создания и преобразования изображений. />
2.1.2 Перечень документов, наосновании которых создается система
Основаниемдля разработки данной программы является курсовая работа по курсу «Программированиена языках высокого уровня». Разработка ведется на основании задания,утвержденного преподавателем.
/>
2.1.3 Плановые сроки начала иокончания работы по созданию системы
Постановказадачи для курсовой работы по курсу “Программирования на языках высокого уровня”произведена 17.09.2008, окончание разработки программы и создания документациидолжно быть сделано не позже 8.12.2008.
/>
2.1.4 Порядок оформления ипредъявления заказчику результатов работ по созданию системы
Предъявлениепреподавателю результатов работ по созданию программного продукта включаетследующие этапы:
· постановка задачи
· согласование и утверждение технического задания
· разработка и согласование структуры программы
· согласование и утверждение приложения
· разработка пояснительной записки и графической части,указанных в задании
· согласование и утверждение технического проекта.
/>/>
2.2 Назначениеи цели создания системы
Программный продукт предназначен длясоздания, редактирования графических изображений. Программный продукт можетбыть использован для создания различных графических изображений, при помощизаданного набора примитивов, и позволяет преобразовывать полученное изображениепосредством применения функции «mirror». Программный продукт разработан вучебных целях и не претендует на использование в качестве полноценногоредактора.
/>/>/>
2.3 Требование к системе
/>
2.3.1 Требования к системе вцелом
2.3.1.1 Требования к структуре
Даннаясистема состоит из следующих частей:
· Рисование графических примитивов, таких как: Line,Rectangle, Triangle, Ellipse
· Преобразование пространства посредством функции Mirror, вчастности примитива Ellipse
2.3.1.2 Требования к надежности
Программныйпродукт должен отвечать следующим требованиям надежности:
При работес изображением производится проверка сохранности результатов работы сизображением.
Притестировании программного продукта путем использования различных сочетаний всехего возможностей ошибок в работе обнаружено не было.
2.3.1.3 Требования кэксплуатации
Программныйпродукт обладает простотой и удобством интерфейса и может обслуживаться любымпользователем, не имеющим специальных знаний в работе с изображениями, имеющимэлементарные навыки работы с ПК. Программный продукт может быть использован понеобходимости и не имеет ограничений, связанных с режимом работы.
/>
2.3.2 Требования к функциям,выполняемым программным продуктом
Программныйпродукт предназначен для работы с изображением и поэтому должен содержать ивыполнять следующие действия:
· Работа с графическими файлами
1. Создание нового графического файла
· Рисование основных геометрическихпримитивов
1. Рисование отрезков прямых
2. Рисование прямоугольников
3. Рисование треугольников
4. Рисование эллипсов
· Дополнительные возможностиредактирования
1. Зеркальное преобразование пространствас нарисованными в нем эллипсами
2.3.3 Требования к видамобеспечения
2.3.3.1 Математическоеобеспечение системы
Приреализации данного программного продукта были применены некоторые стандартныеалгоритмы: построения графических примитивов, работы с изображением. Применениестандартных алгоритмов улучшило быстродействие и упростило проектированиеданного программного продукта.
2.3.3.2 Лингвистическоеобеспечение системы
Программныйпродукт должен разрабатываться только с использованием среды программированияC++ Builder 6. Использование других сред программирования не допускается.Необходимо добиться безошибочной работы приложения на ОС Windows семейства ХР.
2.3.3.3 Технического обеспечениясистемы
Длянормального функционирования программного продукта необходимо:
· Процессор i80486
· 16Мб RAM
· Не менее 3 Мб свободного места на жестком диске
· Клавиатура и манипулятор мышь
Дляработы с приложением потребуется установленная операционная система Windowsсемейства XP. Для функционирования приложения не требуется никаких специальноустановленных программных продуктов.
/>/>
2.4 />Состав и содержание работ по созданию системы (Табл. 1)
/>
Таблица 1 Этап разработки Срок выполнения 1 Утверждение темы. Разработка плана. 17.09.2008 – 3.10.2008 2 Обзор литературы и способов решения, обоснование выбора способа решения, аппаратной и программной платформ, среды разработки. До 17.10.2008 3 Разработка алгоритма работы приложения, разработка алгоритмов модулей, реализация их в выбранной среде разработки. 17.10.2008 – 21.11.2008 4 Формулирование требований к аппаратной и программной платформам, руководство по установке и администрированию приложения, руководство пользователя. До 21.11.2008 5 Окончательное оформление чертежей и расчетно-пояснительной записки. Подготовка доклада. До 8.12.2008
/>/>2. Исследовательскаячасть
/>/>
3.1 Варианты способа решения
· создание четырехклассов соответственно количеству заданных примитивов содержащих данные о них идвух методов: перерисовки изображения и преобразования пространства
· созданиеродительского класса, содержащего дочерние классы соответствующие наборупримитивов, а также дополнительный класс для выполнения вычислений связанных спреобразованием пространства
Приреализации поставленной задачи она была разбита на две части:
· рисование графических примитивов
· преобразование пространства при помощи алгоритмовпреобразования пространства
Выбор С++ Builder 6 обоснован тем что, онпредставляет многообразные возможности во всех областях программированияприкладного программного обеспечения, включая данную. На этой мощной основепрограммист может создать многофункциональный программный продукт с большимспектром возможностей.
/>/>/>
3.2 Обоснование выбораплатформы
Для реализации программы была выбрана платформаMicrosoft Windows XP. Этот выбор обусловлен наличием данной ОС на ЭВМ ваудиториях университета, что позволит наглядно продемонстрировать полученныйпрограммный продукт.
/>/>/>
3.3 Обоснование выбора языкапрограммирования
Для реализации данного программного продукта былвыбран язык C++. Этот выбор обусловлен тем, что объектно-ориентированный языквысокого уровня C++ на порядок превосходит свои аналоги по оценочному параметрускорость-удобство: он имеет все высокоуровневые средства структурированияпрограмм, и при этом программы, написанные с его помощью, являются оченьбыстрыми благодаря использованию оптимизирующих компиляторов. Кроме того,компиляторы для C++ существуют почти подо всеми платформами, и большинство изних поддерживают последние стандарты языка. Поскольку системы контроля версийнередко используются для разработки мульти-платформенных приложений, то весьмавероятно, что программы впоследствии придется переносить под другуюоперационную систему. Язык С++ позволит легко это сделать.
3.4 Обоснование выбора среды программирования
Выбор данной среды программирования С++ Builderобусловлен заданием, выданным преподавателем. Достоинством данной средыявляется то, что в ней реализована идея подлинно визуальной разработкипрограмм. Дизайнер интерфейсов позволяет, не написав ни строчки кода, создаватьпрограммы со сложным интерфейсом. Программист лишь пишет важный для работы код,интерфейс за него реализует среда.
4. Конструкторская часть
4.1 Функциональное назначение
Программныйпродукт предназначен для создания и редактирования графических изображений.Программный продукт может быть использован при создании различных изображений,используя стандартные средства редактора, такие как прямая линия, прямоугольник,треугольник, эллипс и зеркало.
4.2 Описание логической структуры
Решенияпоставленной задачи разбивается на несколько частей:
· рисование графических примитивов
· зеркальное преобразование пространства
Алгоритмы рисование графическихпримитивов
Рисование отрезков прямых
X Рисование отрезков прямых производится при помощи функции LineTo(), оттекущей позиции до точки, координаты которой указаны, как аргументы даннойфункции. Текущая позиция изменяется и находится теперь там, где закончиласьлиния.
/>
Рисование прямоугольников
Рисованиеотрезков прямых производится при помощи функции Rectangle(), от текущей позициидо точки, координаты которой указаны, как аргументы данной функции. Текущаяпозиция изменяется и находится теперь там, где закончилась линия.
X 1) /> /> /> /> /> /> /> />
X
/>/>/>/>/>/>/>2)/> /> /> /> /> /> /> />
Y />
Рисование треугольников
Рисованиетреугольников производится при помощи последовательной прорисовки его граней спомощью отдельных линий. Сначала рисуется одна линия, после чего, имея уже двевершины, необходимо задать третью. К точке следующего щелчка курсора из первых2 вершин прорисовываются еще две линии, все вместе с первой образуятреугольник.
1)
/>
(X0;Y0) – текущая позиция />/>Х
2)
/>
(X1;Y1) – аргументы функций LineTo() />Y
Рисование эллипсов
Для рисованияэллипсов нельзя использовать функцию Ellipse(), так как в этом случае пропадаетвозможность его дальнейшего преобразования «зеркалом». Поэтому рисование эллипсовосуществляется «по точкам», пиксели на форме закрашиваются по заданнымматематическим формулам, образуя эллипс. При этом визуально создание эллипсоввыглядит, как и в случае использования функции Ellipse(): мышью отмечаютсякоординаты верхнего левого и нижнего правого угла прямоугольника, в которыйвписан эллипс. />
X
(ex1;ey1) – текущая позиция />/>1)/> /> /> /> /> /> /> />
Y />
/>/>2)/> /> /> /> /> /> /> />
Y />
Rx=(abs(ex1-ex2))/2;
Ry=(abs(ey1-ey2))/2;
Xc=(ex1+ex2)/2;
Yc=(ey1+ey2)/2;
Алгоритм преобразованияпространства
Дляпреобразования пространства преобразователем типа «зеркало» необходимо начать ссоздания линии «зеркала». Она рисуется как и обычный примитив line. Далее длязеркального отображения объектов пространства относительно этой линиииспользуется следующий алгоритм состоящий из нескольких шагов:
1.
O Находим величину радиусвектора одной из точек прямой, относительно которой осуществляетсяпреобразование
/>
2. Смещаем преобразуемуюточку P пространства на вектор –OB, получаем точку P1
OB
(Xb;Yb) />/>
X />/> О/> /> /> /> /> /> /> />
Y />
3. Находим угол αмежду AB и осью ОХ
(Xb;Yb)
OB />/>
X />/>О/> /> /> /> /> /> /> />
Y />
4. Поворачиваем Р вокругР1 на угол α, получаем точку Р2
Р2 />/>
X />/>О
/>
5. Смещаем Р2 на векторОВ и получаем точку Р!.. Преобразование завершено
Р2 />/>/>/>
X />/>О/> /> /> /> /> /> /> />
Y />
4.3 Реализацияалгоритма преобразования пространства
Реализациюалгоритма преобразования пространства осуществляет метод Mirror (Листинг 3.1.)
Листинг3.1
voidMirror()
{
ell*zu2_e;
a=(Y1-Y2)/sqrt((Y1-Y2)*(Y1-Y2)+(X1-X2)*(X1-X2));//sin
b=(X1-X2)/sqrt((Y1-Y2)*(Y1-Y2)+(X1-X2)*(X1-X2));//cos
if(x_e!=0)
{
zu2_e=x_e;
while(zu2_e!=0)
{
for(intj=0; j
{
mx1=zu2_e->x[j];
my1=zu2_e->y[j];
mx1+=-X1;
my1+=-Y1;
xx=mx1*b+my1*a;
yy=-mx1*a+my1*b;
yy=-yy;
mx1=xx*b-yy*a;
my1=xx*a+yy*b;
mx1+=X1;
my1+=Y1;
zu2_e->x[j]=mx1;
zu2_e->y[j]=my1;
}
zu2_e->Draw();
zu2_e=zu2_e->next;
}
}
}
/>
4.4 Основныефункции работы с графикой
1) FormMouseDown — производится сохранение координаткурсора;
2) FormMouseUp — производится конечная прорисовка изображаемого элемента;
3) FormMouseMove – происходит постоянная перерисовкаизображаемого элемента;
4) LineDRW — происходитоповещение программы о том, что будет происходить прорисовка линии.
5) RectDRW — происходитоповещение программы о том, что будет происходить прорисовка прямоугольника.
6) TreDRW1 — происходитоповещение программы о том, что будет происходить прорисовка первой гранитреугольника.
7) TreDRW2 — происходитоповещение программы о том, что будет происходить прорисовка двух оставшихсяграней треугольника.
8) EllDRW — происходитоповещение программы о том, что будет происходить прорисовка эллипса.
/>/>/>5. Технологическая часть
/>/>
5.1 Назначение программы
Данный программный продукт предназначендля работы с изображением и поэтому должен содержать и выполнять следующиедействия:
· Работа с графическими файлами
1. Создание нового графического файла
· Рисование основных геометрическихпримитивов
1. Рисование отрезков прямых
2. Рисование прямоугольников
3. Рисование треугольников
4. Рисование эллипсов
· Дополнительные возможностиредактирования
1. Зеркальное преобразование пространствас нарисованными в нем эллипсами
/>/>
5.2 Условия выполненияпрограммы
/>/>/>
5.2.1 Требования к аппаратной ипрограммной средам
Условия выполнения программы, полученной врезультате реализации данного проекта, должны отвечать следующим требованиям:
1) программа должна выполняться во всех операционных системах WindowsXP;
2) программа может выполняться на IBM-PC совместимомкомпьютере с процессором не ниже 80486;
3) для нормального функционирования программы необходим минимальныйразмер оперативной памяти 16 Мб;
4) для программы необходимо наличие 3 Мб свободного места нажестком диске;
5) для работы с программой необходимо наличие устройства ввода(клавиатура, манипулятор «мышь»);
6) для отображения результатов работы программы необходимоналичие устройства вывода (монитор);
/>/>/>
5.3 Руководство пользователя
/>
5.3.1 Выполнение программы
Дляобращения к программе необходимо запустить файл “Project1.exe” с гибкого илижёсткого магнитного диска.
Для рисования отрезков прямых, необходимо активизироватьradiobutton «line». Далее необходимо переместить указатель мыши на главнуюформу. Нажмите левой кнопкой мыши и, не отпуская её, переместите курсор мыши вдругую точку окна приложения. Отпустите левую кнопку мыши. На экранеотобразится линия (рис.4.1.).
/>
Рисунок 4.1.Отображение линии
Для рисования прямоугольников, необходимоактивизировать radiobutton «rectangle». Далее необходимо переместить указательмыши на главную форму. Нажмите левой кнопкой мыши и, не отпуская её,переместите курсор мыши в другую точку окна приложения. Отпустите левую кнопкумыши. На экране отобразится прямоугольник (рис.4.2.).
/>
Рисунок 4.2.Отображение прямоугольника
Для рисования треугольников, необходимоактивизировать radiobutton «triangle». Далее необходимо переместить указательмыши на главную форму. Щелкните левой кнопкой мыши, переместите курсор мыши вдругую точку окна приложения, щелкните снова. На экране отобразится перваягрань треугольника. Далее перенесите курсор в точку, где должна находитьсятретья вершина треугольника, щелкните там, прорисуются оставшиеся две грани. Наэкране отобразится треугольник (рис.4.3.).
/>
Рисунок 4.3.Отображение треугольника
Для рисования эллипсов, необходимо активизироватьradiobutton «ellipse». Далее необходимо переместить указатель мыши на главнуюформу. Нажмите левой кнопкой мыши и, не отпуская её, переместите курсор мыши вдругую точку окна приложения. Отпустите левую кнопку мыши. На экранеотобразится эллипс (рис.4.4.).
/>
Рисунок 4.4.Отображение эллипса
Для преобразованияпространства необходимо активизировать radiobutton «mirror». Далее необходимо переместить указатель мыши на главнуюформу. Нажмите левой кнопкой мыши и, не отпуская её, переместите курсор мыши вдругую точку окна приложения. Отпустите левую кнопку мыши. На экранеотобразится линия, относительно которой будет происходить преобразование(рис.4.5.),и произойдет само преобразование (все эллипсы зеркально отобразятся относительнолинии) (рис.4.6.).
/>
Рисунок 4.5.Отображение линии зеркала
/>
Рисунок 4.6.Преобразование пространства
Завершение программы происходит послещелчка левой кнопки мыши по кнопке с крестиком в верхнем правом углу окнапрограммы.
/>/>/>Заключение
Такимобразом, цели, поставленные в начале работы, были достигнуты. Была освоенасреда программирования C++ Builder, в ходе выполнения требований к поставленнойзадаче были использованы алгоритмы преобразования пространства а такжеприоберетены новые навыки программирования на С++. Удалось создать программныйпродукт, отвечающий пунктам изначально заданных требований. Для создания инебольшой коррекции изображения удобно иметь под рукой быстрый и компактныйвекторный графический редактор, который позволяет внести необходимые измененияи при этом не потребует больших затрат вашего времени и места на жестком диске.
Такойвекторный графический редактор практически не требует места на диске, работаетбыстро и надежно, не требует больших усилий в его освоении, позволяет создаватьи редактировать изображения, что обеспечивает его востребованность у различныхпользователей.
Касательновариантов расширения программного продукта, возможны добавления таких пунктовкак пользовательский интерфейс, представляющий собой наглядное отображениевозможностей продукта, сохранение изображения в заданном формате, как целиком,так и пообъектно, добавление других видов графических примитивов, применениезаливки, изменение цвета контура примитивов на заданный пользователем и многихдругих.
Литература
1) Майкл Дж. Янг, Visual C++, 1999 г.
2) Архангельский А. Я., Программирование в С++ Builder 6, изд.Бином, 2003 г.
3) Архангельский А. Я., С++ Builder 6 справочное пособие(книги 1,2), изд. Бином, 2002 г.
4) Культин Н., Самоучитель С++ Builder, БХВ-Петербург, 2004 г.