summaryrefslogtreecommitdiff
path: root/epostunit.pas
diff options
context:
space:
mode:
authorErich Eckner <git@eckner.net>2018-05-24 15:17:31 +0200
committerErich Eckner <git@eckner.net>2018-05-24 15:17:31 +0200
commitb9d89dc79ebc684f30460e2145414d48ae5da8a4 (patch)
tree7694046d175cd7467080765d5cc67c088f73f794 /epostunit.pas
parent287695fe3f507e7a1578ffb7a466ed049c5525d4 (diff)
downloadepost-b9d89dc79ebc684f30460e2145414d48ae5da8a4.tar.xz
kann nun stückweise integrierten Lineout erzeugen
Diffstat (limited to 'epostunit.pas')
-rw-r--r--epostunit.pas47
1 files changed, 39 insertions, 8 deletions
diff --git a/epostunit.pas b/epostunit.pas
index 46377dc..b98a661 100644
--- a/epostunit.pas
+++ b/epostunit.pas
@@ -190,7 +190,7 @@ type
procedure ermittlePhasenWinkel(threads: longint);
procedure entspringe(threads: longint; entspringen: tEntspringModus);
procedure fft2dNachbearbeitung(threads: longint; nB: tFFTDatenordnung);
- procedure schreibeWert(var f: textfile; p: tExtPoint; var letzterWert: extended; entspringen,verschiebung: extended; skalierung: string; tmpValues: tKnownValues);
+ procedure schreibeWert(var f: textfile; p: tExtPoint; var letzterWert: extended; entspringen,verschiebung: extended; skalierung: string; linienIntegral: tLinienIntegral; tmpValues: tKnownValues);
function exprToFloat(sT: boolean; s: string): extended;
function findeMaximum(sT: boolean; f: tMyStringList; threads: longint; warn: tWarnStufe): boolean;
function paramsDump: string;
@@ -6046,6 +6046,7 @@ end;
function tWerte.erzeugeLineout(sT: boolean; f: tMyStringList): boolean;
var
ab: t2x2Extended;
+ linienIntegral: tLinienIntegral;
datei,s,skalierung: string;
fOut: textfile;
bekannteBefehle: tMyStringList;
@@ -6067,6 +6068,9 @@ begin
ab['x']:=extPoint(0,0);
ab['y']:=extPoint(_xSteps-1,_tSiz-1);
+ linienIntegral.von:=extPoint(0,0);
+ linienIntegral.schritt:=extPoint(0,0);
+ linienIntegral.schritte:=0;
skalierung:='1';
verschiebung:=0;
@@ -6123,6 +6127,25 @@ begin
iWaag:=false;
continue;
end;
+ if istDasBefehl('integriere entlang:',s,bekannteBefehle,true) then begin
+ tmp:=exprToFloat(sT,erstesArgument(s,','));
+ tmpPoint:=extPoint(cos(tmp),sin(tmp));
+ tmp:=kont2diskFak('x',exprToFloat(sT,erstesArgument(s,',')));
+ linienIntegral.von:=-tmp*tmpPoint;
+ tmp:=kont2diskFak('x',exprToFloat(sT,s));
+ linienIntegral.schritt:=tmp*tmpPoint;
+ linienIntegral.schritte:=ceil(max(
+ abs(
+ (linienIntegral.schritt['x']-linienIntegral.von['x'])/(_xStop-_xStart)*(_xSteps-1)
+ ),
+ abs(
+ (linienIntegral.schritt['y']-linienIntegral.von['y'])/(_tStop-_tStart)*(_tSiz-1)
+ )
+ ));
+ linienIntegral.schritt:=
+ (1/linienIntegral.schritte)*linienIntegral.schritt;
+ continue;
+ end;
if istDasBefehl('Aufpunkt und Richtung:',s,bekannteBefehle,true) then begin
tmp:=kont2disk('x',exprToFloat(sT,erstesArgument(s,',')));
tmpPoint:=extPoint(tmp,kont2disk('y',exprToFloat(sT,erstesArgument(s,','))));
@@ -6179,11 +6202,15 @@ begin
end;
letzterWert:=nan;
if integriere then begin
- if (verschiebung<>0) and integriere then begin
+ if linienIntegral.schritte<>0 then begin
+ gibAus('Ich kann einen Lineout nicht zwei Mal integrieren!',3);
+ exit;
+ end;
+ if verschiebung<>0 then begin
gibAus('Ich kann einen Lineout (noch) nicht gleichzeitig verschieben und integrieren!',3);
exit;
end;
- if (skalierung<>'1') and integriere then begin
+ if skalierung<>'1' then begin
gibAus('Ich kann einen Lineout (noch) nicht gleichzeitig skalieren und integrieren!',3);
exit;
end;
@@ -6220,10 +6247,14 @@ begin
3);
exit;
end;
+ if (linienIntegral.schritte<>0) and (entspringen>=0) then begin
+ gibAus('Ich kann nicht gleichzeitig entspringen und über eine Linie integrieren (das kann unbeabsichtigte Ergebnisse haben)!',3);
+ exit;
+ end;
if not sT then begin
tmpValues:=tKnownValues.create(knownValues);
for i:=0 to schritte do
- schreibeWert(fOut,ab['x']+(i/schritte)*(ab['y']-ab['x']),letzterWert,entspringen,verschiebung,skalierung,tmpValues);
+ schreibeWert(fOut,ab['x']+(i/schritte)*(ab['y']-ab['x']),letzterWert,entspringen,verschiebung,skalierung,linienIntegral,tmpValues);
tmpValues.clear;
tmpValues.free;
end;
@@ -6276,14 +6307,14 @@ begin
result:=true;
end;
-procedure tWerte.schreibeWert(var f: textfile; p: tExtPoint; var letzterWert: extended; entspringen,verschiebung: extended; skalierung: string; tmpValues: tKnownValues);
+procedure tWerte.schreibeWert(var f: textfile; p: tExtPoint; var letzterWert: extended; entspringen,verschiebung: extended; skalierung: string; linienIntegral: tLinienIntegral; tmpValues: tKnownValues);
begin
tmpValues.add('x',transformationen.positionAufAchseZuWert(lOben,p['x']/_xSteps));
tmpValues.add('y',transformationen.positionAufAchseZuWert(lLinks,p['y']/_tSiz));
case genauigkeit of
- gSingle: sWerte.schreibeWert(f,round(p['x']),round(p['y']),disk2kont(p),letzterWert,entspringen,verschiebung,skalierung,tmpValues,@callBackGetValue);
- gDouble: dWerte.schreibeWert(f,round(p['x']),round(p['y']),disk2kont(p),letzterWert,entspringen,verschiebung,skalierung,tmpValues,@callBackGetValue);
- gExtended: eWerte.schreibeWert(f,round(p['x']),round(p['y']),disk2kont(p),letzterWert,entspringen,verschiebung,skalierung,tmpValues,@callBackGetValue);
+ gSingle: sWerte.schreibeWert(f,round(p['x']),round(p['y']),disk2kont(p),letzterWert,entspringen,verschiebung,skalierung,tmpValues,linienIntegral,@callBackGetValue);
+ gDouble: dWerte.schreibeWert(f,round(p['x']),round(p['y']),disk2kont(p),letzterWert,entspringen,verschiebung,skalierung,tmpValues,linienIntegral,@callBackGetValue);
+ gExtended: eWerte.schreibeWert(f,round(p['x']),round(p['y']),disk2kont(p),letzterWert,entspringen,verschiebung,skalierung,tmpValues,linienIntegral,@callBackGetValue);
end{of Case};
end;