diff options
author | Erich Eckner <git@eckner.net> | 2018-05-24 15:17:31 +0200 |
---|---|---|
committer | Erich Eckner <git@eckner.net> | 2018-05-24 15:17:31 +0200 |
commit | b9d89dc79ebc684f30460e2145414d48ae5da8a4 (patch) | |
tree | 7694046d175cd7467080765d5cc67c088f73f794 /epostunit.pas | |
parent | 287695fe3f507e7a1578ffb7a466ed049c5525d4 (diff) | |
download | epost-b9d89dc79ebc684f30460e2145414d48ae5da8a4.tar.xz |
kann nun stückweise integrierten Lineout erzeugen
Diffstat (limited to 'epostunit.pas')
-rw-r--r-- | epostunit.pas | 47 |
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; |