Программа, моделирующая прыгающий мяч
Введение
Моделирование - исследование объектов познания на их моделях;
построение и изучение моделей реально существующих предметов, процессов или
явлений с целью получения объяснений этих явлений, а также для предсказания
явлений, интересующих исследователя.
Модель - объект произвольной природы, который отражает
главные, с точки зрения решаемой задачи, свойства объекта моделирования.
Моделирование повсеместно используется в науке, так как
является упрощенным, а иногда и единственным методом получении информации о
свойствах объекта, его диагностики, а также прогнозировании.
В данном примере мы рассматриваем мяч - мягкий упругий
предмет сферической либо овальной формы, в основном используемый в спортивных
играх.
Цель работы
Целью работой является разработка программы на языке C#, моделирующей поведение
мяча в закрытом безвоздушном пространстве. Пользователь должен иметь
возможность изменять значения гравитации, и трения о стены.
программа схема блок код
Описание
проекта
Интерфейсом программы является форма (рис.1).
Рис.1. Интерфейс программы
Основная форма содержит:
. Основное поле, по которому прыгает мяч.
2. Полосы прокрутки Gravity и Friction, отвечающие за
гравитацию и трение соответственно. Значения выбираются по десятибалльной
шкале. Значение 0 означает полное отсутствие гравитации или трения о стенки.
. Кнопка Bounce придаёт мячу случайную скорость в
случайном направлении.
. Кнопка Defaults возвращает первоначальные
значения гравитации и трения.
. Щелчком правой кнопкой мыши по полю вызывается
контекстное меню. Stop обнуляет скорость мяча. Pause приостанавливает
движение мяча. Повторный щелчок на Pause возобновит движение мяча.
. Если движение мяча приостановлено, то в нижнем
правом углу появляется надпись "Paused”.
Если кинетическая энергия мяча близка к нулю, и он лежит на
нижней границе поля, то он автоматически прыгнет в произвольную сторону с
произвольной скоростью.
Пользователь также может перетаскивать мяч левой кнопкой мыши
по его полю.
Окно формы можно растянуть, либо развернуть во весь экран.
Рис.2. Блок-схема программы
Основной
код программы
Следующим образом мяч совершает прыжки по полю.
public void timer1_Tick (object sender, EventArgs
e)
{
// Создаётся Bitmap, из которого будет
рисоваться мяч.
bmp = new Bitmap (pictureBox1. Width,
pictureBox1. Height);= Graphics. FromImage (bmp);= new Random ();
// При первой загрузке, мяч появляется из
случайного места поля.
if (l! =true) {= rand. Next (6, pictureBox1.
Size. Width - 56);= rand. Next (6, pictureBox1. Size. Height - 56);
}= true;= pictureBox1. BackColor;= Color. Black;=
new Pen (col1);= new Pen (col2,6);redBrush = new SolidBrush (col1);white = new
SolidBrush (col);
// Вычисление трения по значениям trackBar2.
Как видно, фронтальное столкновение забирает больше энергии, чем поперечное.
if (trackBar2. Value! = 0)
{= (trackBar2. Value - ( (trackBar2. Value - 1) +
(trackBar2. Value - 1) / 10.0)) * 0.75;= (trackBar2. Value - ( (trackBar2.
Value - 1) + (trackBar2. Value - 1) / 10.0)) * 0.95;
}{ trenieX = 1; trenieY = 1; }+= gravity;
// Очистка поля.
g. Clear (pictureBox1. BackColor);+= moveX;+=
moveY;= (float) X;= (float) Y;
// Отрисовка мяча.
g. DrawEllipse (black, X1, Y1, 50, 50);. FillEllipse
(redBrush, X1, Y1, 50, 50);. Image = bmp;
// Проверка столкновения с границами поля.
if (X <= 0)
{= 0;= - moveX;*= trenieX;*= trenieY;
{= pictureBox1. Size. Width - 56;= - moveX;*=
trenieX;*= trenieY;
}(Y <= 0)
{= 0;= - moveY;*= trenieX;*= trenieY;
}(Y >= pictureBox1. Size. Height - 56)
{= pictureBox1. Size. Height - 56;= - moveY;*=
trenieX;*= trenieY;
}( (! pss) && (! tah))
{
// Заставляем мяч прыгнуть.
if ( (Math. Abs (moveX) <= 0.1 &&
Math. Abs (moveY) <= 0.86 && DateTime. Now. Second % 3 == 0
&& Y >= pictureBox1. Size. Height - 60) && (bounc))
{= (rand. NextDouble () + rand. NextDouble ()) -
1;= - (rand. NextDouble ());*= 50;*= 50;+= moveX;+= moveY;
}
}
}
}
Вывод
Итак, мы получили простую и увлекательную программу,
моделирующую прыгающий мяч. С помощью ввода различных значений трения и
гравитации, а также изменения размера поля, можно получить и исследовать
различные результаты.
Дальнейшее развитие программы можно вести в двух
направлениях: в улучшении физической части, и графической. В физической части
можно добавить сопротивление воздушной среды, вывод реальной скорости мяча, а
также привязать значения гравитации и трения к конкретным значениям g и µ. В графической части
можно добавить третье измерение, и рассматривать поведения мяча в пространстве.
Список
используемой литературы
1. Жарков
В.А. Самоучитель Жаркова по анимации и мультипликации в Visual C#.net 2003. - М.:
Жарков Пресс, 2003. - 432 с.