Студопедия

Главная страница Случайная страница

КАТЕГОРИИ:

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Ход работы. 1. Загрузите среду визуального программирования Bilder C++




 

1. Загрузите среду визуального программирования Bilder C++. Сохраните новый проект на компьютере в новой папке.

2. Измените заголовок формы в свойстве Caption – Броуновское движение.

3. Вставьте в форму объект типа TPaintBox, как показано на рис4.4.Для этого щелкните на пиктограмме объекта типа PaintBox, которая находится на закладке System палитры компонентов главного окна Bilder C++.

4. После этого щелкните в точке вставки на форме. Разверните на все окно формы как показано на рисунке выше. Измените его название со значения по умолчанию PaintBox1 на более звучное Screen.

5. Добавьте на форму кнопку, нажатием которой вся система будет запускаться.В качестве её названия введите StartStopBtn , а в качестве надписи на ней Пуск

 

6. Нажатием клавиши F12 перейдите в окно кода программы и подключите библиотеки #include <stdlib.h> #include <math.h> в модуле Unit1.cpp

#include <Math.hpp> в модуле Unit1.h

7. Добавим описание глобальных переменных и констант, после объявления объекта

TForm1 *Form1;

 

bool IsRunning=false;

struct Molecule

{

int X,Y,Vx,Vy;

bool WasCollision;// указывает на столкновение с броуновской частицей во время предыдущей итерации

} ;

const int N=30; // количество молекул

const int Rb=60; //радиус броуновской частицы

const float K=0.01; //коэффициент передачи

8. Двойным щелчком на кнопкеStartStopBtn перейдите к редактированию обработчика события в полученную заготовку в окне кода программы

void __fastcall TForm1::StartStopBtnClick(TObject *Sender)

{

// скопировать код программы из проекта 4, задачи идеальный газ.

}

9. В теле функции добавим описание переменных, координаты броуновской частицы Xb,Yb. И составляющие скорости броуновской частицы Vxb, Vyb

 

float Xb, Yb;

float Vxb,Vyb;

10. Определим начальные значения этих переменных: пусть вначале частица находится в центре аквариума, а скорость её рана нулю. Для программирования где-нибудь в начале ( например, после вызова Screen->Refresh(); добавьте строки

 

Xb=Screen->Width / 2;

Yb=Screen->Height/2;

Vxb=0;

Vyb=0;

11. В тело цикла инициализации молекул ( то есть там, где мы определяем начальное положение и скорость каждой молекулы) необходимо добавить указание того, что молекула еще ни разу не сталкивалась с броуновской частицей

for (i=0; i<n; i++)

{

…………………..

Mol[i].WasCollision=false;

}

12. Далее создадим код , обрабатывающий столкновение объектов. Поместим этот фрагмент сразу после строк, рисующих молекулу на новой позиции по следующему алгоритму:

ЕСЛИ произошло столкновение ТО



ЕСЛИ на предыдущей итерации эта молекула не сталкивалась с частицей, ТО

Обрабатываем столкновение

КОНЕЦЕсли

Фиксируем, что на данной итерации i-я молекула столкнулась с броуновской частицей

ИНАЧЕ

Фиксируем, что столкновения не было.

 

 

Screen->Canvas->Pen->Color=clBlue;

Screen->Canvas->Ellipse(Mol[i].X - R, Mol[i].Y - R,Mol[i].X + R, Mol[i].Y + R);

//новый код

if ( sqrt( pow(Mol[i].X-Xb,2)+pow(Mol[i].Y-Yb,2) ) < (Rb+ R) )

{

if(Mol[i].WasCollision= = false)

{

Vxb=Vxb+K*Mol[i].Vx;

Vyb=Vyb+K*Mol[i].Vy;

}

Mol[i].WasCollision=true;

}

else

 

Mol[i].WasCollision=false;

 

}

13. Осталось добавить последнее, это обновить положение броуновской частицы на экране.

Алгоритм:

a. Стереть частицу

b. Сдвинуть на новую позицию

c. Обработать отражение от стенок аквариума

d. Нарисовать частицу на новом месте

Делается это сразу после окончания цикла for ( ; ;) движения молекулы, но в теле цикла while() {}

// a

Screen->Canvas->Pen->Color=clBtnFace;

Screen->Canvas->Ellipse(ceil(Xb-Rb),ceil(Yb-Rb), ceil(Xb+Rb),ceil(Yb+Rb) );

//b

Xb=Xb+Vxb;

Yb=Yb+Vyb;

//c

if (Xb> Screen->Width-Rb)

{

Xb=Screen->Width-Rb;

Vxb= -Vxb;

}

if (Xb<Rb)

{Xb=Rb; Vxb= -Vxb;}

if (Yb> Screen->Height-Rb)

{

Yb=Screen->Height-Rb;

Vyb=-Vyb;

}

if (Yb<Rb)

{Yb=Rb; Vyb= -Vyb;}

//d

Screen->Canvas->Pen->Color=clRed;

Screen->Canvas->Ellipse(ceil(Xb-Rb),ceil(Yb-Rb),ceil(Xb-Rb),ceil(Yb+Rb) );

Sleep(10);

Application->ProcessMessages();



 

Указание: Если возникли ошибки по алгоритму программы, воспользуйтесь готовым вариантом проекта 5, реализованного в языке Дельфи. Расположенного в папке \Пректы\Проект5\Модель3Brown. Как образец кода программы при нажатии кнопки StartStopBtn.

Для этого скопируйте папку в виртуальную машину , запустите файл

В среде Дельфи, перейдите в окно кода программы щелчком на кнопке, откроется код программы. Сравните со своим кодом , написанным на Builder C++, они почти должны совпадать. Таким образом самостоятельно можно исправить возникшие ошибки. В проекте №4, были уже даны указания по кодировке алгоритма с языка Паскаль на язык С++


mylektsii.ru - Мои Лекции - 2015-2018 год. (0.009 сек.)Пожаловаться на материал