summaryrefslogtreecommitdiff
path: root/epostunit.pas
diff options
context:
space:
mode:
Diffstat (limited to 'epostunit.pas')
-rw-r--r--epostunit.pas126
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;