diff options
Diffstat (limited to 'werteunit.pas')
-rw-r--r-- | werteunit.pas | 37 |
1 files changed, 26 insertions, 11 deletions
diff --git a/werteunit.pas b/werteunit.pas index 04d878b..e7b8f67 100644 --- a/werteunit.pas +++ b/werteunit.pas @@ -1967,8 +1967,9 @@ end; procedure tLLWerte.entspringe(mi,ma: int64; em: tEntspringModus); var - i,j,pStep,sStep,pMax,jStart: int64; - wert: extended; + i,j,pStep,sStep,pMax,jStart,bwLen: int64; + vglWert,bwFak: extended; + bisherigeWerte: tExtendedArray; begin case em.modus of emKein: @@ -1987,23 +1988,37 @@ begin fehler('Entspringmodus '''+tEntspringModusToStr(em)+''' nicht implementiert!'); end{of case}; assert(em.modus in [emHorizontal,emVertikal],'Hoppla, der Entspringmodus '''+tEntspringModusToStr(em)+''' ist doch noch nicht implementiert!'); - jStart:=max(0,min(pMax,round(em.parameter[0]))); + bwLen:=max(1,round(em.parameter[0])); + bwFak:=1/bwLen; + setLength(bisherigeWerte,bwLen); + jStart:=max(0,min(pMax,round(em.parameter[1]))); for i:=mi to ma do begin // senkrecht - wert:=0; + for j:=0 to bwLen-1 do + bisherigeWerte[j]:=0; + vglWert:=0; for j:=jStart to pMax do begin // parallel, nach rechts - while werte[i*sStep+j*pStep]-wert >= pi do + while werte[i*sStep+j*pStep]-vglWert >= pi do werte[i*sStep+j*pStep]:=werte[i*sStep+j*pStep]-2*pi; - while werte[i*sStep+j*pStep]-wert < -pi do + while werte[i*sStep+j*pStep]-vglWert < -pi do werte[i*sStep+j*pStep]:=werte[i*sStep+j*pStep]+2*pi; - wert:=werte[i*sStep+j*pStep]; + vglWert:=vglWert + bwFak * (werte[i*sStep+j*pStep] - bisherigeWerte[j mod bwLen]); + bisherigeWerte[j mod bwLen]:=werte[i*sStep+j*pStep]; + end; + vglWert:=0; + for j:=jStart to jStart+bwLen-1 do begin + if j <= pMax then + bisherigeWerte[j mod bwLen]:=werte[i*sStep+j*pStep] + else + bisherigeWerte[j mod bwLen]:=0; + vglWert:=vglWert + bwFak * bisherigeWerte[j mod bwLen]; 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 + while werte[i*sStep+j*pStep]-vglWert >= pi do werte[i*sStep+j*pStep]:=werte[i*sStep+j*pStep]-2*pi; - while werte[i*sStep+j*pStep]-wert < -pi do + while werte[i*sStep+j*pStep]-vglWert < -pi do werte[i*sStep+j*pStep]:=werte[i*sStep+j*pStep]+2*pi; - wert:=werte[i*sStep+j*pStep]; + vglWert:=vglWert + bwFak * (werte[i*sStep+j*pStep] - bisherigeWerte[j mod bwLen]); + bisherigeWerte[j mod bwLen]:=werte[i*sStep+j*pStep]; end; end; end; |