From 0ff506a1c07ac389c8c96521072f39fd2000da64 Mon Sep 17 00:00:00 2001 From: Erich Eckner Date: Mon, 6 Jul 2020 09:30:28 +0200 Subject: epostunit.pas: entferneNullteOrdnung() neu --- epost.lpr | 11 +++++ epost.lps | 24 +++++------ epostunit.pas | 126 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 147 insertions(+), 14 deletions(-) diff --git a/epost.lpr b/epost.lpr index 010445f..c7e4a4e 100644 --- a/epost.lpr +++ b/epost.lpr @@ -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 diff --git a/epost.lps b/epost.lps index 4f9e2c1..e9f2b89 100644 --- a/epost.lps +++ b/epost.lps @@ -22,7 +22,6 @@ - @@ -41,9 +40,10 @@ + - - + + @@ -212,7 +212,7 @@ - + @@ -310,29 +310,25 @@ - - + + - + - + - + - - - - - + 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; -- cgit v1.2.3-54-g00ecf