Программа простейшего варианта имитации движения окружностей. Курсовая работа (т). Информационное обеспечение, программирование.

⚡ 👉🏻👉🏻👉🏻 ИНФОРМАЦИЯ ДОСТУПНА ЗДЕСЬ ЖМИТЕ 👈🏻👈🏻👈🏻
Информационное обеспечение, программирование
Вы можете узнать стоимость помощи в написании студенческой работы.
Помощь в написании работы, которую точно примут!
Похожие работы на - Программа простейшего варианта имитации движения окружностей
Нужна качественная работа без плагиата?
Не нашел материал для своей работы?
Поможем написать качественную работу Без плагиата!
Государственное образовательное
учреждение
Высшего профессионального образования
«Санкт-Петербургский государственный
технологический институт
Факультет информационных технологий и
управления
Специальность: 230100 «Автоматизированные
системы обработки информации и управления»
Используя библиотеку MFC, необходимо разработать программу, которая
позволит решить следующие задачи:
. Создать 30 окружностей со случайными параметрами (координаты
центра, радиус, цвет) и вывести их на экран.
. Обеспечить интерфейс изменения параметров окружностей.
. Созданные окружности должны перемещаться по определенному закону
в соответствии с вариантами заданий.
Окружности перемещаются слева направо, при достижении правой границы они
перемещаются скачком к левой границе и случайным образом меняется радиус
окружностей в пределах 1 - 30.
1. При инициализации окружности не должны накладываться друг на
друга.
. В процессе перемещения окружности не должны вылетать за
указанные координаты экранной области.
Для реализации движения окружностей был написан алгоритм приводящий к их
перемещению слава направо с последующим появлением окружностей в левой части
экрана, при достижении ими правой границы. Алгоритм представляет собой
простейший вариант имитации движения окружностей.
Библиотека MFC (Microsoft Foundation Classes) предлагает поддержку модели
документ/представление, в которой логика работы приложения явным образом
отделяется от кода, ответственного за пользовательский интерфейс.
Разделение происходит как на уровне файлов (этот код содержится в разных
единицах трансляции), так и на уровне классов - за хранение данных приложения и
работу с ними отвечает один класс, а за реализацию пользовательского интерфейса
- другой.
В нашем случае код этих классов размещён в следующих файлах:
Заголовочный файл
документа, хранящего данные приложения.
Исходный файл документа,
хранящего данные приложения.
Исходный файл вида,
отвечающий за отображение информации.
В программе использовались следующие константы:
Число попыток установить
окружность
microsoft
foundation classes алгоритм
Для хранения координат точки на экране (точками задаются центры
окружностей), а также, для задания скорости смещения по осям X и Y во время
перемещения используется структура: vec2d.
Для задания параметров окружностей используется структура Circle, в
которой определены:
pos -
структура vec2d, центр окружности (pos.x и pos.y координаты X и Y
соответственно);- радиус окружности;- структура vec2d, скорость перемещения
(velocity.x и velocity.y скорости перемещения по осям);- цвет окружности.
В программе использовались следующие функции:
int GetCircleIndex(const
CPoint& pt) const
Позволяет по точке в
плоскости получить индекс окружности, которая содержит эту точку
Возвращает ссылку на
окружность по её индексу
Определение пересечения
окружностей
afx_msg void
OnTimer(UINT_PTR nIDEvent)
Функция по таймеру
осуществляет вызов DoSimulation() таким образом реализуя один шаг имитации
движения
afx_msg void
OnLButtonDown(UINT nFlags, CPoint point)
Отслеживание нажатия левой
кнопки мыши
afx_msg void
OnMouseMove(UINT nFlags, CPoint point)
afx_msg void
OnLButtonUp(UINT nFlags, CPoint point)
Отслеживание отпускания
левой кнопки мыши
afx_msg void
OnActionStartsimulation()
Запустить имитацию движения
окружностей посредством пункта меню или нажатия F5
afx_msg void
OnActionStopsimulation()
Остановить имитацию
движения окружностей посредством пункта меню или нажатия F6
afx_msg void
OnRButtonDown(UINT nFlags, CPoint point)
Отслеживание нажатия правой
кнопки мыши для вызова контекстного меню
afx_msg void
PopupMenuCircleProps()
Вызов окна изменения
радиуса окружностей
afx_msg void
PopupMenuCircleColor()
Вызов окна изменения цвета
окружностей
При запуске программы создаются окружности. Их можно перемещать курсором
мыши, изменять радиус и цвет. Запустить/остановить имитацию движения
окружностей можно с помощью соответствующего пункта меню Action или нажатием
функциональных клавиш F5/F6.
// SpheresDoc.h : interface of the CSpheresDoc class
#pragma oncevec2d {d () {}d (double x, double y) : x(x),
y(y){}d (vec2d const& other) : x(other.x), y(other.y){}
// MANIPULATORSd& operator+=(vec2d const&
other);d& operator-=(vec2d const& other);d& operator*=(double
value);d& operator/=(double value);d& normalize();x,y;
};Circle {() : velocity(1,0), color(RGB(0,0,0)) {}
// Переменная color хранит информацию о цвете окружности
{: // create from serialization
only();_DYNCREATE(CSpheresDoc)
// Attributes:::vector m_circles;m_area;
// Operations:GetCircleIndex(const CPoint& pt) const;
// Описание метода DrawCircle для прорисовки окружностей в
окнеDrawCircle(CDC *pDC);
// Проверка на пересечение окружностейIsIntersect(Circle);
// Моделирование движения окружностей
// Overrides:BOOL OnNewDocument();void
Serialize(CArchive& ar);
#ifdef _DEBUGvoid AssertValid() const;void
Dump(CDumpContext& dc) const;
// Generated message map functions:_MESSAGE_MAP()
// SpheresDoc.cpp : implementation of the CSpheresDoc class
// CSpheresDoc_DYNCREATE(CSpheresDoc,
CDocument)_MESSAGE_MAP(CSpheresDoc, CDocument)_MESSAGE_MAP()
// CSpheresDoc construction/destruction::CSpheresDoc()
// TODO: add one-time construction code here
}::~CSpheresDoc(){}int bottom=660,right=660, min_radius=1,
max_radius=40,nCircles = 30,nTries = 1000;CSpheresDoc::OnNewDocument()
// TODO: add reinitialization code here
// (SDI documents will reuse this
document)(!CDocument::OnNewDocument()) return FALSE;
const int area_width = m_area.right - m_area.left;int
area_high = m_area.bottom - m_area.top;_circles.clear();(int tries=0 ; tries
< nTries && m_circles.size() < nCircles; tries++) {cir;.pos.x =
(int)(rand()%(area_width-2*max_radius)+max_radius);.pos.y =
(int)(rand()%(area_high-2*max_radius)+max_radius);.radius=
rand()%(max_radius-min_radius)+min_radius;.color=RGB(rand()%255,rand()%255,rand()%255);
// Проверка на пересечение с существующими
окружностями(!IsIntersect(cir))_circles.push_back(cir); // Пересечения нет -
ставим окружность
// CSpheresDoc
serializationCSpheresDoc::Serialize(CArchive& ar)
#ifdef _DEBUGCSpheresDoc::AssertValid() const
}CSpheresDoc::Dump(CDumpContext& dc) const
// CSpheresDoc commandsCSpheresDoc::GetCircleIndex(const
CPoint& pt) const
{(int i=(int)m_circles.size()-1; i >= 0; i--)(
pow(pt.x-m_circles[i].pos.x,2) +(pt.y-m_circles[i].pos.y,2) <
pow(m_circles[i].radius,2))i;-1;
}& CSpheresDoc::GetCircleById(int id)
// Проверка на пересечение с существующими окружностями
bool CSpheresDoc::IsIntersect(Circle cir)
{(unsigned int i=0; iSelectObject(&pen);>Ellipse(x-r,y-r,x+r,y+r);
}obn=false;mass[nCircles];CSpheresDoc::DoSimulation()
{(int i=0; i=bottom)
{[i]=i;_circles[i].color=RGB(rand()%255,rand()%255,rand()%255);_circles[i].pos.x
-=ch;
{((m_circles[i].pos.x-m_circles[i].radius)<=0)
{[i]=-1;_circles[i].color=RGB(rand()%255,rand()%255,rand()%255);_circles[i].pos.x
+=ch;
{_circles[i].pos.x
-=ch+3;_circles[i].radius=rand()%max_radius+min_radius;
// SpheresView.h : interface of the CSpheresView class
#pragma onceCSpheresView : public CView
{: // create from serialization
only();_DYNCREATE(CSpheresView)
// Attributes:* GetDocument() const;selected_circle;
// Overrides:void OnDraw(CDC* pDC); // overridden to draw
this viewBOOL PreCreateWindow(CREATESTRUCT& cs);:
#ifdef _DEBUGvoid AssertValid() const;void
Dump(CDumpContext& dc) const;
// Generated message map functions:_MESSAGE_MAP():_msg void
OnTimer(UINT_PTR nIDEvent);_msg void OnLButtonDown(UINT nFlags, CPoint point);_msg
void OnMouseMove(UINT nFlags, CPoint point);_msg void OnLButtonUp(UINT nFlags,
CPoint point);_msg void OnActionStartsimulation();_msg void
OnActionStopsimulation();_msg void OnRButtonDown(UINT nFlags, CPoint
point);_msg void PopupMenuCircleProps();_msg void PopupMenuCircleColor();_msg
void OnActionStopsimulaton();
#ifndef _DEBUG // debug version in
SpheresView.cppCSpheresDoc* CSpheresView::GetDocument() const
{ return reinterpret_cast(m_pDocument); }
// SpheresView.cpp : implementation of the CSpheresView class
// CSpheresView_DYNCREATE(CSpheresView, CView)_MESSAGE_MAP(CSpheresView,
CView)
//
ON_WM_TIMER()_WM_LBUTTONDOWN()_WM_MOUSEMOVE()_WM_LBUTTONUP()
//ON_WM_CONTEXTMENU()_COMMAND(ID_ACTION_STARTSIMULATION,
&CSpheresView::OnActionStartsimulation)_COMMAND(ID_ACTION_STOPSIMULATION,
&CSpheresView::OnActionStopsimulation)_WM_TIMER()_WM_RBUTTONDOWN()_COMMAND(ID__PROPERTIES,
&CSpheresView::PopupMenuCircleProps)_COMMAND(ID__COLOR,
&CSpheresView::PopupMenuCircleColor)_COMMAND(ID_ACTION_STOPSIMULATON,
&CSpheresView::OnActionStopsimulaton)_MESSAGE_MAP()
// CSpheresView construction/destruction::CSpheresView() :
selected_circle(-1)
// TODO: add construction code here
}CSpheresView::PreCreateWindow(CREATESTRUCT& cs)
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT csCView::PreCreateWindow(cs);
// CSpheresView drawingCSpheresView::OnDraw(CDC* pDC)
// Получение указателя на документ и проверка его валидности
CSpheresDoc* pDoc = GetDocument();_VALID(pDoc);(!pDoc);
// Рисование окружностей>DrawCircle(pDC);
#ifdef _DEBUGCSpheresView::AssertValid() const
}CSpheresView::Dump(CDumpContext& dc) const
}* CSpheresView::GetDocument() const // non-debug version is
inline
{(m_pDocument->IsKindOf(RUNTIME_CLASS(CSpheresDoc)));(CSpheresDoc*)m_pDocument;
#endif //_DEBUGCSpheresView::OnLButtonDown(UINT nFlags,
CPoint point)
// Получение указателя на документ и проверка его валидности
CSpheresDoc* pDoc = GetDocument();_VALID(pDoc);
// Запросить индекс окружности, в которой находится точка
selected_circle =
pDoc->GetCircleIndex(point);::OnLButtonDown(nFlags, point);
}CSpheresView::OnMouseMove(UINT nFlags, CPoint point)
// Получение указателя на документ и проверка его валидности
CSpheresDoc* pDoc =
GetDocument();_VALID(pDoc);(!pDoc);(selected_circle != -1){
// Перемещение окружности в точку, указанную мышью
pDoc->GetCircleById(selected_circle).pos.x =
point.x;>GetCircleById(selected_circle).pos.y = point.y;();
}CSpheresView::OnLButtonUp(UINT nFlags, CPoint point)
{_circle = -1;::OnLButtonUp(nFlags, point);
}CSpheresView::OnActionStartsimulation()
}CSpheresView::OnActionStopsimulation()
}CSpheresView::OnActionStopsimulaton()
}CSpheresView::OnTimer(UINT_PTR nIDEvent)
{* pDoc =
GetDocument();_VALID(pDoc);(!pDoc);>DoSimulation();::OnTimer(nIDEvent);
}CSpheresView::OnRButtonDown(UINT nFlags, CPoint point)
{* pDoc =
GetDocument();_VALID(pDoc);(!pDoc);screen_point(point);(&screen_point);_circle
= pDoc->GetCircleIndex(point);(selected_circle != -1) {
// Popup menupopup;.LoadMenu(IDR_MENU_POPUP);*
real_menu=popup.GetSubMenu(0);_menu->TrackPopupMenu(TPM_LEFTALIGN,screen_point.x,screen_point.y,this);
}CSpheresView::PopupMenuCircleProps()
{* pDoc = GetDocument();_VALID(pDoc);(!pDoc);
// Инициализация данных
диалога.m_radius=pDoc->GetCircleById(selected_circle).radius;
// Отображение диалога и проверка выхода по нажатию «ОК»(dlg.DoModal() == IDOK)
// Если радиус
был изменён( pDoc->GetCircleById(selected_circle).radius !=
dlg.m_radius ) {
// Обновить радиус>GetCircleById(selected_circle).radius = dlg.m_radius;
}CSpheresView::PopupMenuCircleColor()
{* pDoc =
GetDocument();_VALID(pDoc);(!pDoc);dlg;(dlg.DoModal() == IDOK)(
pDoc->GetCircleById(selected_circle).color != dlg.GetColor() )
{>GetCircleById(selected_circle).color = dlg.GetColor();
Похожие работы на - Программа простейшего варианта имитации движения окружностей Курсовая работа (т). Информационное обеспечение, программирование.
Отчет По Практики Ип Примеры
Курсовая Работа На Тему Бухгалтерский Финансовый Учет
Курсовая работа по теме Психолого–педагогические основы сенсорного воспитания ребенка в процессе игры
Реферат по теме Функции государства в экономике.
Реферат На Тему Уменьшение Дебиторской Задолженности: От Превентивных Мер До Принудительного Взыскания
Реферат по теме Гипоксия и иммунитет
Курсовая Работа На Тему Курсовая Работа По Гражданскому Праву
Контрольная Работа Информатика Класс Матвеева
Дипломная работа: Связная речь слабослышащих дошкольников
Реферат по теме Специфика российской модели бюджетного федерализма
Реферат по теме Actions of the Department for Combating Corruption and Security
Реферат по теме Денежные потоки и Интернет (Денежные переводы СНГ - США)
Физика 7 Класс Самостоятельные И Контрольные Работы
Казачья Культура Реферат
Сочинение Про Захара Из Обломова
Дипломная работа по теме Технология формирования имиджа социальной организации
Курсовая работа: Симптомы кризиса 7 лет и методы сглаживания отрицательных проявлений кризиса в воспитании первоклассников
Дипломная работа по теме Проектирование динамического web-сайта коммерческой организации ООО 'Посредник'
Курсовая работа: Реализация административно-правовых норм
Реферат: Кисты поджелудочной железы. Скачать бесплатно и без регистрации
Похожие работы на - Правовое регулирование алиментных отношений с участием несовершеннолетних
Реферат: Wasting Time Essay Research Paper Wasting Death
Реферат: Гарантии законности избрания меры пресечения в виде заключения под стражу