Всё сдал! - помощь студентам онлайн Всё сдал! - помощь студентам онлайн

Реальная база готовых
студенческих работ

Узнайте стоимость индивидуальной работы!

Вы нашли то, что искали?

Вы нашли то, что искали?

Да, спасибо!

0%

Нет, пока не нашел

0%

Узнайте стоимость индивидуальной работы

это быстро и бесплатно

Получите скидку

Оформите заказ сейчас и получите скидку 100 руб.!


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

Тип Реферат
Предмет Информатика и программирование
Просмотров
930
Размер файла
353 б
Поделиться

Ознакомительный фрагмент работы:

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

Министерство Образования Республики Беларусь

УО “Витебский Государственный Технологический Университет"

Пояснительная записка

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

Витебск - 2009

Содержание

Введение.

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

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

Заключение

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

Введение.

В записке приведено описание программы, разработанной в соответствии с заданием на курсовое проектирование по теме “Разработка программы рисования замкнутых многоугольников на языке С++, с использованием библиотеки 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.


Нет нужной работы в каталоге?

Сделайте индивидуальный заказ на нашем сервисе. Там эксперты помогают с учебой без посредников Разместите задание – сайт бесплатно отправит его исполнителя, и они предложат цены.

Цены ниже, чем в агентствах и у конкурентов

Вы работаете с экспертами напрямую. Поэтому стоимость работ приятно вас удивит

Бесплатные доработки и консультации

Исполнитель внесет нужные правки в работу по вашему требованию без доплат. Корректировки в максимально короткие сроки

Гарантируем возврат

Если работа вас не устроит – мы вернем 100% суммы заказа

Техподдержка 7 дней в неделю

Наши менеджеры всегда на связи и оперативно решат любую проблему

Строгий отбор экспертов

К работе допускаются только проверенные специалисты с высшим образованием. Проверяем диплом на оценки «хорошо» и «отлично»

1 000 +
Новых работ ежедневно
computer

Требуются доработки?
Они включены в стоимость работы

Работы выполняют эксперты в своём деле. Они ценят свою репутацию, поэтому результат выполненной работы гарантирован

avatar
Математика
История
Экономика
icon
149686
рейтинг
icon
3150
работ сдано
icon
1362
отзывов
avatar
Математика
Физика
История
icon
144342
рейтинг
icon
5905
работ сдано
icon
2668
отзывов
avatar
Химия
Экономика
Биология
icon
98119
рейтинг
icon
2051
работ сдано
icon
1279
отзывов
avatar
Высшая математика
Информатика
Геодезия
icon
62710
рейтинг
icon
1046
работ сдано
icon
598
отзывов
Отзывы студентов о нашей работе
57 089 оценок star star star star star
среднее 4.9 из 5
НГПУ им. К. Минина
Заказ выполнен быстро и в срок, Без замечаний, реферат очень хороший! 😇
star star star star star
Финансовый университет при правительстве РФ
Автор выполнила работу раньше срока. Оригинальность 85%. Все требования по оформлению рефе...
star star star star star
Курганская Академия доп.образования
Спасибо Вам за работу! Активистка,комсомолка и просто красавица! ) Отличный результат!!!
star star star star star

Последние размещённые задания

Ежедневно эксперты готовы работать над 1000 заданиями. Контролируйте процесс написания работы в режиме онлайн

Проблема объективности в науке

Другое, Философия

Срок сдачи к 25 дек.

только что

Выполнить 1 задание

Контрольная, земельное право

Срок сдачи к 25 дек.

только что

тест км3

Тест дистанционно, Электрические машины

Срок сдачи к 22 дек.

только что

Условие 4 Схема 4 Вариант 4

Курсовая, Теория механизмов и машин

Срок сдачи к 24 дек.

1 минуту назад

Решить 12 задач на тему машина Тьюринга и сеть Петри

Решение задач, Высшая математика

Срок сдачи к 24 дек.

1 минуту назад

6 практических заданий по стратегическому менеджменту

Контрольная, Стратегический менеджмент

Срок сдачи к 28 дек.

1 минуту назад

Составить формулу если в столбике f

Другое, Введение в информационные технологии

Срок сдачи к 21 дек.

1 минуту назад
2 минуты назад

Решить две задачи по геометрии

Решение задач, Геометрия

Срок сдачи к 28 дек.

3 минуты назад

Человек-машина Автор Ламетри Ж.

Эссе, Философия

Срок сдачи к 23 дек.

3 минуты назад

д/з №9 рисунок 10, пятое уравнение в таблице 2 д/з№10,11,12,13

Решение задач, механика материалов

Срок сдачи к 28 дек.

4 минуты назад

Тема: Российская цивилизационная идентичность на современном этапе

Доклад, Основы российской государственности, государственное и муниципальное управление

Срок сдачи к 22 дек.

4 минуты назад

Аналитический отчет на тему : Россия и Куба сотрудничество в международных отношениях

Другое, Аналитика в международных отношениях, государственное и муниципальное управление

Срок сдачи к 22 дек.

5 минут назад
6 минут назад

Выполнит 3 лабораторных работы

Реферат, Программная инженерия

Срок сдачи к 5 февр.

6 минут назад
7 минут назад

Расчет винтового домкрата. решить по примеру.

Решение задач, механика материалов

Срок сдачи к 22 дек.

8 минут назад
planes planes
Закажи индивидуальную работу за 1 минуту!

Размещенные на сайт контрольные, курсовые и иные категории работ (далее — Работы) и их содержимое предназначены исключительно для ознакомления, без целей коммерческого использования. Все права в отношении Работ и их содержимого принадлежат их законным правообладателям. Любое их использование возможно лишь с согласия законных правообладателей. Администрация сайта не несет ответственности за возможный вред и/или убытки, возникшие в связи с использованием Работ и их содержимого.

«Всё сдал!» — безопасный онлайн-сервис с проверенными экспертами

Используя «Свежую базу РГСР», вы принимаете пользовательское соглашение
и политику обработки персональных данных
Сайт работает по московскому времени:

Вход
Регистрация или
Не нашли, что искали?

Заполните форму и узнайте цену на индивидуальную работу!

Файлы (при наличии)

    это быстро и бесплатно