diff options
Diffstat (limited to 'epostunit.pas')
-rw-r--r-- | epostunit.pas | 126 |
1 files changed, 126 insertions, 0 deletions
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; |