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