Векторный графический редактор

МОСКОВСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ ИМ. Н.Э. БАУМАНА

Калужский филиал

Факультет «ЭИУК»

Кафедра «ЭИУ-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	Руководство пользователя

	Заключение

	Литература






Введение



Тема курсовой работы: 

Разработка векторного графического редактора. 

Задачи: 

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

Цели: 

Изучение среды программирования С++ Builder

Изучение теоретических основ векторной графики

Знакомство и использование алгоритмов преобразования пространства

Приобретение навыков программирования на языке С++

Актуальность данной темы заключается в том, что в ходе изучения курса специальности Системы Автоматизированного Проектирования происходит знакомство с различными видами 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 Требования к функциям, выполняемым программным продуктом

Программный продукт предназначен для работы с изображением и поэтому должен содержать и выполнять следующие действия:

Работа с графическими файлами

Создание нового графического файла

Рисование основных геометрических примитивов

Рисование отрезков прямых

Рисование прямоугольников

Рисование треугольников

Рисование эллипсов

Дополнительные возможности редактирования

Зеркальное преобразование пространства с нарисованными в нем эллипсами



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


Исследовательская часть



Варианты способа решения



создание четырех классов соответственно количеству заданных примитивов содержащих данные о них и двух методов: перерисовки изображения и преобразования пространства

создание родительского класса, содержащего дочерние классы соответствующие набору примитивов, а также дополнительный класс для выполнения вычислений связанных с преобразованием пространства 

При реализации поставленной задачи она была разбита на две части:

рисование графических примитивов

преобразование пространства при помощи алгоритмов преобразования пространства

Выбор С++ Builder 6 обоснован тем что, он представляет многообразные возможности во всех областях программирования прикладного программного обеспечения, включая данную. На этой мощной основе программист может создать многофункциональный программный продукт с большим спектром возможностей.



3.2	Обоснование выбора платформы



Для реализации программы была выбрана платформа Microsoft Windows XP. Этот выбор обусловлен наличием данной ОС на ЭВМ в аудиториях университета, что позволит наглядно продемонстрировать полученный программный продукт.




3.3	Обоснование выбора языка программирования



Для реализации данного программного продукта был выбран язык C++. Этот выбор обусловлен тем, что объектно-ориентированный язык высокого уровня C++ на порядок превосходит свои аналоги по оценочному параметру скорость-удобство: он имеет все высокоуровневые средства структурирования программ, и при этом программы, написанные с его помощью, являются очень быстрыми благодаря использованию оптимизирующих компиляторов. Кроме того, компиляторы для C++ существуют почти подо всеми платформами, и большинство из них поддерживают последние стандарты языка. Поскольку системы контроля версий нередко используются для разработки мульти-платформенных приложений, то весьма вероятно, что программы впоследствии придется переносить под другую операционную систему. Язык С++ позволит легко это сделать.



3.4 Обоснование выбора среды программирования



Выбор данной среды программирования С++ Builder обусловлен заданием, выданным преподавателем. Достоинством данной среды является то, что в ней реализована идея подлинно визуальной разработки программ. Дизайнер интерфейсов позволяет, не написав ни строчки кода, создавать программы со сложным интерфейсом. Программист лишь пишет важный для работы код, интерфейс за него реализует среда.


4. Конструкторская часть



4.1	Функциональное назначение



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



4.2	Описание логической структуры



Решения поставленной задачи разбивается на несколько частей: 

рисование графических примитивов 

зеркальное преобразование пространства

Алгоритмы рисование графических примитивов 

Рисование отрезков прямых



XРисование отрезков прямых производится при помощи функции LineTo(), от текущей позиции до точки, координаты которой указаны, как аргументы данной функции. Текущая позиция изменяется и находится теперь там, где закончилась линия.






(X0;Y0) – текущая позиция











(X1;Y1) – аргументы функции LineTo()



Y





Рисование прямоугольников

Рисование отрезков прямых производится при помощи функции Rectangle(), от текущей позиции до точки, координаты которой указаны, как аргументы данной функции. Текущая позиция изменяется и находится теперь там, где закончилась линия.





X1) 



(X0;Y0) – текущая позиция







(X1;Y1) – аргументы функции Rectangle()



Y



X

2)







Y





Рисование треугольников


Рисование треугольников производится при помощи последовательной прорисовки его граней с помощью отдельных линий. Сначала рисуется одна линия, после чего, имея уже две вершины, необходимо задать третью. К точке следующего щелчка курсора из первых 2 вершин прорисовываются еще две линии, все вместе с первой образуя треугольник.



1)



(X0;Y0) – текущая позиция

X







(X1;Y1) – аргументы функции LineTo()

Y





(X0;Y0) – текущая позицияХ

2)



(X0;Y0) – текущая позиция











(X1;Y1) – аргументы функций LineTo()Y







Рисование эллипсов 

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



X



(ex1;ey1) – текущая позиция1)







Y



(ex2;ey2) – аргументы функции LineTo()





X

2)



(Xc;Yc)

Ry



Rx





Y

Rx=(abs(ex1-ex2))/2;

Ry=(abs(ey1-ey2))/2;

Xc=(ex1+ex2)/2;

Yc=(ey1+ey2)/2;



Алгоритм преобразования пространства

Для преобразования пространства преобразователем типа «зеркало» необходимо начать с создания линии «зеркала». Она рисуется как и обычный примитив line. Далее для зеркального отображения объектов пространства относительно этой линии используется следующий алгоритм состоящий из нескольких шагов: 




OНаходим величину радиус вектора одной из точек прямой, относительно которой осуществляется преобразование





OB

(Xb;Yb)

X



B





P

A

(Xa;Ya)



Y





Смещаем преобразуемую точку P пространства на вектор –OB, получаем точку P1 



OB

(Xb;Yb)

X О



B



Р1



P

A

(Xa;Ya)



Y





Находим угол α между AB и осью ОХ



(Xb;Yb)

OB

XО



α

B



Р1



P

A

(Xa;Ya)



Y






Поворачиваем Р вокруг Р1 на угол α, получаем точку Р2





Р2

XО



α

α

B



Р1



P

A

(Xa;Ya)



Y





Смещаем Р2 на вектор ОВ и получаем точку Р!. Преобразование завершено



Р2

XО



Р!

α

α



Р1



P

A

(Xa;Ya)



Y







4.3 Реализация алгоритма преобразования пространства



Реализацию алгоритма преобразования пространства осуществляет метод Mirror (Листинг 3.1.)



Листинг 3.1

void Mirror()

{

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(int j=0; j<2048;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 Основные функции работы с графикой



FormMouseDown - производится сохранение координат курсора;

FormMouseUp - производится конечная прорисовка изображаемого элемента;

FormMouseMove – происходит постоянная перерисовка изображаемого элемента;

LineDRW - происходит оповещение программы о том, что будет происходить прорисовка линии.

RectDRW - происходит оповещение программы о том, что будет происходить прорисовка прямоугольника.

TreDRW1 - происходит оповещение программы о том, что будет происходить прорисовка первой грани треугольника.

TreDRW2 - происходит оповещение программы о том, что будет происходить прорисовка двух оставшихся граней треугольника.

EllDRW - происходит оповещение программы о том, что будет происходить прорисовка эллипса.




5. Технологическая часть



5.1	Назначение программы



Данный программный продукт предназначен для работы с изображением и поэтому должен содержать и выполнять следующие действия:

Работа с графическими файлами

Создание нового графического файла

Рисование основных геометрических примитивов

Рисование отрезков прямых

Рисование прямоугольников

Рисование треугольников

Рисование эллипсов

Дополнительные возможности редактирования

Зеркальное преобразование пространства с нарисованными в нем эллипсами



5.2	Условия выполнения программы



5.2.1 Требования к аппаратной и программной средам

Условия выполнения программы, полученной в результате реализации данного проекта, должны отвечать следующим требованиям:

программа должна выполняться во всех операционных системах Windows XP;

программа может выполняться на IBM-PC совместимом компьютере с процессором не ниже 80486;

для нормального функционирования программы необходим минимальный размер оперативной памяти 16 Мб;

для программы необходимо наличие 3 Мб свободного места на жестком диске;

для работы с программой необходимо наличие устройства ввода (клавиатура, манипулятор «мышь»);

для отображения результатов работы программы необходимо наличие устройства вывода (монитор);



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, в ходе выполнения требований к поставленной задаче были использованы алгоритмы преобразования пространства а также приоберетены новые навыки программирования на С++. Удалось создать программный продукт, отвечающий пунктам изначально заданных требований. Для создания и небольшой коррекции изображения удобно иметь под рукой быстрый и компактный векторный графический редактор, который позволяет внести необходимые изменения и при этом не потребует больших затрат вашего времени и места на жестком диске. 

Такой векторный графический редактор практически не требует места на диске, работает быстро и надежно, не требует больших усилий в его освоении, позволяет создавать и редактировать изображения, что обеспечивает его востребованность у различных пользователей. 

Касательно вариантов расширения программного продукта, возможны добавления таких пунктов как пользовательский интерфейс, представляющий собой наглядное отображение возможностей продукта, сохранение изображения в заданном формате, как целиком, так и пообъектно, добавление других видов графических примитивов, применение заливки, изменение цвета контура примитивов на заданный пользователем и многих других. 




Литература



	Майкл Дж. Янг, Visual C++, 1999 г.

	Архангельский А. Я., Программирование в С++ Builder 6, изд. Бином, 2003 г.

	Архангельский А. Я., С++ Builder 6 справочное пособие (книги 1,2), изд. Бином, 2002 г.

	Культин Н., Самоучитель С++ Builder, БХВ-Петербург, 2004 г.





23