From 43657256cfe47f7afe681730351e27f19b48cce3 Mon Sep 17 00:00:00 2001 From: Erich Eckner Date: Tue, 19 Dec 2017 10:36:52 +0100 Subject: ermittlePhase kann nun auch entspringen --- epost.lpi | 25 ++++------ epost.lps | 144 +++++++++++++++++++++++++++++----------------------------- epostunit.pas | 103 +++++++++++++++++++++++++++++++++++++++++ typenunit.pas | 51 +++++++++++++++++++++ werteunit.pas | 44 ++++++++++++++++++ 5 files changed, 278 insertions(+), 89 deletions(-) diff --git a/epost.lpi b/epost.lpi index 6c5f89e..490d82c 100644 --- a/epost.lpi +++ b/epost.lpi @@ -34,15 +34,12 @@ - + - - - - + - + @@ -56,33 +53,29 @@ - + - + - + - + - + - - - - - + diff --git a/epost.lps b/epost.lps index b7e57ee..c58d237 100644 --- a/epost.lps +++ b/epost.lps @@ -7,7 +7,6 @@ - @@ -24,14 +23,13 @@ - - + + - @@ -39,9 +37,10 @@ + - - + + @@ -49,8 +48,8 @@ - - + + @@ -86,7 +85,7 @@ - + @@ -94,14 +93,14 @@ - + - - + + @@ -118,7 +117,7 @@ - + @@ -189,130 +188,129 @@ - + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + diff --git a/epostunit.pas b/epostunit.pas index 8df3e7a..243ea9c 100644 --- a/epostunit.pas +++ b/epostunit.pas @@ -186,6 +186,7 @@ type procedure fuelleMitDummys(sT: boolean); procedure verschiebe(threads: longint; richtung: tInt64Point); procedure ermittlePhasenWinkel(threads: longint); + procedure entspringe(threads: longint; entspringen: tEntspringModus); procedure fft2dNachbearbeitung(threads: longint; nB: tFFTDatenordnung); procedure schreibeWert(var f: textfile; p: tExtPoint; var letzterWert: extended; entspringen: extended; skalierung: string); inline; function exprToFloat(sT: boolean; s: string): extended; @@ -424,6 +425,13 @@ type constructor create(werte: tWerte; xMin,xMax: longint); procedure stExecute; override; end; + tEntspringThread = class(tLogThread) + we: tWerte; + mi,ma: longint; + em: tEntspringModus; + constructor create(werte: tWerte; min,max: longint; entspringModus: tEntspringModus); + procedure stExecute; override; + end; tKomplexMachThread = class(tLogThread) we: tWerte; xMi,xMa: longint; @@ -4352,6 +4360,7 @@ var fensters: array[boolean] of tSin2Fenster; s: string; b: boolean; + entspringen: tEntspringModus; bekannteBefehle: tMyStringList; maxPos: tInt64Point; betraege: tWerte; @@ -4368,10 +4377,13 @@ begin end; xFak:=1; yFak:=1; + entspringen.modus:=emKein; + setLength(entspringen.parameter,0); bekannteBefehle:=tMyStringList.create; repeat if not f.metaReadln(s,true) then begin gibAus('Unerwartetes Dateiende!',3); + bekannteBefehle.free; for b:=false to true do fensters[b].free; exit; @@ -4394,9 +4406,20 @@ begin yFak:=kont2diskFak('t',exprToFloat(sT,s)); continue; end; + if istDasBefehl('entspringen:',s,bekannteBefehle,true) then begin + if not strToTEntspringModus(s,sT,knownValues,@callBackGetValue,entspringen) then begin + bekannteBefehle.free; + for b:=false to true do + fensters[b].free; + exit; + end; + continue; + end; bekannteBefehle.sort; gibAus('Verstehe Option '''+s+''' nicht beim Extrahieren der Phase!'#10'Ich kenne:'#10+bekannteBefehle.text,3); bekannteBefehle.free; + for b:=false to true do + fensters[b].free; exit; until false; bekannteBefehle.free; @@ -4459,6 +4482,19 @@ begin gibAus('Phasenwinkel ermitteln ...',3); ermittlePhasenWinkel(threads); + if entspringen.modus<>emKein then begin + case entspringen.modus of + emHorizontal: + entspringen.parameter[0]:= + kont2disk('x',entspringen.parameter[0]); + emVertikal: + entspringen.parameter[0]:= + kont2disk('y',entspringen.parameter[0]); + end{of case}; + gibAus('entsrpingen ...',3); + entspringe(threads,entspringen); + end; + gibAus('... fertig '+timetostr(now-Zeit),3); result:=true; end; @@ -6091,6 +6127,46 @@ begin holeRAM(3); end; +procedure tWerte.entspringe(threads: longint; entspringen: tEntspringModus); +var + entspringThreads: array of tEntspringThread; + i,dim: longint; + fertig: boolean; +begin + case entspringen.modus of + emKein: // nichts zu tun + exit; + emHorizontal: + dim:=_tSiz; + emVertikal: + dim:=_xSteps; + else + fehler('Entspringmodus '''+tEntspringModusToStr(entspringen)+''' ist (noch) nicht implementiert!'); + end{of case}; + + if dim= pi do + werte[i*sStep+j*pStep]:=werte[i*sStep+j*pStep]-2*pi; + while werte[i*sStep+j*pStep]-wert < -pi do + werte[i*sStep+j*pStep]:=werte[i*sStep+j*pStep]+2*pi; + wert:=werte[i*sStep+j*pStep]; + end; + wert:=werte[i*sStep+jStart*pStep]; + for j:=jStart-1 downto 0 do begin // parallel, nach links + while werte[i*sStep+j*pStep]-wert >= pi do + werte[i*sStep+j*pStep]:=werte[i*sStep+j*pStep]-2*pi; + while werte[i*sStep+j*pStep]-wert < -pi do + werte[i*sStep+j*pStep]:=werte[i*sStep+j*pStep]+2*pi; + wert:=werte[i*sStep+j*pStep]; + end; + end; +end; + procedure tLLWerte.entferneHeiszePixel(schwelle,minusSchwelle,plusSchwelle: extended); var i,j,iM,jM,iP,jP,mCnt: int64; -- cgit v1.2.3-70-g09d2