diff options
author | Erich Eckner <git@eckner.net> | 2020-07-06 09:30:28 +0200 |
---|---|---|
committer | Erich Eckner <git@eckner.net> | 2020-07-06 09:30:28 +0200 |
commit | 0ff506a1c07ac389c8c96521072f39fd2000da64 (patch) | |
tree | 2633c1205b0af674c8b8416120493eb7d81ea751 | |
parent | f5a944a15c68383379638188e868611b6103cbc7 (diff) | |
download | epost-0ff506a1c07ac389c8c96521072f39fd2000da64.tar.xz |
epostunit.pas: entferneNullteOrdnung() neu
-rw-r--r-- | epost.lpr | 11 | ||||
-rw-r--r-- | epost.lps | 24 | ||||
-rw-r--r-- | epostunit.pas | 126 |
3 files changed, 147 insertions, 14 deletions
@@ -483,6 +483,17 @@ begin aufraeumen; halt(1); end; + if istDasBefehl('entferne nullte Ordnung in',s,bekannteBefehle,true) then begin + i:=findeWerte(s,nil,@wertes,@konturen,false); + if i<0 then begin + aufraeumen; + halt(1); + end; + if wertes[i].entferneNullteOrdnung(syntaxTest,inf,maxThreads) then + continue; + aufraeumen; + halt(1); + end; if istDasBefehl('extrahiere Einhüllende von',s,bekannteBefehle,true) then begin i:=findeWerte(s,nil,@wertes,@konturen,false); if i<0 then begin @@ -22,7 +22,6 @@ <Unit2> <Filename Value="epostunit.pas"/> <IsPartOfProject Value="True"/> - <IsVisibleTab Value="True"/> <EditorIndex Value="2"/> <TopLine Value="4955"/> <CursorPos Y="4989"/> @@ -41,9 +40,10 @@ <Unit4> <Filename Value="typenunit.pas"/> <IsPartOfProject Value="True"/> + <IsVisibleTab Value="True"/> <EditorIndex Value="10"/> - <TopLine Value="1487"/> - <CursorPos X="59" Y="1505"/> + <TopLine Value="1379"/> + <CursorPos X="30" Y="1391"/> <UsageCount Value="200"/> <Loaded Value="True"/> </Unit4> @@ -212,7 +212,7 @@ <UsageCount Value="10"/> </Unit27> </Units> - <JumpHistory Count="30" HistoryIndex="29"> + <JumpHistory Count="29" HistoryIndex="28"> <Position1> <Filename Value="epostunit.pas"/> <Caret Line="7836" TopLine="7819"/> @@ -310,29 +310,25 @@ <Caret Line="4500" TopLine="4483"/> </Position24> <Position25> - <Filename Value="epostunit.pas"/> - <Caret Line="4927" TopLine="4957"/> + <Filename Value="typenunit.pas"/> + <Caret Line="231" Column="19" TopLine="219"/> </Position25> <Position26> <Filename Value="typenunit.pas"/> - <Caret Line="231" Column="19" TopLine="219"/> + <Caret Line="227" Column="11" TopLine="219"/> </Position26> <Position27> <Filename Value="typenunit.pas"/> - <Caret Line="227" Column="11" TopLine="219"/> + <Caret Line="237" Column="32" TopLine="219"/> </Position27> <Position28> <Filename Value="typenunit.pas"/> - <Caret Line="237" Column="32" TopLine="219"/> + <Caret Line="243" Column="33" TopLine="219"/> </Position28> <Position29> <Filename Value="typenunit.pas"/> - <Caret Line="243" Column="33" TopLine="219"/> - </Position29> - <Position30> - <Filename Value="typenunit.pas"/> <Caret Line="249" Column="39" TopLine="220"/> - </Position30> + </Position29> </JumpHistory> <RunParams> <FormatVersion Value="2"/> diff --git a/epostunit.pas b/epostunit.pas index 7f01b39..dee94bc 100644 --- a/epostunit.pas +++ b/epostunit.pas @@ -175,6 +175,7 @@ type function berechneVerzerrung(sT: boolean; f: tMyStringList; threads: longint; quelle: tWerte; warn: tWarnStufe): boolean; function berechneLambdaZuOmegaVerzerrung(sT: boolean; f: tMyStringList; threads: longint; quelle: tWerte): boolean; function entferneArtefakte(sT: boolean; f: tMyStringList; threads: longint): boolean; + function entferneNullteOrdnung(sT: boolean; f: tMyStringList; threads: longint): boolean; function extrahiereEinhuellende(sT: boolean; f: tMyStringList; threads: longint; warn: tWarnStufe): boolean; function extrahierePhase(sT: boolean; f: tMyStringList; threads: longint; warn: tWarnStufe): boolean; function extrahiereKanten(sT: boolean; f: tMyStringList; threads: longint): boolean; @@ -4926,6 +4927,131 @@ begin result:=true; end; +function tWerte.entferneNullteOrdnung(sT: boolean; f: tMyStringList; threads: longint): boolean; +var + Zeit: extended; + vertikal: boolean; + fenster: tFenster; + s: string; + i: int64; + fertig: boolean; + fensterThreads: array of tFensterThread; + bekannteBefehle: tMyStringList; +begin + result:=false; + Zeit:=now; + if not sT then + gibAus('Artefakte entfernen ...',3); + fenster:=tSin2Fenster.create; + fenster.aktiv:=false; + vertikal:=false; + bekannteBefehle:=tMyStringList.create; + repeat + if not f.metaReadln(s,true) then begin + gibAus('Unerwartetes Dateiende!',3); + fenster.free; + exit; + end; + bekannteBefehle.clear; + if istDasBefehl('Ende',s,bekannteBefehle,false) then + break; + if istDasBefehl('horizontal',s,bekannteBefehle,false) then begin + vertikal:=false; + continue; + end; + if istDasBefehl('vertikal',s,bekannteBefehle,false) then begin + vertikal:=true; + continue; + end; + if istDasBefehl('Gauß:',s,bekannteBefehle,true) then begin + if fenster.aktiv then begin + gibAus('entferneNullteOrdnung kann nur ein Fester anwenden!',3); + exit; + end; + fenster.free; + fenster:=tGauszFenster.create; + (fenster as tGauszFenster).breite:=exprToFloat(sT,s); + fenster.aktiv:=true; + fenster.invers:=true; + continue; + end; + if istDasBefehl('Sin²:',s,bekannteBefehle,true) then begin + if fenster.aktiv then begin + gibAus('entferneNullteOrdnung kann nur ein Fester anwenden!',3); + exit; + end; + fenster.free; + fenster:=tSin2Fenster.create; + (fenster as tSin2Fenster).breite:=round(kont2diskFak(vertikal,exprToFloat(sT,erstesArgument(s)))); + (fenster as tSin2Fenster).rand:=round(kont2diskFak(vertikal,exprToFloat(sT,s))); + fenster.aktiv:=true; + fenster.invers:=true; + continue; + end; + bekannteBefehle.sort; + gibAus('Verstehe Option '''+s+''' nicht beim Entfernen der nullten Ordnung!'#10'Ich kenne:'#10+bekannteBefehle.text,3); + bekannteBefehle.free; + fenster.free; + exit; + until false; + bekannteBefehle.free; + + if not fenster.aktiv then begin + gibAus('entferneNullteOrdnung benötigt ein Fester!',3); + fenster.free; + exit; + end; + + if sT then begin + fenster.free; + result:=true; + exit; + end; + + if vertikal then + fenster.berechneWerte(_tSiz) + else + fenster.berechneWerte(_xSteps); + + gibAus('Fenster-Threads starten',3); + setLength(fensterThreads,threads); + for i:=0 to length(fensterThreads)-1 do + if vertikal then + fensterThreads[i]:= + tFensterThread.create( + self, + round(i/length(fensterThreads)*_xSteps), + round((i+1)/length(fensterThreads)*_xSteps-1), + 0, + _tSiz-1, + nil, + fenster, + nil) + else + fensterThreads[i]:= + tFensterThread.create( + self, + round(i/length(fensterThreads)*_xSteps), + round((i+1)/length(fensterThreads)*_xSteps-1), + 0, + _tSiz-1, + fenster, + nil, + nil); + repeat + fertig:=true; + for i:=0 to length(fensterThreads)-1 do + fertig:=fertig and fensterThreads[i].fertig; + if not fertig then sleep(10); + until fertig; + + for i:=0 to length(fensterThreads)-1 do + fensterThreads[i].free; + + gibAus('... fertig '+timetostr(now-Zeit),3); + result:=true; +end; + function tWerte.extrahiereEinhuellende(sT: boolean; f: tMyStringList; threads: longint; warn: tWarnStufe): boolean; var Zeit,pvFehler,xFak,yFak: extended; |