- •Министерство образования и науки
- •Задание на курсовую работу
- •Постановка задачи
- •Проектная часть
- •Теоретический материал
- •Общее описание разработки
- •1.2.1.Структура приложения
- •1.2.2.Таблица свойств объектов
- •1.2.3. Список идентификаторов
- •2. Функциональное описание приложения
- •3. Описание работы программы с представлением экранных форм
- •1. Form1.H
- •2. Circle.H
- •3. Circle.Cpp
- •4. Form2.H
1.2.3. Список идентификаторов
Таблица 1.2
Область видимости |
Идентификатор |
Назначение |
Тип |
Form1 | |||
Глобальная
|
flag |
Переменная, отвечающая за переключение режимов кнопки
|
static bool |
elements |
Массив шаров |
int | |
c1 c2 |
|
int | |
sz |
Переменная, отвечающая за количество элементов в массиве
|
int | |
nx ny |
Переменные, отвечающие за нормаль |
float | |
tx ty |
Переменные, отвечающие за тангент-вектор |
float | |
dist |
Переменная, отвечающая за расстояние между шарами
|
float | |
sx sy |
Перемещение шара по х и у |
float | |
vx1 vy1 vx2 vy2 |
Вспомогательные переменные скорости |
float | |
x y
|
Переменные, отвечающие за координаты шаров |
float | |
dt
|
Переменная, отвечающая за приращение времени |
float | |
v_res_x v_res_x
|
Переменные для накапливания скорости
|
float | |
vx
|
компонента скорости по х |
float | |
vy |
компонента скорости по у |
float | |
r |
радиус i-го шара |
float | |
z
|
Переменная, отвечающая за трение |
float | |
dx dy
|
Переменные, отвечающие за рас стояние от курсора до центра шара |
float
| |
numcolis |
Переменная для подсчёта количества столкновений с другими шарами |
float | |
Локальная |
i j |
Итератор цикла
|
int |
d |
Диаметр i-го шара |
int |
2. Функциональное описание приложения
Главная задача достигается двумя функциями – добавление/движение и просчёт столкновений шаров.
Form1_MouseClick
Действия выполняемые при щелчке клавишей мыши(добавление и движение шаров).
Сначала вводится диаметр шаров. После этого нажатием кнопкой мыши на экран считываются координаты клика мыши и создаётся новый экземпляр класса circle. Проверяется режим активности кнопки button1. Если активна кнопка «Добавление шаров» то с помощью функции Add(gcnew circle(e->X,e->Y,d)) шары добавляются на игровое поле. При смене режима на «Движение шаров» и нажатием кнопкой мыши на экран воспроизводится движение шаров с помощью функции SetSpeed(elements[i]->GetCenterX() - e->X, elements[i]->GetCenterY() - e->Y)
Dvig( )
Функция расчёта столкновения шаров.
Выбираются два любых шара с1 и с2. Рассчитываются расстояния dx и dy от курсора до центра шаров по разным координатам. Вычисляется расстояние dist между шарами.
Если скалярное произведение векторов меньше нуля, то есть шары летят друг на друга, а не в разные стороны, и если шары находятся на расстоянии меньше половины радиусов шара, вычисляется дальнейшая траектория движения шаров после их столкновения, используя нормаль и тангент-вектор.