Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > C++ Builder
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.12.2011, 00:48   #1
Игорь228
Новичок
Джуниор
 
Регистрация: 10.12.2011
Сообщений: 2
Восклицание движение молекул

моделтрую броунивское движение
нужно добавить еще одну молекулу щоб она начала движение с низу и влетала в етот сосуд с остальними молекулами...




#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;

const int N = 50;
const int A = 641;
const int B = 285;
const int R = 10;



int n = 0;

class MoleculaClass
{
public:
void Draw();
double X, Y, X1, Y1;
double Vx, Vy;
};
void MoleculaClass::Draw()
{
Form1 -> PaintBox1 -> Canvas -> Ellipse(X - R, Y - R, X + R, Y + R);
Form1 -> PaintBox1 -> Canvas -> MoveTo(0,285);
Form1 -> PaintBox1 -> Canvas -> LineTo(641,285);
Form1 -> PaintBox1 -> Canvas -> Pen ->Color = clRed;
}


MoleculaClass Molecula[N];

//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
bool Ok;
Molecula[0].X = R + random(A - 2 * R);
Molecula[0].Y = R + random(B - 2 * R);
for (int i = 1; i <= N - 1; i++)
{
Ok = false;
while (Ok == false)
{
Ok = true;
Molecula[i].X = R + random(A - 2 * R);
Molecula[i].Y = R + random(B - 2 * R);
for (int j = 0; j <= i - 1; j++)
if (((Molecula[i].X - Molecula[j].X) * (Molecula[i].X -
Molecula[j].X) + (Molecula[i].Y - Molecula[j].Y) *
(Molecula[i].Y - Molecula[j].Y)) < 4 * R * R)
Ok = false; continue;
}
}
for (int i = 0; i <= N - 1; i++)
{
Molecula[i].Vx = 0.002 * random(100) - 0.1;
Molecula[i].Vy = 0.002 * random(100) - 0.1;
}
Timer1 -> Enabled = true;

}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
exit(0);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{

for (int i = 0; i <= N - 1; i++)
{
Molecula[i].X += Molecula[i].Vx*10;
Molecula[i].Y += Molecula[i].Vy*10;
}
double vx, vy;
for (int i = 0; i <= N - 2; i++)
for (int j = i + 1; j <= N - 1; j++)
if (((Molecula[i].X - Molecula[j].X) * (Molecula[i].X -
Molecula[j].X) + (Molecula[i].Y - Molecula[j].Y) *
(Molecula[i].Y - Molecula[j].Y)) < 4 * R * R)
{
vx = Molecula[i].Vx;
vy = Molecula[i].Vy;
Molecula[i].Vx = Molecula[j].Vx;
Molecula[i].Vy = Molecula[j].Vy;
Molecula[j].Vx = vx;
Molecula[j].Vy = vy;
}
for (int i = 0; i <= N - 1; i++)
{
if (Molecula[i].X < R || Molecula[i].X > A - R)
Molecula[i].Vx *= -1;
if (Molecula[i].Y < R || Molecula[i].Y > B - R)
Molecula[i].Vy *= -1;
}
if (n == 0)
{
PaintBox1 -> Repaint();
for (int i = 0; i <= N - 1; i++)
Molecula[i].Draw();
}
n++;
if (n == 10) n = 0;

}
//-----------------------------------------------------------
Игорь228 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Движение со скоростью света и быстрее скорости света - Сверхсветовое движение Alar Свободное общение 354 13.11.2011 21:32
Движение колец и Движение линий сверху Iren1993 Помощь студентам 2 07.11.2011 19:48
Довольно сложная задача по программированию(столкновение двух "молекул" и вычисление нового угла полёта) DoubleTrouble Помощь студентам 5 26.01.2011 21:41
Количество молекул воздуха в помещении Cular Microsoft Office Excel 7 23.05.2010 20:30
движение alex(21) Паскаль, Turbo Pascal, PascalABC.NET 9 20.08.2009 00:08