diff options
author | Erich Eckner <git@eckner.net> | 2017-07-12 13:38:43 +0200 |
---|---|---|
committer | Erich Eckner <git@eckner.net> | 2017-07-12 13:38:43 +0200 |
commit | 34d7ed9e7f90282bb4be0195e6ad623bd12a4f11 (patch) | |
tree | c2ac8454bd5afd51175c1c7c8fd154c3c893f80d /epostunit.pas | |
parent | 100d84b20b68917734378de65808a3551e707d28 (diff) | |
download | epost-34d7ed9e7f90282bb4be0195e6ad623bd12a4f11.tar.xz |
lambda-zu-omega Verzerrung neu
Diffstat (limited to 'epostunit.pas')
-rw-r--r-- | epostunit.pas | 140 |
1 files changed, 140 insertions, 0 deletions
diff --git a/epostunit.pas b/epostunit.pas index 3833348..e083d6d 100644 --- a/epostunit.pas +++ b/epostunit.pas @@ -147,6 +147,7 @@ type function fitteGausze(st: boolean; f: tMyStringlist; threads: longint): boolean; function berechneZeitfrequenzanalyse(st: boolean; f: tMyStringlist; threads: longint; quelle: tWerte; Warn: tWarnstufe): boolean; 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 berechneIntegral(st: boolean; f: tMyStringlist; threads: longint; quelle: tWerte): boolean; function berechneFFT(st: boolean; f: tMyStringlist; threads: longint; Warn: tWarnstufe): boolean; function berechneFFT2d(st: boolean; f: tMyStringlist; threads: longint; Warn: tWarnstufe): boolean; @@ -354,6 +355,14 @@ type constructor create(quelle,ziel: tWerte; xMin,xMax,tMin,tMax: longint; zielpositionen: tIntPointArray; zielgewichte: tExtPointArray; zielanzahlen: tExtendedArray; Vorbearbeitungen,Nachbearbeitungen: tTransformation; vorAnz,nachAnz: longint); procedure stExecute; override; end; + tVerzerrLOThread = class(tLogThread) + qu,zi: tWerte; + ho,ve: boolean; + verhHo,verhVe: extended; // lambda_min / (lambda_max - lambda_min) + xMi,xMa,tMi,tMa: longint; // bzgl. Ziel + constructor create(quelle,ziel: tWerte; xMin,xMax,tMin,tMax: longint; verhaeltnisHorizontal, verhaeltnisVertikal: extended); + procedure stExecute; override; + end; function neuePalette(f: tMyStringlist): boolean; function initBmpHeader(w,h: longint): tBmpHeader; @@ -3312,6 +3321,85 @@ begin result:=true; end; +function tWerte.berechneLambdaZuOmegaVerzerrung(st: boolean; f: tMyStringList; threads: longint; quelle: tWerte): boolean; +var + i: longint; + Zeit: extended; + verzerrLOThreads: array of tVerzerrLOThread; + fertig: boolean; + s: string; +procedure aufraeumen; +var + ii: longint; +begin + for ii:=0 to length(verzerrLOThreads)-1 do + if assigned(verzerrLOThreads[ii]) then + verzerrLOThreads[ii].free; + setlength(verzerrLOThreads,0); +end; +begin + result:=false; + warteaufBeendigungDesLeseThreads; + gibAus('lambda-zu-omega-Verzerrung berechnen ... ',3); + Zeit:=now; + Genauigkeit:=gExtended; + Transformationen:=tLambdaZuOmegaTransformation.create; + Transformationen.fuegeVorgaengerHinzu(quelle.Transformationen); + + repeat + if not f.metaReadln(s,true) then begin + gibAus('Unerwartetes Dateiende!',3); + aufraeumen; + exit; + end; + if s='Ende' then break; + if quelle.dichtenParameterErkannt(st,s,threads,0,_xsteps-1,0,_tsiz-1) then continue; + if startetMit('Threadanzahl:',s) then begin + threads:=strtoint(s); + continue; + end; + if s='horizontal' then begin + (Transformationen as tLambdaZuOmegaTransformation).horizontal:=true; + continue; + end; + if s='vertikal' then begin + (Transformationen as tLambdaZuOmegaTransformation).vertikal:=true; + continue; + end; + gibAus('Verstehe Option '''+s+''' nicht bei Erstellung einer Verzerrung!',3); + aufraeumen; + exit; + until false; + + _xsteps:=quelle._xsteps; + _tsiz:=quelle._tsiz; + if not st then begin + eWerte.holeRam(3); + gibAus('Threads starten',3); + setlength(verzerrLOThreads,threads); + for i:=0 to length(verzerrLOThreads)-1 do + verzerrLOThreads[i]:= + tVerzerrLOThread.create( + quelle, + self, + round(i/length(verzerrLOThreads)*_xsteps), + round((i+1)/length(verzerrLOThreads)*_xsteps-1), + 0, + _tsiz-1, + (Transformationen as tLambdaZuOmegaTransformation).verhaeltnisHorizontal, + (Transformationen as tLambdaZuOmegaTransformation).verhaeltnisVertikal); + repeat + fertig:=true; + for i:=0 to length(verzerrLOThreads)-1 do + fertig:=fertig and verzerrLOThreads[i].fertig; + if not fertig then sleep(10); + until fertig; + end; + aufraeumen; + gibAus('... fertig '+timetostr(now-Zeit),3); + result:=true; +end; + function tWerte.berechneIntegral(st: boolean; f: tMyStringlist; threads: longint; quelle: tWerte): boolean; var i,tmin,tmax,xmin,xmax: longint; @@ -6223,6 +6311,58 @@ begin gibAus('Verzerrthread beendet',1); end; +// tVerzerrLOThread ************************************************************ + +constructor tVerzerrLOThread.create(quelle,ziel: tWerte; xMin,xMax,tMin,tMax: longint; verhaeltnisHorizontal, verhaeltnisVertikal: extended); +begin + inherited create; + qu:=quelle; + zi:=ziel; + xMi:=xMin; + xMa:=xMax; + tMi:=tMin; + tMa:=tMax; + verhHo:=verhaeltnisHorizontal; + verhVe:=verhaeltnisVertikal; + gibAus('VerzerrLOthread erzeugt: '+inttostr(xmin)+'-'+inttostr(xmax)+' '+inttostr(tmin)+'-'+inttostr(tmax),1); + suspended:=false; +end; + +procedure tVerzerrLOThread.stExecute; +begin + gibAus('VerzerrLOthread gestartet '+floattostr(qu._minW)+' '+floattostr(qu._maxW),1); + case zi.genauigkeit of + gSingle: + case qu.genauigkeit of + gSingle: + zi.sWerte.kopiereLOVerzerrt(pTLLWerteSingle(@qu.sWerte),xMi,xMa,tMi,tMa,verhHo,verhVe); + gDouble: + zi.sWerte.kopiereLOVerzerrt(pTLLWerteDouble(@qu.dWerte),xMi,xMa,tMi,tMa,verhHo,verhVe); + gExtended: + zi.sWerte.kopiereLOVerzerrt(pTLLWerteExtended(@qu.eWerte),xMi,xMa,tMi,tMa,verhHo,verhVe); + end{of case}; + gDouble: + case qu.genauigkeit of + gSingle: + zi.dWerte.kopiereLOVerzerrt(pTLLWerteSingle(@qu.sWerte),xMi,xMa,tMi,tMa,verhHo,verhVe); + gDouble: + zi.dWerte.kopiereLOVerzerrt(pTLLWerteDouble(@qu.dWerte),xMi,xMa,tMi,tMa,verhHo,verhVe); + gExtended: + zi.dWerte.kopiereLOVerzerrt(pTLLWerteExtended(@qu.eWerte),xMi,xMa,tMi,tMa,verhHo,verhVe); + end{of case}; + gExtended: + case qu.genauigkeit of + gSingle: + zi.eWerte.kopiereLOVerzerrt(pTLLWerteSingle(@qu.sWerte),xMi,xMa,tMi,tMa,verhHo,verhVe); + gDouble: + zi.eWerte.kopiereLOVerzerrt(pTLLWerteDouble(@qu.dWerte),xMi,xMa,tMi,tMa,verhHo,verhVe); + gExtended: + zi.eWerte.kopiereLOVerzerrt(pTLLWerteExtended(@qu.eWerte),xMi,xMa,tMi,tMa,verhHo,verhVe); + end{of case}; + end{of case}; + gibAus('VerzerrLOthread beendet',1); +end; + // sonstiges ******************************************************************* function findePalette(out Palette: pTPalette; name: string): boolean; |