diff options
-rw-r--r-- | epost.lps | 238 | ||||
-rw-r--r-- | epostunit.pas | 36 | ||||
-rw-r--r-- | typenunit.pas | 75 | ||||
-rw-r--r-- | werteunit.pas | 28 |
4 files changed, 199 insertions, 178 deletions
@@ -3,12 +3,12 @@ <ProjectSession> <Version Value="10"/> <BuildModes Active="Default"/> - <Units Count="29"> + <Units Count="27"> <Unit0> <Filename Value="epost.lpr"/> <IsPartOfProject Value="True"/> - <TopLine Value="471"/> - <CursorPos X="14" Y="497"/> + <TopLine Value="172"/> + <CursorPos X="15" Y="201"/> <UsageCount Value="202"/> <Loaded Value="True"/> </Unit0> @@ -22,10 +22,9 @@ <Unit2> <Filename Value="epostunit.pas"/> <IsPartOfProject Value="True"/> - <IsVisibleTab Value="True"/> <EditorIndex Value="1"/> - <TopLine Value="5383"/> - <CursorPos X="23" Y="5401"/> + <TopLine Value="158"/> + <CursorPos X="27" Y="186"/> <UsageCount Value="201"/> <Loaded Value="True"/> </Unit2> @@ -40,17 +39,18 @@ <Filename Value="werteunit.pas"/> <IsPartOfProject Value="True"/> <EditorIndex Value="8"/> - <TopLine Value="1729"/> - <CursorPos X="16" Y="1760"/> + <TopLine Value="47"/> + <CursorPos X="61" Y="64"/> <UsageCount Value="200"/> <Loaded Value="True"/> </Unit4> <Unit5> <Filename Value="typenunit.pas"/> <IsPartOfProject Value="True"/> + <IsVisibleTab Value="True"/> <EditorIndex Value="11"/> - <TopLine Value="1869"/> - <CursorPos X="55" Y="1891"/> + <TopLine Value="1954"/> + <CursorPos Y="1987"/> <UsageCount Value="200"/> <Loaded Value="True"/> </Unit5> @@ -77,7 +77,7 @@ <IsPartOfProject Value="True"/> <EditorIndex Value="10"/> <CursorPos X="35" Y="10"/> - <UsageCount Value="165"/> + <UsageCount Value="175"/> <Loaded Value="True"/> </Unit8> <Unit9> @@ -86,264 +86,252 @@ <EditorIndex Value="9"/> <TopLine Value="382"/> <CursorPos X="59" Y="417"/> - <UsageCount Value="52"/> + <UsageCount Value="62"/> <Loaded Value="True"/> </Unit9> <Unit10> - <Filename Value="../fpGUI/src/corelib/render/software/agg_scanline_storage_aa.pas"/> - <EditorIndex Value="-1"/> - <TopLine Value="1612"/> - <CursorPos X="2" Y="1675"/> - <UsageCount Value="1"/> - </Unit10> - <Unit11> <Filename Value="../units/mystringlistunit.pas"/> <EditorIndex Value="7"/> <TopLine Value="198"/> <CursorPos X="19" Y="226"/> - <UsageCount Value="27"/> + <UsageCount Value="32"/> <Loaded Value="True"/> - </Unit11> - <Unit12> + </Unit10> + <Unit11> <Filename Value="../units/lowlevelunit.pas"/> <EditorIndex Value="6"/> <TopLine Value="99"/> <CursorPos Y="112"/> <UsageCount Value="100"/> <Loaded Value="True"/> - </Unit12> - <Unit13> - <Filename Value="../units/randomunit.pas"/> - <EditorIndex Value="-1"/> - <UsageCount Value="1"/> - </Unit13> - <Unit14> + </Unit11> + <Unit12> <Filename Value="../units/matheunit.pas"/> <EditorIndex Value="5"/> <TopLine Value="32"/> <CursorPos X="46" Y="50"/> - <UsageCount Value="86"/> + <UsageCount Value="91"/> <Loaded Value="True"/> - </Unit14> - <Unit15> + </Unit12> + <Unit13> <Filename Value="../units/systemunit.pas"/> <EditorIndex Value="2"/> <TopLine Value="126"/> <CursorPos X="7" Y="147"/> - <UsageCount Value="41"/> + <UsageCount Value="46"/> <Loaded Value="True"/> - </Unit15> - <Unit16> + </Unit13> + <Unit14> <Filename Value="/usr/lib/fpc/src/rtl/inc/objpash.inc"/> <EditorIndex Value="-1"/> <TopLine Value="182"/> <CursorPos X="21" Y="202"/> - <UsageCount Value="4"/> - </Unit16> - <Unit17> + <UsageCount Value="3"/> + </Unit14> + <Unit15> <Filename Value="/usr/lib/fpc/src/rtl/unix/bunxovlh.inc"/> <EditorIndex Value="-1"/> <TopLine Value="61"/> <CursorPos X="10" Y="99"/> - <UsageCount Value="2"/> - </Unit17> - <Unit18> + <UsageCount Value="1"/> + </Unit15> + <Unit16> <Filename Value="/usr/lib/fpc/src/rtl/unix/baseunix.pp"/> <UnitName Value="BaseUnix"/> <EditorIndex Value="-1"/> <TopLine Value="61"/> - <UsageCount Value="2"/> - </Unit18> - <Unit19> + <UsageCount Value="1"/> + </Unit16> + <Unit17> <Filename Value="/usr/lib/fpc/src/rtl/unix/bunxovl.inc"/> <EditorIndex Value="-1"/> <TopLine Value="414"/> <CursorPos X="20" Y="434"/> - <UsageCount Value="2"/> - </Unit19> - <Unit20> + <UsageCount Value="1"/> + </Unit17> + <Unit18> <Filename Value="/usr/lib/fpc/src/rtl/linux/bunxsysc.inc"/> <EditorIndex Value="-1"/> <TopLine Value="16"/> - <UsageCount Value="2"/> - </Unit20> - <Unit21> + <UsageCount Value="1"/> + </Unit18> + <Unit19> <Filename Value="/usr/lib/fpc/src/rtl/unix/bunxh.inc"/> <EditorIndex Value="-1"/> <TopLine Value="74"/> <CursorPos X="15" Y="102"/> - <UsageCount Value="2"/> - </Unit21> - <Unit22> + <UsageCount Value="1"/> + </Unit19> + <Unit20> <Filename Value="/usr/lib/fpc/src/packages/fcl-image/src/fpimage.pp"/> <UnitName Value="FPimage"/> <EditorIndex Value="-1"/> <TopLine Value="10"/> <CursorPos X="3" Y="30"/> - <UsageCount Value="2"/> - </Unit22> - <Unit23> + <UsageCount Value="1"/> + </Unit20> + <Unit21> <Filename Value="../fpGUI/src/corelib/render/software/agg_basics.pas"/> <EditorIndex Value="-1"/> <TopLine Value="327"/> <CursorPos X="12" Y="347"/> - <UsageCount Value="5"/> - </Unit23> - <Unit24> + <UsageCount Value="4"/> + </Unit21> + <Unit22> <Filename Value="/usr/lib/fpc/src/rtl/objpas/classes/classesh.inc"/> <EditorIndex Value="-1"/> <TopLine Value="673"/> <CursorPos X="42" Y="705"/> - <UsageCount Value="5"/> - </Unit24> - <Unit25> + <UsageCount Value="4"/> + </Unit22> + <Unit23> <Filename Value="/usr/lib/fpc/src/rtl/objpas/math.pp"/> <EditorIndex Value="-1"/> <TopLine Value="166"/> <CursorPos X="10" Y="183"/> - <UsageCount Value="3"/> - </Unit25> - <Unit26> + <UsageCount Value="2"/> + </Unit23> + <Unit24> <Filename Value="GTIWebServerTestAggActionHandlerUnit.pas"/> <EditorIndex Value="-1"/> <TopLine Value="53"/> <CursorPos X="49" Y="82"/> - <UsageCount Value="3"/> - </Unit26> - <Unit27> + <UsageCount Value="2"/> + </Unit24> + <Unit25> <Filename Value="/usr/lib/fpc/src/rtl/objpas/sysutils/sysstrh.inc"/> <EditorIndex Value="-1"/> <TopLine Value="204"/> <CursorPos X="18" Y="222"/> - <UsageCount Value="5"/> - </Unit27> - <Unit28> + <UsageCount Value="4"/> + </Unit25> + <Unit26> <Filename Value="/usr/lib/fpc/src/rtl/objpas/sysutils/osutilsh.inc"/> <EditorIndex Value="-1"/> <TopLine Value="9"/> <CursorPos X="10" Y="26"/> - <UsageCount Value="5"/> - </Unit28> + <UsageCount Value="4"/> + </Unit26> </Units> <JumpHistory Count="30" HistoryIndex="29"> <Position1> - <Filename Value="typenunit.pas"/> - <Caret Line="1522" Column="29" TopLine="1504"/> + <Filename Value="epostunit.pas"/> + <Caret Line="5362" Column="20" TopLine="5334"/> </Position1> <Position2> - <Filename Value="typenunit.pas"/> - <Caret Line="454" Column="25" TopLine="436"/> + <Filename Value="epostunit.pas"/> + <Caret Line="5365" Column="20" TopLine="5337"/> </Position2> <Position3> - <Filename Value="typenunit.pas"/> - <Caret Line="2492" Column="52" TopLine="2484"/> + <Filename Value="epostunit.pas"/> + <Caret Line="5370" Column="18" TopLine="5342"/> </Position3> <Position4> - <Filename Value="typenunit.pas"/> - <Caret Line="338" Column="36" TopLine="322"/> + <Filename Value="epostunit.pas"/> + <Caret Line="5372" Column="18" TopLine="5344"/> </Position4> <Position5> - <Filename Value="typenunit.pas"/> - <Caret Line="380" Column="36" TopLine="351"/> + <Filename Value="epostunit.pas"/> + <Caret Line="5374" Column="18" TopLine="5346"/> </Position5> <Position6> - <Filename Value="typenunit.pas"/> - <Caret Line="403" Column="36" TopLine="374"/> + <Filename Value="epostunit.pas"/> + <Caret Line="5864" Column="14" TopLine="5836"/> </Position6> <Position7> - <Filename Value="typenunit.pas"/> - <Caret Line="446" Column="36" TopLine="417"/> + <Filename Value="epostunit.pas"/> + <Caret Line="5870" Column="14" TopLine="5842"/> </Position7> <Position8> <Filename Value="typenunit.pas"/> - <Caret Line="475" Column="36" TopLine="446"/> + <Caret Line="340" TopLine="324"/> </Position8> <Position9> <Filename Value="typenunit.pas"/> - <Caret Line="493" Column="36" TopLine="464"/> + <Caret Line="1882" Column="30" TopLine="1853"/> </Position9> <Position10> <Filename Value="typenunit.pas"/> - <Caret Line="506" Column="36" TopLine="477"/> + <Caret Line="1903" Column="30" TopLine="1874"/> </Position10> <Position11> <Filename Value="typenunit.pas"/> - <Caret Line="1870" Column="48" TopLine="1841"/> + <Caret Line="1910" Column="30" TopLine="1881"/> </Position11> <Position12> - <Filename Value="epostunit.pas"/> - <Caret Line="2043" Column="38" TopLine="2021"/> + <Filename Value="typenunit.pas"/> + <Caret Line="1933" Column="30" TopLine="1904"/> </Position12> <Position13> - <Filename Value="epostunit.pas"/> - <Caret Line="3143" Column="90" TopLine="3124"/> + <Filename Value="typenunit.pas"/> + <Caret Line="1979" Column="31" TopLine="1950"/> </Position13> <Position14> - <Filename Value="epostunit.pas"/> - <Caret Line="2447" Column="47" TopLine="2427"/> + <Filename Value="typenunit.pas"/> + <Caret Line="1988" Column="31" TopLine="1959"/> </Position14> <Position15> - <Filename Value="epostunit.pas"/> - <Caret Line="2517" Column="24" TopLine="2488"/> + <Filename Value="typenunit.pas"/> + <Caret Line="1994" Column="31" TopLine="1965"/> </Position15> <Position16> - <Filename Value="epostunit.pas"/> - <Caret Line="2516" Column="17" TopLine="2516"/> + <Filename Value="typenunit.pas"/> + <Caret Line="2001" Column="31" TopLine="1972"/> </Position16> <Position17> - <Filename Value="epostunit.pas"/> + <Filename Value="typenunit.pas"/> + <Caret Line="2067" Column="29" TopLine="2038"/> </Position17> <Position18> - <Filename Value="epostunit.pas"/> - <Caret Line="2441" Column="47" TopLine="2419"/> + <Filename Value="typenunit.pas"/> + <Caret Line="2082" Column="29" TopLine="2053"/> </Position18> <Position19> - <Filename Value="epostunit.pas"/> - <Caret Line="2447" Column="46" TopLine="2419"/> + <Filename Value="typenunit.pas"/> + <Caret Line="2088" Column="29" TopLine="2059"/> </Position19> <Position20> - <Filename Value="epostunit.pas"/> - <Caret Line="2516" Column="25" TopLine="2488"/> + <Filename Value="typenunit.pas"/> + <Caret Line="2099" Column="29" TopLine="2070"/> </Position20> <Position21> - <Filename Value="epostunit.pas"/> - <Caret Line="2686" Column="28" TopLine="2657"/> + <Filename Value="typenunit.pas"/> + <Caret Line="2411" Column="45" TopLine="2382"/> </Position21> <Position22> - <Filename Value="epostunit.pas"/> - <Caret Line="2694" Column="28" TopLine="2671"/> + <Filename Value="typenunit.pas"/> + <Caret Line="2418" TopLine="2389"/> </Position22> <Position23> - <Filename Value="epostunit.pas"/> - <Caret Line="2702" Column="28" TopLine="2673"/> + <Filename Value="typenunit.pas"/> + <Caret Line="2421" Column="45" TopLine="2392"/> </Position23> <Position24> - <Filename Value="epostunit.pas"/> - <Caret Line="2773" Column="24" TopLine="2744"/> + <Filename Value="typenunit.pas"/> + <Caret Line="2428" TopLine="2399"/> </Position24> <Position25> - <Filename Value="epostunit.pas"/> - <Caret Line="2898" Column="24" TopLine="2869"/> + <Filename Value="typenunit.pas"/> + <Caret Line="2614" Column="30" TopLine="2585"/> </Position25> <Position26> - <Filename Value="epostunit.pas"/> - <Caret Line="3143" Column="44" TopLine="3114"/> + <Filename Value="typenunit.pas"/> + <Caret Line="2740" Column="35" TopLine="2711"/> </Position26> <Position27> <Filename Value="epostunit.pas"/> - <Caret Line="4493" TopLine="4464"/> + <Caret Line="5859" Column="50" TopLine="5848"/> </Position27> <Position28> <Filename Value="epostunit.pas"/> - <Caret Line="5048" Column="31" TopLine="5019"/> + <Caret Line="5461" Column="29" TopLine="5435"/> </Position28> <Position29> <Filename Value="epostunit.pas"/> - <Caret Line="177" Column="28" TopLine="161"/> </Position29> <Position30> - <Filename Value="epostunit.pas"/> - <Caret Line="5401" Column="11" TopLine="5320"/> + <Filename Value="typenunit.pas"/> + <Caret Line="2826" Column="56" TopLine="2797"/> </Position30> </JumpHistory> </ProjectSession> diff --git a/epostunit.pas b/epostunit.pas index e69c4cc..d59d222 100644 --- a/epostunit.pas +++ b/epostunit.pas @@ -131,7 +131,8 @@ type function kont2disk(dir: char; x: extended): longint; overload; function kont2diskFak(senkrecht: boolean; x: extended): extended; overload; inline; function kont2diskFak(dir: char; x: extended): extended; overload; - function disk2kont(dir: char; x: longint): extended; + function disk2kont(dir: char; x: extended): extended; overload; inline; + function disk2kont(x: tExtPoint): tExtPoint; overload; inline; function disk2kontFak(senkrecht: boolean; x: longint): extended; overload; inline; function disk2kontFak(dir: char; x: longint): extended; overload; procedure schreibeWertIntegriert(var f: textfile; i: longint; hor: boolean); @@ -573,10 +574,10 @@ begin else if (s='tMax') or (s='tStop') then result:=wertes^[i].transformationen.tStop else if (s='wMin') or (s='minW') then result:=wertes^[i]._minW else if (s='wMax') or (s='maxW') then result:=wertes^[i]._maxW - else if (s='pMinX') or (s='minPX') then result:=wertes^[i].disk2kontFak('x',wertes^[i]._minP['x']) - else if (s='pMaxX') or (s='maxPX') then result:=wertes^[i].disk2kontFak('x',wertes^[i]._maxP['x']) - else if (s='pMinT') or (s='minPT') or (s='pMinY') or (s='minPY') then result:=wertes^[i].disk2kontFak('y',wertes^[i]._minP['y']) - else if (s='pMaxT') or (s='maxPT') or (s='pMaxY') or (s='maxPY') then result:=wertes^[i].disk2kontFak('y',wertes^[i]._maxP['y']) + else if (s='pMinX') or (s='minPX') then result:=wertes^[i].disk2kont('x',wertes^[i]._minP['x']) + else if (s='pMaxX') or (s='maxPX') then result:=wertes^[i].disk2kont('x',wertes^[i]._maxP['x']) + else if (s='pMinT') or (s='minPT') or (s='pMinY') or (s='minPY') then result:=wertes^[i].disk2kont('y',wertes^[i]._minP['y']) + else if (s='pMaxT') or (s='maxPT') or (s='pMaxY') or (s='maxPY') then result:=wertes^[i].disk2kont('y',wertes^[i]._maxP['y']) else if s='np' then result:=wertes^[i]._np else if (s='beta') or (s='β') then result:=wertes^[i]._beta else if s='Breite' then result:=wertes^[i].transformationen.xStart-wertes^[i].transformationen.xStop @@ -2060,18 +2061,26 @@ begin end; end; -function tWerte.disk2kont(dir: char; x: longint): extended; +function tWerte.disk2kont(dir: char; x: extended): extended; begin case dir of 'x': - result:=transformationen.positionAufAchseZuWert(lOben,x,false); + result:=transformationen.positionAufAchseZuWert(lOben,x/(_xSteps-1),false); 'y','t': - result:=transformationen.positionAufAchseZuWert(lLinks,x,false); + result:=transformationen.positionAufAchseZuWert(lLinks,x/(_tSiz-1),false); else result:=nan; end; end; +function tWerte.disk2kont(x: tExtPoint): tExtPoint; +begin + result:=extPoint( + disk2kont('x',x['x']), + disk2kont('y',x['y']) + ); +end; + function tWerte.disk2kontFak(senkrecht: boolean; x: longint): extended; begin result:=disk2kontFak(char(ord('x')+byte(senkrecht)),x); @@ -3129,10 +3138,7 @@ begin bekannteBefehle.clear; if istDasBefehl('Ende',s,bekannteBefehle,false) then break; if istDasBefehl('xMin:',s,bekannteBefehle,true) then begin - writeln(s); xMin:=kont2disk('x',exprToFloat(sT,s)); - writeln(xMin); - writeln; continue; end; if istDasBefehl('xMax:',s,bekannteBefehle,true) then begin @@ -4733,8 +4739,6 @@ begin if istKomplex xor (dos[4] in [doAlleResIms, doAlleResSmi]) then begin gibAus('Eine 2d-FFT gibt genau dann alle Real- und Imaginärteile aus, wenn die Eingabe komplex ist!',3); - writeln(istKomplex); - writeln(dos[4]); exit; end; @@ -5549,9 +5553,9 @@ end; procedure tWerte.schreibeWert(var f: textfile; x,y: longint); begin case genauigkeit of - gSingle: sWerte.schreibeWert(f,x,y); - gDouble: dWerte.schreibeWert(f,x,y); - gExtended: eWerte.schreibeWert(f,x,y); + gSingle: sWerte.schreibeWert(f,x,y,disk2kont(extPoint(x,y))); + gDouble: dWerte.schreibeWert(f,x,y,disk2kont(extPoint(x,y))); + gExtended: eWerte.schreibeWert(f,x,y,disk2kont(extPoint(x,y))); end{of Case}; end; diff --git a/typenunit.pas b/typenunit.pas index 8c25fca..52a05d6 100644 --- a/typenunit.pas +++ b/typenunit.pas @@ -288,7 +288,7 @@ type procedure aktualisiereWmia; virtual; function transformiereKoordinatenEinzeln(const p: tExtPoint; auszerhalbIstFehler: boolean = true): tExtPoint; virtual; - function transformiereKoordinatenEinzelnIvers(const p: tExtPoint; auszerhalbIstFehler: boolean = true): tExtPoint; virtual; + function transformiereKoordinatenEinzelnInvers(const p: tExtPoint; auszerhalbIstFehler: boolean = true): tExtPoint; virtual; // wie ändert sich die Position eines Punktes (Paradebeispiel: bei Spiegelung: x -> xSteps-1-x) // ist für p veranwortlich? // und die inverse Funktion @@ -335,6 +335,7 @@ type // wie lauten xStart,xStop,tStart,tStop? function transformiereKoordinaten(const p: tExtPoint; const tiefe: longint = -1): tExtPoint; overload; function transformiereKoordinaten(const x,y: longint; const tiefe: longint = -1): tExtPoint; overload; + function transformiereKoordinatenInvers(const p: tExtPoint; const tiefe: longint = -1): tExtPoint; function wertZuPositionAufAchse(const l: tLage; x: extended; auszerhalbIstFehler: boolean = true): extended; virtual; function positionAufAchseZuWert(const l: tLage; x: extended; auszerhalbIstFehler: boolean = true): extended; virtual; function transformiereWert(const x: extended; const tiefe: longint = -1): extended; @@ -409,7 +410,7 @@ type constructor create; constructor create(vorg: tTransformation); function transformiereKoordinatenEinzeln(const p: tExtPoint; auszerhalbIstFehler: boolean = true): tExtPoint; override; - function transformiereKoordinatenEinzelnIvers(const p: tExtPoint; auszerhalbIstFehler: boolean = true): tExtPoint; override; + function transformiereKoordinatenEinzelnInvers(const p: tExtPoint; auszerhalbIstFehler: boolean = true): tExtPoint; override; // keine Änderung der Achsenbegrenzungen, der Werte(skalierung), der Ausdehnung function dumpParams: string; override; end; @@ -427,7 +428,7 @@ type expFak: tExtPoint; // Vorfaktoren der Exponentialfunktionen constructor create; overload; function transformiereKoordinatenEinzeln(const p: tExtPoint; auszerhalbIstFehler: boolean = true): tExtPoint; override; - function transformiereKoordinatenEinzelnIvers(const p: tExtPoint; auszerhalbIstFehler: boolean = true): tExtPoint; override; + function transformiereKoordinatenEinzelnInvers(const p: tExtPoint; auszerhalbIstFehler: boolean = true): tExtPoint; override; function initAbbildung(syntaxTest: boolean; s: string; xScale,yScale: extended; etf: tExprToFloat): boolean; function zielausdehnung: t2x2Longint; procedure aktualisiereXsTs; override; @@ -447,7 +448,7 @@ type function positionAufAchseZuWert(const l: tLage; x: extended; auszerhalbIstFehler: boolean = true): extended; override; procedure aktualisiereAchsen; override; function transformiereKoordinatenEinzeln(const p: tExtPoint; auszerhalbIstFehler: boolean = true): tExtPoint; override; - function transformiereKoordinatenEinzelnIvers(const p: tExtPoint; auszerhalbIstFehler: boolean = true): tExtPoint; override; + function transformiereKoordinatenEinzelnInvers(const p: tExtPoint; auszerhalbIstFehler: boolean = true): tExtPoint; override; // keine Änderung der Werte(skalierung), der Ausdehnung function dumpParams: string; override; end; @@ -458,7 +459,7 @@ type procedure aktualisiereXsTs; override; procedure aktualisiereAchsen; override; function transformiereKoordinatenEinzeln(const p: tExtPoint; auszerhalbIstFehler: boolean = true): tExtPoint; override; - function transformiereKoordinatenEinzelnIvers(const p: tExtPoint; auszerhalbIstFehler: boolean = true): tExtPoint; override; + function transformiereKoordinatenEinzelnInvers(const p: tExtPoint; auszerhalbIstFehler: boolean = true): tExtPoint; override; // keine Änderung der Werte(skalierung) function dumpParams: string; override; end; @@ -1842,7 +1843,7 @@ begin testeAuszerhalb(p); end; -function tTransformation.transformiereKoordinatenEinzelnIvers(const p: tExtPoint; auszerhalbIstFehler: boolean = true): tExtPoint; +function tTransformation.transformiereKoordinatenEinzelnInvers(const p: tExtPoint; auszerhalbIstFehler: boolean = true): tExtPoint; begin result:=p; if auszerhalbIstFehler then @@ -1867,11 +1868,21 @@ begin result:=transformiereKoordinaten(p,tiefe); end; +function tTransformation.transformiereKoordinatenInvers(const p: tExtPoint; const tiefe: longint = -1): tExtPoint; +begin + result:=transformiereKoordinatenEinzelnInvers(p); + if (length(vorgaenger)>0) and (tiefe<>0) then + result:=vorgaenger[0].transformiereKoordinaten(result,tiefe-1); +end; + function tTransformation.wertZuPositionAufAchse(const l: tLage; x: extended; auszerhalbIstFehler: boolean = true): extended; var c,d: char; p: tExtPoint; begin + if auszerhalbIstFehler then + testeAuszerhalb(l,x); + // das generische Verhalten ist c:=paralleleRichtung[l]; d:=senkrechteRichtung[l]; @@ -1888,7 +1899,8 @@ begin p:=transformiereKoordinatenEinzeln(p,auszerhalbIstFehler); // und in Anteile zurückzurechnen - result:=p[c]/outXSTS[c]; + result:=p[c]/(outXSTS[c]-1); + end; function tTransformation.positionAufAchseZuWert(const l: tLage; x: extended; auszerhalbIstFehler: boolean = true): extended; @@ -1906,16 +1918,18 @@ begin // in Koordinaten umrechnen for d:='x' to 'y' do - p[d]:=p[d] * (inXSTS[d]-1); + p[d]:=p[d] * (outXSTS[d]-1); // transformieren - p:=transformiereKoordinatenEinzelnIvers(p,auszerhalbIstFehler); + p:=transformiereKoordinatenEinzelnInvers(p,auszerhalbIstFehler); // und in Anteile zurückrechnen - p[c]:=p[c]/outXSTS[c]; + p[c]:=p[c]/(inXSTS[c]-1); // und vom Vorgänger weiter berechnen lassen - result:=vorgaenger[0].positionAufAchseZuWert(l,p[c],auszerhalbIstFehler) + result:=vorgaenger[0].positionAufAchseZuWert(l,p[c],auszerhalbIstFehler); + if auszerhalbIstFehler then + testeAuszerhalb(l,result); end; function tTransformation.transformiereWertEinzeln(const x: extended): extended; @@ -1976,14 +1990,15 @@ function tKeineTransformation.positionAufAchseZuWert(const l: tLage; x: extended var c: char; begin - if auszerhalbIstFehler then - testeAuszerhalb(l,x); // ein Wert am Anfang ist einfach linear zu interpolieren c:=paralleleRichtung[l]; if x=0 then result:=outAchsen[c,'x'] else result:=x/(1-1/outXSTS[c])*(outAchsen[c,'y']-outAchsen[c,'x'])+outAchsen[c,'x']; + + if auszerhalbIstFehler then + testeAuszerhalb(l,result); end; // tIdentitaet ***************************************************************** @@ -2057,7 +2072,7 @@ begin // egal, wie die Werte vor der FFT aussahen, wir setzen die Frequenzen danach linear c:=paralleleRichtung[l]; if x=outAchsen[c,'x'] then - result:=0 + result:=0 else result:=(x-outAchsen[c,'x'])/(outAchsen[c,'y']-outAchsen[c,'x']); @@ -2069,8 +2084,6 @@ function tFFTTransformation.positionAufAchseZuWert(const l: tLage; x: extended; var c: char; begin - if auszerhalbIstFehler then - testeAuszerhalb(l,x); if ((l in [lOben,lUnten]) and not horizontal) or // untransformierte Achse? ((not (l in [lOben,lUnten])) and not vertikal) then result:=inherited positionAufAchseZuWert(l,x,auszerhalbIstFehler) // Vorfahren befragen @@ -2082,6 +2095,8 @@ begin else result:=x/(1-1/outXSTS[c])*(outAchsen[c,'y']-outAchsen[c,'x'])+outAchsen[c,'x']; end; + if auszerhalbIstFehler then + testeAuszerhalb(l,result); end; function tFFTTransformation.dumpParams: string; @@ -2112,7 +2127,7 @@ begin result['y']:=p['y']; end; -function tSpiegelungsTransformation.transformiereKoordinatenEinzelnIvers(const p: tExtPoint; auszerhalbIstFehler: boolean = true): tExtPoint; +function tSpiegelungsTransformation.transformiereKoordinatenEinzelnInvers(const p: tExtPoint; auszerhalbIstFehler: boolean = true): tExtPoint; begin if auszerhalbIstFehler then testeAuszerhalb(p); @@ -2219,11 +2234,11 @@ begin end; end; -function tKonkreteKoordinatenTransformation.transformiereKoordinatenEinzelnIvers(const p: tExtPoint; auszerhalbIstFehler: boolean = true): tExtPoint; +function tKonkreteKoordinatenTransformation.transformiereKoordinatenEinzelnInvers(const p: tExtPoint; auszerhalbIstFehler: boolean = true): tExtPoint; begin if auszerhalbIstFehler then testeAuszerhalb(p); - fehler('tKonkreteKoordinatenTransformation: transformiereKoordinatenEinzelnIvers kann es nicht geben, weil transformiereKoordinatenEinzeln nicht umkehrbar sein muss!'); + fehler('tKonkreteKoordinatenTransformation: transformiereKoordinatenEinzelnInvers kann es nicht geben, weil transformiereKoordinatenEinzeln nicht umkehrbar sein muss!'); result:=extPoint(0,0); end; @@ -2392,18 +2407,22 @@ end; function tLambdaZuOmegaTransformation.wertZuPositionAufAchse(const l: tLage; x: extended; auszerhalbIstFehler: boolean = true): extended; begin + if auszerhalbIstFehler then + testeAuszerhalb(l,x); if ((l in [lOben,lUnten]) and horizontal) or // transformierte Achse? ((l in [lLinks,lRechts]) and vertikal) then x:=_faktor/x; - result:=vorgaenger[0].wertZuPositionAufAchse(l,x,auszerhalbIstFehler); // Vorfahren befragen + result:=vorgaenger[0].wertZuPositionAufAchse(l,x,auszerhalbIstFehler); // Vorgaenger befragen end; function tLambdaZuOmegaTransformation.positionAufAchseZuWert(const l: tLage; x: extended; auszerhalbIstFehler: boolean = true): extended; begin + result:=vorgaenger[0].positionAufAchseZuWert(l,x,auszerhalbIstFehler); // Vorfahren befragen if ((l in [lOben,lUnten]) and horizontal) or // transformierte Achse? ((l in [lLinks,lRechts]) and vertikal) then - x:=_faktor/x; - result:=vorgaenger[0].positionAufAchseZuWert(l,x,auszerhalbIstFehler); // Vorfahren befragen + result:=_faktor/result; + if auszerhalbIstFehler then + testeAuszerhalb(l,result); end; procedure tLambdaZuOmegaTransformation.aktualisiereAchsen; @@ -2450,7 +2469,7 @@ begin result['y']:=p['y']; end; -function tLambdaZuOmegaTransformation.transformiereKoordinatenEinzelnIvers(const p: tExtPoint; auszerhalbIstFehler: boolean = true): tExtPoint; +function tLambdaZuOmegaTransformation.transformiereKoordinatenEinzelnInvers(const p: tExtPoint; auszerhalbIstFehler: boolean = true): tExtPoint; var verh: extended; begin @@ -2539,7 +2558,7 @@ begin result[c]:=max(0,min(outXSTS[c],p[c]-gr[c,'x'])); end; -function tKoordinatenAusschnitt.transformiereKoordinatenEinzelnIvers(const p: tExtPoint; auszerhalbIstFehler: boolean = true): tExtPoint; +function tKoordinatenAusschnitt.transformiereKoordinatenEinzelnInvers(const p: tExtPoint; auszerhalbIstFehler: boolean = true): tExtPoint; var c: char; begin @@ -2591,6 +2610,8 @@ end; function tFitTransformation.wertZuPositionAufAchse(const l: tLage; x: extended; auszerhalbIstFehler: boolean = true): extended; begin + if auszerhalbIstFehler then + testeAuszerhalb(l,x); if (l in [lOben,lUnten]) xor _senkrecht then result:=0 // keine Ausdehnung in dieser Richtung! else @@ -2603,6 +2624,8 @@ begin fehler('Eine fit-Transformation hat keine Ausdehnung in dieser Richtung!') else result:=vorgaenger[0].positionAufAchseZuWert(l,x,auszerhalbIstFehler); + if auszerhalbIstFehler then + testeAuszerhalb(l,result); end; function tFitTransformation.dumpParams: string; @@ -2738,7 +2761,7 @@ end; function tAgglomeration.positionAufAchseZuWert(const l: tLage; x: extended; auszerhalbIstFehler: boolean = true): extended; begin - if auszerhalbIstFehler then + if auszerhalbIstFehler then // intentionally wrong! testeAuszerhalb(l,x); fehler('tAgglomeration: positionAufAchseZuWert ist noch nicht implementiert'); result:=0; @@ -2807,7 +2830,7 @@ end; function tDiagonaleAgglomeration.positionAufAchseZuWert(const l: tLage; x: extended; auszerhalbIstFehler: boolean = true): extended; begin - if auszerhalbIstFehler then + if auszerhalbIstFehler then // intentionally wrong testeAuszerhalb(l,x); fehler('tDiagonaleAgglomeration: positionAufAchseZuWert ist noch nicht implementiert!'); result:=0; diff --git a/werteunit.pas b/werteunit.pas index 05c3687..0e65ed2 100644 --- a/werteunit.pas +++ b/werteunit.pas @@ -59,8 +59,9 @@ type procedure fft2dNachbearbeitungB(xMin,xMax: longint; nB: tFFTDatenordnung); procedure fft2dNachbearbeitungVerdoppeln(nB: tFFTDatenordnung); procedure fft2dNachbearbeitungKomplex(xMin,xMax: longint; nB: tFFTDatenordnung); - procedure schreibeWert(var f: textfile; x,y: longint); overload; - procedure schreibeWert(var f: textfile; x,y,wert: extended); overload; + procedure schreibeWert(var f: textfile; x,y: longint; beschriftung: tExtPoint); overload; inline; + procedure schreibeWert(var f: textfile; x,y: longint); overload; inline; + procedure schreibeWert(var f: textfile; xBeschr,yBeschr,wert: extended); overload; inline; procedure schreibeWertIntegriert(var f: textfile; i: longint; hor: boolean); procedure erzeugeBinning(senkrecht,linien: boolean; x0,dx: extended; s: string); procedure holeRAM; inline; overload; @@ -868,24 +869,29 @@ begin result:=not (in0 or out0); end; -procedure tLLWerte.schreibeWert(var f: textfile; x,y: longint); +procedure tLLWerte.schreibeWert(var f: textfile; x,y: longint; beschriftung: tExtPoint); begin - schreibeWert(f,x,y,werte[x+y*params.xSteps]); + schreibeWert(f,beschriftung['x'],beschriftung['y'],werte[x+y*params.xSteps]); end; -procedure tLLWerte.schreibeWert(var f: textfile; x,y,wert: extended); +procedure tLLWerte.schreibeWert(var f: textfile; x,y: longint); var - xa,ta: extended; + pkt: tExtPoint; begin if params.xStop=params.xStart then - xa:=params.xStop + pkt['x']:=params.xStop else - xa:=params.xStart+x/(params.xSteps-1)*(params.xStop-params.xStart); + pkt['x']:=params.xStart+x/(params.xSteps-1)*(params.xStop-params.xStart); if params.tStop=params.tStart then - ta:=params.tStop + pkt['y']:=params.tStop else - ta:=params.tStart+y/(params.tSiz-1)*(params.tStop-params.tStart); - writeln(f,floatToStr(xa)+' '+floatToStr(ta)+' '+floatToStr(wert)); + pkt['y']:=params.tStart+y/(params.tSiz-1)*(params.tStop-params.tStart); + schreibeWert(f,x,y,pkt); +end; + +procedure tLLWerte.schreibeWert(var f: textfile; xBeschr,yBeschr,wert: extended); +begin + writeln(f,myFloatToStr(xBeschr)+' '+myFloatToStr(yBeschr)+' '+myFloatToStr(wert)); end; procedure tLLWerte.schreibeWertIntegriert(var f: textfile; i: longint; hor: boolean); |