astroCalc/unit1.pas

195 lines
4.1 KiB
Plaintext
Raw Permalink Normal View History

unit Unit1;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, Forms, Controls, Graphics, Dialogs, ComCtrls, ExtCtrls,
Buttons, StdCtrls, Math, Types;
type
{ TForm1 }
TForm1 = class(TForm)
BitBtn1: TBitBtn;
Button1: TButton;
Label1: TLabel;
Label2: TLabel;
LabeledEdit1: TLabeledEdit;
LabeledEdit2: TLabeledEdit;
LabeledEdit3: TLabeledEdit;
LabeledEdit4: TLabeledEdit;
LabeledEdit5: TLabeledEdit;
LabeledEdit6: TLabeledEdit;
PageControl1: TPageControl;
ML: TTabSheet;
TabSheet1: TTabSheet;
procedure BitBtn1Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure LabeledEdit1Change(Sender: TObject);
procedure LabeledEdit2Change(Sender: TObject);
procedure LabeledEdit3Change(Sender: TObject);
procedure LabeledEdit4Change(Sender: TObject);
procedure LabeledEdit4EditingDone(Sender: TObject);
procedure LabeledEdit5Change(Sender: TObject);
procedure LabeledEdit5EditingDone(Sender: TObject);
procedure LabeledEdit6Change(Sender: TObject);
procedure MLContextPopup(Sender: TObject; MousePos: TPoint;
var Handled: Boolean);
procedure PageControl1Change(Sender: TObject);
private
function CalcAbsMFromL(L: Double): Double;
function CalcLstarFromAbsM(M: Double): Double;
function CalcLFromAbsM(M: Double): Double;
function CalcLFromLstar(Lstar: Double): Double;
function CalcLstarFromL(L: Double): Double;
public
end;
const
c = 299792458;
Msun = 4.84;
Lsun = 3.828e26;
var
Form1: TForm1;
implementation
{$R *.lfm}
{ TForm1 }
procedure TForm1.PageControl1Change(Sender: TObject);
begin
end;
procedure TForm1.LabeledEdit2Change(Sender: TObject);
begin
end;
procedure TForm1.LabeledEdit1Change(Sender: TObject);
begin
end;
procedure TForm1.BitBtn1Click(Sender: TObject);
var M, Lstar, L: Double;
begin
try
M := StrToFloat(LabeledEdit1.Text);
except
ShowMessage('keine Fließkommazahl');
M := 0;
end;
Lstar := CalcLstarFromAbsM(M);//Power(10, (M-Msun)/(-2.5));
L := CalcLFromLstar(Lstar);
Lstar := RoundTo(Lstar, -4);
L := RoundTo(L,23);
LabeledEdit2.Text := FloatToStr(Lstar);
LabeledEdit3.Text := FloatToStr(L);
end;
procedure TForm1.Button1Click(Sender: TObject);
var L, M: Double;
begin
try
if LabeledEdit5.Text = '' then L := Lsun
else
L := StrToFloat(LabeledEdit5.Text);
except
ShowMessage('keine Fließkommazahl');
L := Lsun;
end;
M := CalcAbsMFromL(L);
LabeledEdit6.Text := FormatFloat('#.##',M);
end;
procedure TForm1.LabeledEdit3Change(Sender: TObject);
begin
end;
procedure TForm1.LabeledEdit4Change(Sender: TObject);
begin
end;
procedure TForm1.LabeledEdit4EditingDone(Sender: TObject);
var L, Lstar: Double;
begin
try
if LabeledEdit4.Text = '' then Lstar := 1
else
Lstar := StrToFloat(LabeledEdit4.Text);
except
ShowMessage('keine Fließkommazahl');
Lstar := 1;
end;
L := CalcLFromLstar(Lstar);
LabeledEdit5.Text := FormatFloat('0.000E+00',L);
end;
procedure TForm1.LabeledEdit5Change(Sender: TObject);
begin
end;
procedure TForm1.LabeledEdit5EditingDone(Sender: TObject);
var L, Lstar: Double;
begin
try
if LabeledEdit5.Text = '' then L := Lsun
else
L := StrToFloat(LabeledEdit5.Text);
except
ShowMessage('keine Fließkommazahl');
L := Lsun;
end;
Lstar := CalcLStarFromL(L);
LabeledEdit4.Text := FormatFloat('#.##',Lstar);
end;
procedure TForm1.LabeledEdit6Change(Sender: TObject);
begin
end;
procedure TForm1.MLContextPopup(Sender: TObject; MousePos: TPoint;
var Handled: Boolean);
begin
end;
function TForm1.CalcAbsMFromL(L: Double): Double;
begin
CalcAbsMFromL := -2.5 * Log10( L / Lsun )+ Msun;
end;
function TForm1.CalcLstarFromAbsM(M: Double): Double;
begin
CalcLstarFromAbsM := Power(10, (M-Msun)/(-2.5));
end;
function TForm1.CalcLFromAbsM(M: Double): Double;
begin
CalcLFromAbsM := Lsun * Power(10, (M-Msun)/(-2.5));
end;
function TForm1.CalcLFromLstar(Lstar: Double): Double;
begin
CalcLFromLstar := Lstar * Lsun;
end;
function TForm1.CalcLstarFromL(L: Double): Double;
begin
CalcLstarFromL := L / Lsun;
end;
end.