|
Уральский Федеральный Университет
имени Первого Президента РФ
Б.Н.Ельцина
Кафедра теоретической физики и прикладной математики
Процессы роста фракталов
дисциплина: Вычислительная физика
преподаватель: Мазуренко В.В.
группа: Фт-38042
выполнили: Корейша В.А.
Левина Ю.В.
Екатеринбург 2011г.
1)Разработали компьютерную программу генерирующую кластеры на квадратной решетке в соответствии с моделью Эдена.
2)Определили число занятых ячеек М(r) в радиусе r от затравочной ячейки. Получили М для нескольких значений r.
Из графика видно, что d=1,5 (среднее значение).
Приложение. Код программы
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include <math.h>
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
int P=0;
int n,i,g,p,r,r1,t;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{ P = 1;
randomize();
t = 100000;
r=0;
r1=0;
g = 2;
p = 0;
for(i=0; i < StrToInt(Edit1->Text); i++)
for(n=0; n < StrToInt(Edit1->Text); n++)
StringGrid1->Cells[n][i] = 0;
StringGrid1->ColCount = StrToInt(Edit1->Text);
StringGrid1->RowCount = StrToInt(Edit1->Text);
StringGrid1->DefaultColWidth = 600/StrToInt(Edit1->Text) - sqrt(sqrt(sqrt(sqrt(StrToInt(Edit1->Text)))));
StringGrid1->DefaultRowHeight = 600/StrToInt(Edit1->Text)- sqrt(sqrt(sqrt(sqrt(StrToInt(Edit1->Text)))));
n = int(StrToInt(Edit1->Text)/2);
i = int(StrToInt(Edit1->Text)/2);
StringGrid1->Cells[n][i] = 1;
while (t>0)
{
for(i=1; i < StrToInt(Edit1->Text)-1; i++)
for(n=1; n < StrToInt(Edit1->Text)-1; n++)
if (StringGrid1->Cells[n][i] == 1)
{
if (StringGrid1->Cells[n-1][i]!= 1)
StringGrid1->Cells[n-1][i] = g;
if (StringGrid1->Cells[n+1][i]!= 1)
StringGrid1->Cells[n+1][i] = g;
if (StringGrid1->Cells[n][i-1]!= 1)
StringGrid1->Cells[n][i-1] = g;
if (StringGrid1->Cells[n][i+1]!= 1)
StringGrid1->Cells[n][i+1] = g;
}
for(i=0; i < StrToInt(Edit1->Text); i++)
for(n=0; n < StrToInt(Edit1->Text); n++)
if (StringGrid1->Cells[n][i] == g)
p = p+1;
r = random (p)+1;
for(i=0; i < StrToInt(Edit1->Text); i++)
for(n=0; n < StrToInt(Edit1->Text); n++)
{
if (StringGrid1->Cells[n][i] == g)
r1++;
if (r1==r)
{StringGrid1->Cells[n][i] = 1;
break;
}
}
for(i=0; i < StrToInt(Edit1->Text); i++)
StringGrid1->Cells[0][i] = 0;
for(i=0; i < StrToInt(Edit1->Text); i++)
if(StringGrid1->Cells[0][i] > 1)
t = -1;
for(i=0; i < StrToInt(Edit1->Text); i++)
if(StringGrid1->Cells[i][0] > 1)
t = -1;
for(i=0; i < StrToInt(Edit1->Text); i++)
if(StringGrid1->Cells[i][StrToInt(Edit1->Text)] > 1)
t = -1;
for(i=0; i < StrToInt(Edit1->Text); i++)
if(StringGrid1->Cells[StrToInt(Edit1->Text)][i] > 1)
t = -1;
for(i=1; i < StrToInt(Edit1->Text)-1; i++)
for(n=1; n < StrToInt(Edit1->Text)-1; n++)
if (StringGrid1->Cells[n][i] == 1)
{
if (StringGrid1->Cells[n-1][i]!= 1)
StringGrid1->Cells[n-1][i] = g;
if (StringGrid1->Cells[n+1][i]!= 1)
StringGrid1->Cells[n+1][i] = g;
if (StringGrid1->Cells[n][i-1]!= 1)
StringGrid1->Cells[n][i-1] = g;
if (StringGrid1->Cells[n][i+1]!= 1)
StringGrid1->Cells[n][i+1] = g;
}
g++;
t--;
Edit2->Text = IntToStr(StrToInt(Edit2->Text) + 1);
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
StringGrid1->ColCount = StrToInt(Edit1->Text);
StringGrid1->RowCount = StrToInt(Edit1->Text);
StringGrid1->DefaultColWidth = 600/StrToInt(Edit1->Text) - sqrt(sqrt(sqrt(sqrt(StrToInt(Edit1->Text)))));
StringGrid1->DefaultRowHeight = 600/StrToInt(Edit1->Text)- sqrt(sqrt(sqrt(sqrt(StrToInt(Edit1->Text)))));
for(int i=0; i < StrToInt(Edit1->Text); i++)
for(int n=0; n < StrToInt(Edit1->Text); n++)
StringGrid1->Cells[n][i] = 0;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::StringGrid1DrawCell(TObject *Sender, int ACol,
int ARow, TRect &Rect, TGridDrawState State)
{
if(P!=0)
{
if(StrToFloat(StringGrid1->Cells[ACol][ARow]) == 1)
{
StringGrid1->Canvas->Brush->Color = clBlack;
StringGrid1->Canvas->FillRect(Rect);
}
else
if(StrToFloat(StringGrid1->Cells[ACol][ARow])!= 0)
{
StringGrid1->Canvas->Brush->Color = clRed;
StringGrid1->Canvas->FillRect(Rect);
}
else
{
StringGrid1->Canvas->Brush->Color = clWhite;
StringGrid1->Canvas->FillRect(Rect);
}
}
}
//---------------------------------------------------------------------------
Дата добавления: 2015-10-21; просмотров: 16 | Нарушение авторских прав
<== предыдущая лекция | | | следующая лекция ==> |
Высшие корковые функции человека 47 страница | | | Мистеру Дэвиду, который напомнил мне, какое удовольствие — писать, который помогал мне и верил в меня 1 страница |