Смекни!
smekni.com

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

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.