diff options
author | Erich Eckner <git@eckner.net> | 2016-03-29 15:00:11 +0200 |
---|---|---|
committer | Erich Eckner <git@eckner.net> | 2016-03-30 16:08:21 +0200 |
commit | 238e18a5ce087c3b2940722bda86b39a95a44065 (patch) | |
tree | 1520af6e6ae342de306905e2d64f01c1e7cbfb6e /typenunit.pas | |
parent | da9fb8d996bbf50058d6ca40137fcc9eb14b4f82 (diff) | |
download | epost-238e18a5ce087c3b2940722bda86b39a95a44065.tar.xz |
Gaußfit eingebaut
Diffstat (limited to 'typenunit.pas')
-rw-r--r-- | typenunit.pas | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/typenunit.pas b/typenunit.pas index 5814925..6d24d16 100644 --- a/typenunit.pas +++ b/typenunit.pas @@ -397,6 +397,19 @@ type // keine Änderung der Werte(skalierung) function dumpParams: string; override; end; + tFitTransformation = class(tKoordinatenTransformation) + private + _senkrecht: boolean; + _adLaenge: longint; + _adStao: tExtPoint; + public + constructor create(daten: tTransformation; senkrecht: boolean; adLaenge: longint; adStart,adStop: extended); + procedure aktualisiereXsTs; override; + procedure aktualisiereAchsen; override; + // keine Änderung der Werte(skalierung) + function wertZuPositionAufAchse(const l: tLage; x: extended): extended; override; + function dumpParams: string; override; + end; tAgglomeration = class (tKoordinatenTransformation) private _nullposition: extended; @@ -2059,6 +2072,59 @@ begin result:='Koordinatenausschnitt: '+inttostr(gr['x','x'])+'..'+inttostr(gr['x','y'])+' x '+inttostr(gr['y','x'])+'..'+inttostr(gr['y','y']); end; +// tFitTransformation ********************************************************** + +constructor tFitTransformation.create(daten: tTransformation; senkrecht: boolean; adLaenge: longint; adStart,adStop: extended); +begin + inherited create; + wmiaExplizit:=true; // nicht sinnvoll berechenbar + _senkrecht:=senkrecht; // die Richtung, in der gefittet wurde ("andere Dimension") - also senkrecht zur übernommenen Ausdehnung + _adLaenge:=adLaenge; // Größe in der "anderen Dimension" + _adStao['x']:=adStart; // Start und + _adStao['y']:=adStop; // Stopp in der "anderen Dimension" + if (_adLaenge=1) xor (_adStao['x']=_adStao['y']) then + fehler('Die gefitteten Daten müssen genau dann eindimensional sein, wenn Start = Stopp ist. ('+inttostr(_adLaenge)+'-d vs. '+floattostr(_adStao['x'])+'..'+floattostr(_adStao['y'])+')'); + fuegeVorgaengerHinzu(daten); +end; + +procedure tFitTransformation.aktualisiereXsTs; +var + c: char; +begin + for c:='x' to 'y' do + out_xs_ts[c]:=_adLaenge+(in_xs_ts[c]-_adLaenge)*byte(_senkrecht xor (c='y')); +end; + +procedure tFitTransformation.aktualisiereAchsen; +var + c: char; +begin + for c:='x' to 'y' do begin + out_achsen[char(ord('x')+byte(_senkrecht)),c]:= + in_achsen[char(ord('x')+byte(_senkrecht)),c]; + out_achsen[char(ord('y')-byte(_senkrecht)),c]:= + _adStao[c]; + end; +end; + +function tFitTransformation.wertZuPositionAufAchse(const l: tLage; x: extended): extended; +begin + if (l in [lOben,lUnten]) xor _senkrecht then + result:=0 // keine Ausdehnung in dieser Richtung! + else + result:=vorgaenger[0].wertZuPositionAufAchse(l,x); +end; + +function tFitTransformation.dumpParams: string; +begin + result:='FitTransformation: '; + if _senkrecht then + result:=result+'vertik' + else + result:=result+'horizont'; + result:=result+'al'; +end; + // tAgglomeration ************************************************************** constructor tAgglomeration.create; |