summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorErich Eckner <git@eckner.net>2020-07-06 09:30:28 +0200
committerErich Eckner <git@eckner.net>2020-07-06 09:30:28 +0200
commit0ff506a1c07ac389c8c96521072f39fd2000da64 (patch)
tree2633c1205b0af674c8b8416120493eb7d81ea751
parentf5a944a15c68383379638188e868611b6103cbc7 (diff)
downloadepost-0ff506a1c07ac389c8c96521072f39fd2000da64.tar.xz
epostunit.pas: entferneNullteOrdnung() neu
-rw-r--r--epost.lpr11
-rw-r--r--epost.lps24
-rw-r--r--epostunit.pas126
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 @@
<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;