Разработка программы рисования замкнутых многоугольников на языке С , с использованием библиотеки VCL - Курсовая работа

бесплатно 0
4.5 187
Разработка программы для рисования различных правильных многоугольников с помощью объектно-ориентированного языка программирования. Использование для разработки среды C Builder 6 и библиотеки VCL. Разработка интерфейса приложения и алгоритма его работы.

Скачать работу Скачать уникальную работу

Чтобы скачать работу, Вы должны пройти проверку:


Аннотация к работе
Разработка программы производилась в среде C Builder 6, т.к данная среда удобна для разработки, интерфейсы, создаваемые C Builder 6 наглядны и просты для использования. Под графическим интерфейсом пользователя (Graphical User Interface - GUI) подразумевается тип экранного представления, при котором пользователь может выбирать команды, запускать задачи и просматривать списки файлов, указывая на пиктограммы или пункты в списках меню, показанных на экране. Компоненты используемые для построения нашего интерфейса можно представить в виде следующего списка: TFORM - форма, окно, которое в большинстве случаев является пользовательским интерфейсом создаваемого приложения. Анализ системы следует начать с жизненного цикла: вначале работы программы пользователь создает или открывает (импортирует) коллекцию фигур, далее следует выбор одного из действий: создание, перемещение и поворот фигуры: создание фигуры - пользователю необходимо сначала задать количество углов и размер, после чего произвести щелчок левой кнопкой мыши по холсту, в результате чего на указанном месте появится заданный многоугольник; перемещение фигуры - пользователю необходимо просто навести курсор на фигуру, которую он хочет переместить и нажать левую кнопку мыши, после чего переместить курсор в нужную позицию и отпустить кнопку. вращение фигуры - пользователю необходимо сначала задать угол поворота, после чего произвести щелчок левой кнопкой мыши по фигуре в месте, где пользователь хочет расположить центр вращения.Программа, описанная в курсовом проекте, разработана в соответствии с постановкой задачи на курсовое проектирование по теме “Разработка программы рисования замкнутых многоугольников".

План
Содержание

Введение.

Разработка интерфейса приложения

Разработка алгоритма работы приложения, его реализация на языке С

Заключение

Список литературы

Введение
В записке приведено описание программы, разработанной в соответствии с заданием на курсовое проектирование по теме “Разработка программы рисования замкнутых многоугольников на языке С , с использованием библиотеки VCL". Программа предназначена для рисования различных правильных многоугольников.

Разработка программы производилась в среде C Builder 6, т.к данная среда удобна для разработки, интерфейсы, создаваемые C Builder 6 наглядны и просты для использования.

Результаты тестирования подтверждают, что программа правильно выполняет все реализованные, в соответствии с заданием, функции.

Разработка интерфейса приложения

Под графическим интерфейсом пользователя (Graphical User Interface - GUI) подразумевается тип экранного представления, при котором пользователь может выбирать команды, запускать задачи и просматривать списки файлов, указывая на пиктограммы или пункты в списках меню, показанных на экране. Действия могут, как правило, выполняться с помощью мыши, либо нажатием клавиш на клавиатуре. Типичным примером графического интерфейса пользователя является Windows.

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

Интерфейс программы разрабатывался в стиле простейшего графического редактора.

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

Исследование классов библиотеки VCL, используемых в приложении.

Библиотека визуальных компонентов - VCL-библиотека (Visual Component Library) - является репозитарием компонентов, используемых для создания приложений с помощью C Builder. Компонентом называется объект, используемый для создания программы, - флажок, комбинированный список или рисунок. Эти компоненты выбираются с помощью щелчка левой кнопкой мыши и перемещаются в рабочую область. Компоненты VCL-библиотеки представляют собой код, который скомпилирован для выполнения определенных операций, что избавляет разработчика от необходимости всякий раз создавать его заново.

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

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

TMAINMENU - не визуальный компонент, главное меню.

TOPENDIALOG - предназначен для создания окна диалога "Открыть файл".

TSAVEDIALOG - предназначен для создания окна диалога "Сохранить файл".

TPANEL - является контейнером для группирования органов управления.

TLABEL - отображение текста, который не изменяется пользователем. Никакого оформления текста не предусмотрено, кроме цвета метки и текста.

TEDIT - отображение, ввод и редактирование однострочных текстов.

TUPDOWN - кнопка-счетчик, в сочетании с компонентами TEDIT и другими позволяющая вводить цифровую информацию.

TRADIOGROUP - комбинация группового окна GROUPBOX с набором радиокнопок RADIOBUTTON; служит специально для создания групп радиокнопок. Можно размещать в компоненте несколько радиокнопок, но никакие другие органы управления не разрешены.

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

TIMAGE - используется для отображения графики: пиктограмм, битовых матриц и метафайлов.

TSTATUSBAR - представляет собой ряд панелей, отображающих полосу состояния в стиле Windows. Обычно эта полоса размещается внизу формы.

Разработка алгоритма работы приложения, его реализация на языке С

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

В разработанной программе реализованы следующие возможности: помещение фигуры на холст (количество граней задается численно, положение на холсте - с помощью мыши);

вращение фигур на холсте (положение на холсте центра вращения указывается с помощью мыши, угол задается численно);

перемещение фигур на холсте с помощью;

очистку холста от фигур;

сохранение в файл коллекции фигур;

загрузка коллекции фигур из файла в двух вариантах: дополнение, или полная замена уже имеющейся на холсте коллекции (предусмотрена фильтрация файлов нужного типа в диалоге "Открытие файла").

Созданная программа в процессе деятельности может быть представлена рядом состояний, которые осуществляют те или иные действия. В программе можно выделить некоторое начальное и конечное состояние. Анализ системы следует начать с жизненного цикла: вначале работы программы пользователь создает или открывает (импортирует) коллекцию фигур, далее следует выбор одного из действий: создание, перемещение и поворот фигуры: создание фигуры - пользователю необходимо сначала задать количество углов и размер, после чего произвести щелчок левой кнопкой мыши по холсту, в результате чего на указанном месте появится заданный многоугольник;

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

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

Для реализации поставленных задач был написан класс Polygone, которым описываются все многоугольники на форме. Класс реализован следующим образом: class Polygone { friend ostream &operator<< (ostream &output, Polygone polygon);

friend istream &operator>> (istream &input, Polygone &polygon);

private: int n;

double size;

TPOINT center;

TPOINT fulcrum;

int LENX,LENY;

double angle;

public: Polygone ();

Polygone (int n, double size, TPOINT center);

Polygone (int n, double size, TPOINT center, TPOINT fulcrum, double angle);

int GETAMTANGLES ();

double GETSIZE ();

TPOINT GETCENTER ();

TPOINT GETFULCRUM ();

double GETANGLE ();

TPOINT *GETPOINT ();

void SETAMTANGLES (int n);

void SETSIZE (double size);

void SETCORCENTER (TPOINT center);

void SETFULCRUM (TPOINT fulcrum);

void SETANGLE (double angle);

};

Класс имеет несколько закрытых переменных для хранения значений количества углов, размера, координат центра и точки вращения, а также угла, на который повернут многоугольник относительно точки вращения. Далее идет вполне стандартное описание конструкторов и необходимых нам функций, предназначение большинства из них не вызывает вопросов, т.к они являются обычными геттерами и сеттерами, которые возвращают нам значения закрытых переменных. Интересной для рассмотрения является функция GETPOINT (), возвращающая указатель на массив типа TPOINT, хранящий в себе массив точек (вершин), многоугольника. Рассмотрим ее реализацию: TPOINT *Polygone:: GETPOINT () {

TPOINT *point = new TPOINT [this->n] ;

double alpha = ALPHA_FULL/this->n;

for (int i=0; i<n; i ) { int x = this->center. x this->size*cos (alpha*M_PI/ALPHA_HALF);

int y = this->center. y this->size*sin (alpha*M_PI/ALPHA_HALF);

point [i] = Point (x,y);

alpha = ALPHA_FULL/n;

} if (angle) { for (int i=0; i<n; i ) { double R = sqrt (pow (this->fulcrum. x-point [i]. x,2) pow (this->fulcrum. y-point [i]. y,2));

double beta = (ALPHA_HALF/M_PI) *acos ( (point [i]. x- this->fulcrum. x) /R);

if (this->fulcrum. y>point [i]. y) beta = ALPHA_FULL - beta;

double gamma = beta - this->angle;

int x = this->fulcrum. x R*cos (gamma*M_PI/ALPHA_HALF);

int y = this->fulcrum. y R*sin (gamma*M_PI/ALPHA_HALF);

point [i] = Point (x,y);

}

} return point;

}

Для нахождения вершин многоугольника воспользуемся полярной системой координат с центром в центре многоугольника.

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

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

Фигуры в памяти хранятся с использованием класса vector. Класс vector является очень удобным методом для хранения неизвестного числа переменных в памяти. При создании нового многоугольника объект класса Polygone добавляется в список, хранящийся в памяти.

Создание многоугольника происходит при нажатии левой кнопки мыши на холсте, в обработчике события происходит обработка следующего кода: if (RADIOBUTTON1->Checked) { int n = Edit1->Text. TOINT ();

int size = Edit2->Text. TOINT ();

Polygone polygon = Polygone (n,size,TPOINT (X,Y));

heap. push_back (polygon);

UPDATEIMAGE (Image1);

}

В первых двух строках происходит считывание данных из текстовых полей, в одном из которых мы указываем количество углов, а во втором размер создаваемого многоугольника.

Следующий этап - создание многоугольника в памяти и занесение его в список. В последней строке происходит обновление холста. Функция обновления холста реализована следующим образом: void UPDATEIMAGE (TIMAGE *Image) { int n = heap. size ();

Image->Canvas->FILLRECT (Rect (0,0, Image->Width, Image->Height));

for (int i=0; i<n; i ) {

Image->Canvas->Polygon (heap [i]. GETPOINT (), heap [i]. GETAMTANGLES () - 1);

}

}

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

Выбор фигуры для перемещения или вращения реализован на принципе нахождения наименьшего расстояния до центра фигур, который осуществляется с помощью функции GETNUMBERMINDISTANCE (int X, int Y), входными параметрами которой являются координаты положения курсора на холсте.

int GETNUMBERMINDISTANCE (int X, int Y) { int n = heap. size ();

int number = 0;

double MINDISTANCE = sqrt (pow ( (X-heap [number]. GETCENTER (). x),2) pow ( (Y-heap [number]. GETCENTER (). y),2));

for (int i=1; i<n; i ) { double distance = sqrt (pow ( (X-heap [i]. GETCENTER (). x),2) pow ( (Y-heap [i]. GETCENTER (). y),2));

if (MINDISTANCE>distance) {

MINDISTANCE = distance;

number = i;

}

} if (heap [number]. GETSIZE () <MINDISTANCE) return - 1;

return number;

}

Данная функция рассчитывает расстояния до центра всех фигур, и выбирает из них наименьшее. Расстояние также должно быть меньше радиуса описанной окружности для данной фигуры. Возвращаемое значение равно номеру этой фигуры в списке. Во время перемещения фигуры происходит обработка события MOUSEMOVE, в котором для перемещаемой фигуры задается новое положение центра и заново прорисовывается холст.

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

Вывод
Программа, описанная в курсовом проекте, разработана в соответствии с постановкой задачи на курсовое проектирование по теме “Разработка программы рисования замкнутых многоугольников".

Интерфейс созданной программы удобен, прост, наглядно отображает ее возможности.

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

Все это свидетельствует о работоспособности программы и позволяет сделать вывод о ее пригодности для создания и редактирования замкнутых многоугольников.

Список литературы
1. Язык программирования C : Б. Страуструп.

2. Программирование в C Builder 6: А.Я. Архангельский. -М.: изд. "Бином", 2003.

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

4. Вычислительная геометрия и компьютерная графика на C : М. Ласло пер. с англ.В. Львова. -М.: изд. "Бином", 1997.

Вы можете ЗАГРУЗИТЬ и ПОВЫСИТЬ уникальность
своей работы


Новые загруженные работы

Дисциплины научных работ





Хотите, перезвоним вам?