![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Новичок
Джуниор
Регистрация: 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; } //----------------------------------------------------------- |
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Движение со скоростью света и быстрее скорости света - Сверхсветовое движение | 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 |