Задание на курсовую работу
- Описание: В прямоугольном зале с колоннами необходимо разместить круглый бассейн максимального радиуса. Очевидно, он не должен пересекать колонны и стены зала. Найти радиус и координаты центра бассейна и изобразить графически.
- Исходные данные: В примере, первая строка содержит одно число N —количество колонн (0 ≤ N ≤ 1000). Во второй строке записаны три действительных числа: R — радиус каждой из колонн, MX, MY — ширина и высота зала. Дале идут N строк по два действительных числа: координаты очередной колонны относительно левого нижнего угла зала.
- Результат: максимальный радиус бассейна и координаты его центра. Все числа должны быть выведены с пятью правильными знаками после запятой.
- Пример:
Исходные данные |
Результат |
1 5 100 100 55 55 |
|
Описание принципа работы приложения в текстовой форме:
Пошаговый алгоритм использования программы:
- Запуск приложения
- Ввод ширины и высоты зала с бассейном (ввод только числовых значений)
- При создании зала программа уведомляет Вас о том, каким образом добавляются и удаляются колонны в зале.
- Добавление – левая кнопка мыши
- Удаление – правая кнопка мыши
- Результаты задачи: максимальный радиус бассейна и координаты его центра, отражаются в верхнем левом углу формы, каждое изменение в программе (добавление или удаление колонны) влечет за собой изменение результатов решения задачи.
Фрагмент программного кода
private: System::Void DrawPanel_MouseClick(System::Object^ sender, System::Windows::Forms::MouseEventArgs^ e) { sCircle t = newCircle(e->X,e->Y,1); //если левая то добавляем круг if (e->Button == System::Windows::Forms::MouseButtons::Left){//проверка пересмечения for (int i=0;i<cCount;i++) if (is2CirclesCollide(t,c[i])) return; //вызов формы add_form->cx = e->X; add_form->cy = e->Y; add_form->ShowDialog(); if (add_form->cr<=0) return; //добавление в массив t = newCircle(add_form->cx,add_form->cy,add_form->cr); cCount++; c = (sCircle*) realloc(c,sizeof(sCircle)*cCount); c[cCount-1] = t; } //если правая то удаляем if (e->Button == System::Windows::Forms::MouseButtons::Right) { bool find = false; for (int i=0;i<cCount;i++){ if (is2CirclesCollide(t,c[i])){ find = true; if (cCount == 1){ cCount = 0; break;} else{ c[i] = c[cCount-1]; cCount--; break; } } } if (!find) return; }
Содержание архива
- исходный код на C++ WinForms Visual Studio
- Пояснительная записка (9 страниц)
klausms