summaryrefslogtreecommitdiff
path: root/romunit.pas
diff options
context:
space:
mode:
authorErich Eckner <git@eckner.net>2018-07-30 13:50:03 +0200
committerErich Eckner <git@eckner.net>2018-07-30 13:50:03 +0200
commitdd8c2a6eeedea22559c9ac5272b37b2690ad6f4d (patch)
treef8fb4f64cd5faf68459f13e5cf6fd2ab108b70f3 /romunit.pas
parent807f9bc2be261d6ea1ac41777f93d0895a81f444 (diff)
downloadROM-dd8c2a6eeedea22559c9ac5272b37b2690ad6f4d.tar.xz
romunit.pas: dx hamonisch mitteln
Diffstat (limited to 'romunit.pas')
-rw-r--r--romunit.pas25
1 files changed, 15 insertions, 10 deletions
diff --git a/romunit.pas b/romunit.pas
index ff8ea7c..41fa0c3 100644
--- a/romunit.pas
+++ b/romunit.pas
@@ -869,24 +869,29 @@ begin
end;
procedure interpoliere(var dat: tExtPointArray);
-var i,j: longint;
- tmp: extended;
- tdat: tExtPointArray;
+var i,j: longint;
+ tmp,xLen: extended;
+ tdat: tExtPointArray;
begin
- tmp:=dat[1]['x']-dat[0]['x'];
- for i:=2 to length(dat)-1 do
- tmp:=min(tmp,dat[i]['x']-dat[i-1]['x']);
- if tmp<=0 then Fehler('Die Daten müssen sortiert sein und dürfen keine doppelten x-Werte enthalten! ('+floattostr(tmp)+')');
+ tmp:=0;
+ xLen:=dat[length(dat)-1]['x']-dat[0]['x'];
+ for i:=1 to length(dat)-1 do begin
+ if dat[i]['x']<=dat[i-1]['x'] then
+ Fehler('Die Daten müssen sortiert sein und dürfen keine doppelten x-Werte enthalten! ('+floattostr(tmp)+')');
+ tmp:=tmp + 1/(dat[i]['x']-dat[i-1]['x']);
+ end;
+ tmp:=length(dat)/tmp;
setlength(tdat,length(dat));
for i:=0 to length(dat)-1 do
tdat[i]:=dat[i];
- setlength(dat,max(2*length(tdat),round(min(power(length(tdat),1.3),(tdat[length(tdat)-1]['x']-tdat[0]['x'])/tmp+1))));
+ setlength(dat,round(xLen/tmp+1));
j:=0;
for i:=0 to length(dat)-1 do begin
- dat[i]['x']:=tdat[0]['x']+(tdat[length(tdat)-1]['x']-tdat[0]['x'])*i/(length(dat)-1);
+ dat[i]['x']:=tdat[0]['x'] + xLen*i/(length(dat)-1);
while (j<length(tdat)-1) and (tdat[j+1]['x'] <= dat[i]['x']) do
inc(j);
- if j=length(tdat)-1 then tmp:=tdat[j]['y']
+ if j=length(tdat)-1 then
+ tmp:=tdat[j]['y']
else begin
tmp:=(dat[i]['x']-tdat[j]['x'])/(tdat[j+1]['x']-tdat[j]['x']);
tmp:=tdat[j]['y']*(1-tmp) + tdat[j+1]['y']*tmp;