МОУ СОШ №3 г. Осташков Тверская обл.
  
 
 
 
 

Мини-проекты в Delphi

Проект «Падение тела»

Из физики известно, что все тела падают на землю с ускорением, равным ускорению свободного падения. Создадим проект, в котором моделируется падение мяча с высоты 5 м. При этом мячик отскакивает вверх, падает и т. д. При каждом отскоке скорость становится меньше и через некоторое время он останавливается. Падение происходит в соответствии с формулой.

Мы воспользуемся другим приемом. Для анимации необходимо менять положение тела через малые равные промежутки времени. Будем вычислять скорость и высоту через равные промежутки времени и перемещать объект, изображающий мяч на экране. При каждом отскоке направление скорости меняется на противоположное, а сам модуль скорости уменьшается из-за потерь энергии.

На форме размером 570 х 480 разместим слева панель (TPanel), на ней фигуру (TShape) в форме круга размером 25 х 25, любого цвета, таймер (TTimer), для которого установим интервал 10 (100 миллисекунд). Справа четыре кнопки с соответствующими надписями (см рисунок).
Объявим глобальные переменные:
h,v:real;
const g=9.81;dt=0.01; m=100;
Начнем с запуска программы. Процедура для кнопки «Пуск»:

procedure TForm1.Button1Click(Sender:  TObject);
begin
    h:=5;v:=0;
    Timer1.Enabled :=true;
end; 

В ней устанавливаются начальные значения высоты и скорости, запускается таймер.
Расчет нового положения мяча, перемещение его по экрану - в процедуре для таймера. Для этого используем единственное событие OnTimer:

Условие h<=0.3 требуется для того, чтобы смоделировать отскок с учетом размеров мяча. При этом скорость меняет знак, а коэффициент 0,95 учитывает некоторое уменьшение энергии. В условии abs(v)<0.5 abs – абсолютная величина (модуль), число 0,5 подобрано, так как при достижении малой скорости мяч останавливается. Его положение станет  Shape1.Top:=Panel1.ClientHeight-Shape1.Height . Таймер выключается.
v:=v+g*dt; - вычисляет новое значение скорости мяча;
h:=h-v*dt; - вычисляет новое положение мяча;
Shape1.Top:=Panel1.ClientHeight-round(h*m); - перемещает мяч на новое место, где round(h*m) – округление до целого значения. Масштаб m учитывает, что высота панели приблизительно 500, а начальная высота падения 5 метров. (Если расчет производить в сантиметрах, то коэффициент не потребуется).
Остальные процедуры простые и пояснений не требуют.
Кнопка «Стоп»:

procedure TForm1.Button2Click(Sender: TObject);
begin
  Timer1.Enabled := false;
end; 

Кнопка «Продолжить»:

и кнопка «Выход»:

 

 

 

 

 

 

 

 

 

 


 
О мини-проектах
Неуловимая кнопка
Вещий камень
Перетаскивание фигур
Секундомер
Градусы-радианы
Мультик
Падение тела
Прозрачная форма
Регионы
Шарик за мышкой
Таймер
Расписание уроков
Записная книжка
Задача по физике
Определение зачеркнутой цифры
Использование Microsoft Agent в Delphi
 Арифметика
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
             
Hosted by uCoz