Автор |
Сообщение |
slon_az
Участник
Байконур
|
# Дата: 17 Фев 2006 22:59
Знакомый создает электронный дневник погоды, копию АВ-6.
Подскажите? есть ли прямая формула для получения значения точки росы по данным температуры и температуры смоченного, а то я на основании физической связи e=E(τ) вывел формулу, но она получилась с дифференциалами, и дальше уже меня не хватило ее преобразовать, подзабыл многое...
|
Corvus
Автор сайта
###Corvus###
|
# Дата: 18 Фев 2006 00:30
slon_az
Психрометрическая формула есть в предисловии к псих. таблицам, в ней используется Е при Т смоч. термометра, а функция Е(Т) вообще такова:
function Met_E_func($t) {// hPa, Т - в °С
$Eo=6.107; $a=7.63; $b=241.9;
$Result = $Eo*pow(10,($a*$t/($b+$t)));
return $Result;
}
Это на языке РНР, но суть, думаю, ясна.
pow(10, ...) - функция возведения в степень (10 - основание, после запятой - показатель).
|
Corvus
Автор сайта
###Corvus###
|
# Дата: 18 Фев 2006 00:32
Ну и ещё до кучи - вычисление точки росы по темп-ре и влажности:
function Met_Td_func($t,$f_percent) { // C
$Eo=6.107; $a=7.63; $b=241.9;
$e = Met_E_func($t)*$f_percent/100;
$Tempo = Met_Lg($e/$Eo);
$Result = $b*$Tempo/($a-$Tempo);
return $Result;
}
function Met_Lg($x) {
if ($x == 0) $Result = '0';
else
$Result = log10($x);
return $Result;
}
|
Corvus
Автор сайта
###Corvus###
|
# Дата: 20 Фев 2006 05:27
А вот тоже самое на Дельфи (достал доинтернетные свои разработки, 2000 г.):
function Power(Base,Exponent:single):single;
begin
Result:=Exp(Exponent*Ln(Base));
end;
function RoundTo(x:single; CountFigureAftPoint:byte):single;
var
Tempo: single;
begin
Tempo:=Power(10,CountFigureAftPoint);
Result:=(Round(x*Tempo))/Tempo;
end;
function Lg(x:single):single;
begin
Result:=0.43429*Ln(x);
end;
function E_func(T:single):single; {hPa}
const
Eo=6.107; a=7.63; b=241.9;
begin
Result:=Eo*Power(10,(a*T/(b+T)));
Result:=RoundTo(Result,2);
end;
function Td_func(T,f_percent:single):single; {C}
var
e,Tempo: single;
const
Eo=6.107; a=7.63; b=241.9;
begin
e:=E_func(T)*f_percent/100;
Tempo:=Lg(e/Eo);
Result:=b*Tempo/(a-Tempo);
Result:=RoundTo(Result,2);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
Editing:=True;
L1Source:=Form1.Label1.Caption;
L2Source:=Form1.Label2.Caption;
end;
procedure TForm1.BitBtn1Click(Sender: TObject);
var
Tdry,Tdamp,e,Td:single;
f: single;
begin
case Editing of
True: begin
Tdry:=StrToFloat(Form1.Edit1.Text);
Tdamp:=StrToFloat(Form1.Edit2.Text);
e:=E_func(Tdamp)-0.7947*(Tdry-Tdamp);
if e<0 then
ShowMessage('Неправильно введена температура смоченного термометра!')
else begin
f:=RoundTo(100*e/E_func(Tdry),0);
Td:=RoundTo(Td_func(Tdry,f),1);
Form1.Edit1.Text:=FloatToStr(f);
Form1.Edit2.Text:=FloatToStr(Td);
Form1.Label1.Caption:='Показатели влажности:';
Form1.Label2.Caption:='Отн.влажн. Точка росы';
end;
end;
False: begin
Form1.Label1.Caption:=L1Source;
Form1.Label2.Caption:=L2Source;
Form1.Edit1.Text:='';
Form1.Edit2.Text:='';
Form1.Edit1.SetFocus;
end;
end;
Editing:=not Editing;
end;
|
Corvus
Автор сайта
###Corvus###
|
# Дата: 20 Фев 2006 05:31
slon_az
есть ли прямая формула для получения значения точки росы по данным температуры и температуры смоченного
Кстати, а зачем искать ПРЯМУЮ формулу? Ведь это было бы громоздко и трудночитаемо. А использование нескольких последовательных формул, наоборот, наглядно и понятно. Ну а компьютеру-то по фигу, считать по одной громоздкой формуле или по нескольким простым, в любом случае расчёт займёт ничтожную долю секунды.
|
slon_az
Участник
Байконур
|
# Дата: 20 Фев 2006 22:45
Кстати, а зачем искать ПРЯМУЮ формулу? Ведь это было бы громоздко и трудночитаемо. А использование нескольких последовательных формул, наоборот, наглядно и понятно. Ну а компьютеру-то по фигу, считать по одной громоздкой формуле или по нескольким простым, в любом случае расчёт займёт ничтожную долю секунды.
Владимир спасибо!!!
Передам знакомому он кстати на Дельфи сейчас работает!!!
Я как раз Зависимость выводил по формулам взятым из дневника погоды и
физики атмосферы. не смог ее преобразовать.
Кстати огромный привет от Ленки Световой, она ушла от нас, сейчас переехала в Кострому, общаюсь с ней по нету.
|
Corvus
Автор сайта
###Corvus###
|
# Дата: 20 Фев 2006 23:02
slon_az
На здоровье)
Лене тоже огромный привет!!!
|
Alexman1
Участник
Москва
|
# Дата: 21 Фев 2006 00:33 - Поправил: Alexman1
Corvus
procedure TForm1.FormCreate(Sender: TObject);
Dfm-ку забыли выложить! -:)
Хотя -все очень наглядно.Спасибо-уже Exe-ник сделал.-на даче очень пригодится.
|
Corvus
Автор сайта
###Corvus###
|
# Дата: 21 Фев 2006 07:48
Alexman1
Dfm-ку забыли выложить! -:)
Ну там форма-то наипримитивнейшая :)
На здоровье!
|