From dd8c2a6eeedea22559c9ac5272b37b2690ad6f4d Mon Sep 17 00:00:00 2001 From: Erich Eckner Date: Mon, 30 Jul 2018 13:50:03 +0200 Subject: romunit.pas: dx hamonisch mitteln --- ROM.lps | 120 +++++++++++++++++++++++++++++------------------------------- romunit.pas | 25 ++++++++----- 2 files changed, 73 insertions(+), 72 deletions(-) diff --git a/ROM.lps b/ROM.lps index 1381843..8c82481 100644 --- a/ROM.lps +++ b/ROM.lps @@ -7,9 +7,9 @@ - - - + + + @@ -17,10 +17,10 @@ - - + + - + @@ -28,13 +28,14 @@ - + - - - + + + + @@ -43,132 +44,127 @@ - + - + - + - + - + - - + + - - + + - - + + - - + + - - + + - - + + - + - - + + - + - - + + - + - - + - - + + - - + + - + - - + - - + + - - + + - + - - + + - + - - + + + - - + + - - + + - + - - - - 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