Проект. «Моделирование процесса теплообмена». квадратной пластинке, окруженной с четырех сторон обогревателями.

advertisement
Проект. «Моделирование процесса теплообмена».
Программа моделирует процесс теплообмена, протекающий в некоторой
квадратной пластинке, окруженной с четырех сторон обогревателями.
Работу над проектом разобьем на три этапа:
I.
II.
III.
Нарисуем квадратную пластинку и четыре обогревателя.
Зададим исходные (начальные) температуры обогревателей и пластинки.
В соответствии с законами физики, моделируем процесс теплообмена.
Этап I. Нарисуем квадратную пластинку и четыре обогревателя.
Обогреватели будут изображены в виде четырех объектов типа TPanel
соответствующих размеров. Их мы нарисуем заранее на этапе визуального
проектирования формы.
Пластинку мы условно разделим на 2500 (50 х 50) маленьких частей и
будем считать, что в пределах этих частей (клеток) температура одинаковая и
процесс теплообмена протекает между этими клетками. Это допущение нашей
компьютерной модели, небольшое упрощение настоящего физического
явления.
Пластинку мы создадим в процедуре FormCreate. Для этого объявим
глобальный массив 50 х 50 типа TPanel (объект типа панель):
const n=50;
var p:array[1..n,1..n]of tpanel;
(В строке Uses должен быть прописан модуль ExtCtrls).
Далее поступим следующим образом:
procedure TForm1.FormCreate(Sender: TObject);
var i,k:integer;
begin
for i:=1 to n do
for k:=1 to n do begin
p[i,k]:=tpanel.Create(form1);
p[i,k].Left:=55+k*5;
p[i,k].Top:=45+i*5;
p[i,k].Width:=5;
p[i,k].Height:=5;
p[i,k].Color:=c;
p[i,k].Parent:=form1;
end;
end;
Как видно размер частей (клеток) - 5 на 5 пикселей.
Добавим еще кнопку Start и получим такой вид формы:
Этап II.
Зададим исходные (начальные) температуры обогревателей и
пластинки.
Визуально температуру пластинки и обогревателей будем изображать
определенными цветами (в зависимости от значений температур). Для удобства
зададим некоторый интервал возможных температур, например от 0 до 800
градусов. Этот интервал удобно разбить на 10 частей (по 100 градусов) и
сопоставить каждой части в соответствие определенный цвет.
Проверку температур и выбор цвета можно осуществить в некоторой
процедуре, например, так:
procedure prov;
begin
case t of
0..100:c:=clblue;
101..200:c:=clTeal;
201..300:c:=clskyblue;
301..400:c:=claqua;
401..500:c:=cllime;
501..600:c:=clpurple;
601..700:c:=clfuchsia;
701..800:c:=clred;
end;
end;
Значения температур (и соответственно цвет) проще задавать случайным
образом:
t:=random(801);t1:=t;
prov;
panel1.Color:=c;
t:=random(801);t2:=t;
prov;
panel2.Color:=c;
t:=random(801);t3:=t;
prov;
panel3.Color:=c;
t:=random(801);t4:=t;
prov;
panel4.Color:=c;
Аналогично и начальную температуру (и цвет) самой пластинки.
Заданные таким образом температуры нам понадобятся для реализации
процесса теплообмена. Введем массив:
a:array[0..1,0..n+1,0..n+1]of integer;
{n = 50}
Трехмерным массив задан неслучайно, так как, очевидно, новые
температуры «клеток» не должны сразу же влиять на своих соседей в пределах
одного цикла теплообмена (здесь, цикл теплообмена – это просмотр всех 2500
(n x n) «клеток»).
Поэтому первый индекс массива будет играть роль своеобразного
переключателя (см. проект «Живые клетки»):
L:=0, а затем L:=1 - L, таким образом 0  1.
При этом a[L,0,k]:=t1 температура верхнего обогревателя,
a[L,n+1,k]:=t2 температура нижнего обогревателя,
a[L,k,0]:=t4 температура левого обогревателя,
a[L,k,n+1]:=t3 температура правого обогревателя.
Таким образом, любая клетка будет иметь четырех соседей:
i –1, k
i, k-1
i, k
i, k+1
i+1, k
Для крайних клеток соседними являются температуры обогревателей.
Этап III. В соответствии с законами физики, моделируем процесс теплообмена.
Новую температуру клетки будем определять как среднее арифметическое
температур ее соседей:
t:=round((a[l,i-1,k]+a[l,i,k-1]+a[l,i,k+1]+a[l,i+1,k])/4);
Причем значение температуры мы округлим до целого.
Просмотр всех частей («клеток») будем производить в процедуре
Timer1Timer:
procedure TForm1.Timer1Timer(Sender: TObject);
var i,k:integer;
begin
for i:=1 to n do
for k:=1 to n do begin
t:=round((a[l,i-1,k]+a[l,i,k-1]+a[l,i,k+1]+a[l,i+1,k])/4);
a[1-l,i,k]:=t; prov; p[i,k].Color:=c;
end;
l:=1-l;
end;
Таймер будем включать кнопкой Start, этой же кнопкой процесс можно
будет остановить (и возобновить снова):
if timer1.Enabled=false then begin
timer1.Enabled:=true; button1.Caption:='Stop';
end
else begin
timer1.Enabled:=false; button1.Caption:='Start';
end;
Причем свойство Interval таймера рекомендуется сделать равным 1:
timer1.Interval:=1;
В результате можем получить, например, такие картинки:
Для большей динамики можно время от времени менять температуру
обогревателей случайным образом.
Download