diff options
-rw-r--r-- | epost.lps | 143 | ||||
-rw-r--r-- | lambdaZuOmega.nb | 186 | ||||
-rw-r--r-- | typenunit.pas | 176 |
3 files changed, 369 insertions, 136 deletions
@@ -22,10 +22,9 @@ <Unit2> <Filename Value="epostunit.pas"/> <IsPartOfProject Value="True"/> - <IsVisibleTab Value="True"/> <EditorIndex Value="1"/> - <TopLine Value="5471"/> - <CursorPos X="21" Y="5499"/> + <TopLine Value="3957"/> + <CursorPos X="69" Y="3962"/> <UsageCount Value="201"/> <Loaded Value="True"/> </Unit2> @@ -40,17 +39,17 @@ <Filename Value="werteunit.pas"/> <IsPartOfProject Value="True"/> <EditorIndex Value="8"/> - <TopLine Value="865"/> - <CursorPos X="16" Y="882"/> + <CursorPos X="114" Y="15"/> <UsageCount Value="200"/> <Loaded Value="True"/> </Unit4> <Unit5> <Filename Value="typenunit.pas"/> <IsPartOfProject Value="True"/> + <IsVisibleTab Value="True"/> <EditorIndex Value="11"/> - <TopLine Value="1954"/> - <CursorPos Y="1987"/> + <TopLine Value="2501"/> + <CursorPos X="14" Y="2530"/> <UsageCount Value="200"/> <Loaded Value="True"/> </Unit5> @@ -77,7 +76,7 @@ <IsPartOfProject Value="True"/> <EditorIndex Value="10"/> <CursorPos X="35" Y="10"/> - <UsageCount Value="175"/> + <UsageCount Value="179"/> <Loaded Value="True"/> </Unit8> <Unit9> @@ -86,7 +85,7 @@ <EditorIndex Value="9"/> <TopLine Value="382"/> <CursorPos X="59" Y="417"/> - <UsageCount Value="62"/> + <UsageCount Value="66"/> <Loaded Value="True"/> </Unit9> <Unit10> @@ -94,7 +93,7 @@ <EditorIndex Value="7"/> <TopLine Value="198"/> <CursorPos X="19" Y="226"/> - <UsageCount Value="32"/> + <UsageCount Value="34"/> <Loaded Value="True"/> </Unit10> <Unit11> @@ -110,7 +109,7 @@ <EditorIndex Value="5"/> <TopLine Value="32"/> <CursorPos X="46" Y="50"/> - <UsageCount Value="91"/> + <UsageCount Value="93"/> <Loaded Value="True"/> </Unit12> <Unit13> @@ -118,7 +117,7 @@ <EditorIndex Value="2"/> <TopLine Value="126"/> <CursorPos X="7" Y="147"/> - <UsageCount Value="46"/> + <UsageCount Value="48"/> <Loaded Value="True"/> </Unit13> <Unit14> @@ -215,124 +214,124 @@ </Units> <JumpHistory Count="30" HistoryIndex="29"> <Position1> - <Filename Value="epostunit.pas"/> - <Caret Line="178" Column="28" TopLine="172"/> + <Filename Value="typenunit.pas"/> + <Caret Line="290" Column="45" TopLine="261"/> </Position1> <Position2> - <Filename Value="epostunit.pas"/> - <Caret Line="5382" Column="31" TopLine="5353"/> + <Filename Value="typenunit.pas"/> + <Caret Line="416" Column="45" TopLine="387"/> </Position2> <Position3> - <Filename Value="epostunit.pas"/> - <Caret Line="2109" Column="68" TopLine="2083"/> + <Filename Value="typenunit.pas"/> + <Caret Line="434" Column="45" TopLine="405"/> </Position3> <Position4> - <Filename Value="epostunit.pas"/> - <Caret Line="2105" Column="69" TopLine="2087"/> + <Filename Value="typenunit.pas"/> + <Caret Line="462" Column="45" TopLine="433"/> </Position4> <Position5> - <Filename Value="werteunit.pas"/> - <Caret Line="65" Column="37" TopLine="47"/> + <Filename Value="typenunit.pas"/> + <Caret Line="473" Column="45" TopLine="444"/> </Position5> <Position6> - <Filename Value="epostunit.pas"/> - <Caret Line="2105" Column="69" TopLine="2087"/> + <Filename Value="typenunit.pas"/> + <Caret Line="1851" Column="57" TopLine="1822"/> </Position6> <Position7> - <Filename Value="epostunit.pas"/> - <Caret Line="5503" Column="97" TopLine="5486"/> + <Filename Value="typenunit.pas"/> + <Caret Line="1885" Column="42" TopLine="1856"/> </Position7> <Position8> - <Filename Value="werteunit.pas"/> - <Caret Line="897" Column="86" TopLine="890"/> + <Filename Value="typenunit.pas"/> + <Caret Line="1931" Column="37" TopLine="1902"/> </Position8> <Position9> - <Filename Value="epostunit.pas"/> - <Caret Line="5504" Column="97" TopLine="5487"/> + <Filename Value="typenunit.pas"/> + <Caret Line="2157" Column="68" TopLine="2128"/> </Position9> <Position10> - <Filename Value="epostunit.pas"/> - <Caret Line="186" Column="3" TopLine="171"/> + <Filename Value="typenunit.pas"/> + <Caret Line="2250" Column="76" TopLine="2221"/> </Position10> <Position11> - <Filename Value="epostunit.pas"/> - <Caret Line="5504" Column="9" TopLine="5487"/> + <Filename Value="typenunit.pas"/> + <Caret Line="2276" Column="142" TopLine="2247"/> </Position11> <Position12> - <Filename Value="epostunit.pas"/> - <Caret Line="138" Column="81" TopLine="120"/> + <Filename Value="typenunit.pas"/> + <Caret Line="2505" TopLine="2512"/> </Position12> <Position13> - <Filename Value="epostunit.pas"/> - <Caret Line="2096" Column="132" TopLine="2079"/> + <Filename Value="typenunit.pas"/> + <Caret Line="1931" Column="32" TopLine="1903"/> </Position13> <Position14> - <Filename Value="epostunit.pas"/> - <Caret Line="5554" Column="78" TopLine="5531"/> + <Filename Value="typenunit.pas"/> + <Caret Line="290" Column="45" TopLine="273"/> </Position14> <Position15> - <Filename Value="epostunit.pas"/> - <Caret Line="5549" Column="51" TopLine="5531"/> + <Filename Value="typenunit.pas"/> + <Caret Line="416" Column="45" TopLine="387"/> </Position15> <Position16> - <Filename Value="epostunit.pas"/> - <Caret Line="186" Column="52" TopLine="169"/> + <Filename Value="typenunit.pas"/> + <Caret Line="434" Column="45" TopLine="405"/> </Position16> <Position17> - <Filename Value="epostunit.pas"/> - <Caret Line="5499" Column="27" TopLine="5482"/> + <Filename Value="typenunit.pas"/> + <Caret Line="462" Column="45" TopLine="433"/> </Position17> <Position18> - <Filename Value="epostunit.pas"/> - <Caret Line="5549" Column="56" TopLine="5532"/> + <Filename Value="typenunit.pas"/> + <Caret Line="473" Column="45" TopLine="444"/> </Position18> <Position19> - <Filename Value="epostunit.pas"/> - <Caret Line="5553" Column="65" TopLine="5534"/> + <Filename Value="typenunit.pas"/> + <Caret Line="1851" Column="57" TopLine="1822"/> </Position19> <Position20> - <Filename Value="epostunit.pas"/> - <Caret Line="5549" Column="60" TopLine="5534"/> + <Filename Value="typenunit.pas"/> + <Caret Line="1885" Column="42" TopLine="1856"/> </Position20> <Position21> - <Filename Value="werteunit.pas"/> - <Caret Line="64" Column="3" TopLine="46"/> + <Filename Value="typenunit.pas"/> + <Caret Line="1931" Column="37" TopLine="1902"/> </Position21> <Position22> - <Filename Value="werteunit.pas"/> - <Caret Line="874" TopLine="854"/> + <Filename Value="typenunit.pas"/> + <Caret Line="2157" Column="68" TopLine="2128"/> </Position22> <Position23> - <Filename Value="werteunit.pas"/> - <Caret Line="893" Column="9" TopLine="860"/> + <Filename Value="typenunit.pas"/> + <Caret Line="2250" Column="76" TopLine="2221"/> </Position23> <Position24> - <Filename Value="werteunit.pas"/> - <Caret Line="894" Column="3" TopLine="878"/> + <Filename Value="typenunit.pas"/> + <Caret Line="2276" Column="142" TopLine="2247"/> </Position24> <Position25> - <Filename Value="werteunit.pas"/> - <Caret Line="889" Column="29" TopLine="875"/> + <Filename Value="typenunit.pas"/> + <Caret Line="2506" Column="19" TopLine="2491"/> </Position25> <Position26> - <Filename Value="werteunit.pas"/> - <Caret Line="62" Column="27" TopLine="45"/> + <Filename Value="typenunit.pas"/> + <Caret Line="459" Column="35" TopLine="441"/> </Position26> <Position27> - <Filename Value="werteunit.pas"/> - <Caret Line="63" Column="27" TopLine="45"/> + <Filename Value="typenunit.pas"/> + <Caret Line="2460" Column="65" TopLine="2434"/> </Position27> <Position28> - <Filename Value="werteunit.pas"/> - <Caret Line="884" TopLine="864"/> + <Filename Value="typenunit.pas"/> + <Caret Line="2463" Column="60" TopLine="2434"/> </Position28> <Position29> - <Filename Value="epostunit.pas"/> - <Caret Line="5549" Column="25" TopLine="5534"/> + <Filename Value="typenunit.pas"/> + <Caret Line="2539" Column="30" TopLine="2505"/> </Position29> <Position30> - <Filename Value="epostunit.pas"/> - <Caret Line="186" Column="27" TopLine="170"/> + <Filename Value="typenunit.pas"/> + <Caret Line="1921" Column="45" TopLine="1903"/> </Position30> </JumpHistory> </ProjectSession> diff --git a/lambdaZuOmega.nb b/lambdaZuOmega.nb new file mode 100644 index 0000000..710983c --- /dev/null +++ b/lambdaZuOmega.nb @@ -0,0 +1,186 @@ +(* Content-type: application/vnd.wolfram.mathematica *) +(*** Wolfram Notebook File ***) +(* http://www.wolfram.com/nb *) +(* CreatedBy='Mathematica 8.0' *) +(*CacheID: 234*) +(* Internal cache information: +NotebookFileLineBreakTest +NotebookFileLineBreakTest +NotebookDataPosition[ 157, 7] +NotebookDataLength[ 6223, 187] +NotebookOptionsPosition[ 5835, 169] +NotebookOutlinePosition[ 6171, 184] +CellTagsIndexPosition[ 6128, 181] +WindowFrame->Normal*) +(* Beginning of Notebook Content *) +Notebook[{ +Cell[CellGroupData[{ +Cell[BoxData[{ + RowBox[{ + RowBox[{"Clear", "[", + RowBox[{"Evaluate", "[", + RowBox[{ + RowBox[{"Context", "[", "]"}], "<>", "\"\<*\>\""}], "]"}], "]"}], + ";"}], "\[IndentingNewLine]", + RowBox[{ + RowBox[{ + RowBox[{"k", "[", "x_", "]"}], ":=", + RowBox[{"faktor", "/", "x"}]}], ";"}], "\[IndentingNewLine]", + RowBox[{"eqns", "=", + RowBox[{"{", "\[IndentingNewLine]", + RowBox[{ + RowBox[{"xI", "\[Equal]", + RowBox[{ + RowBox[{"(", + RowBox[{"xSteps", "-", "1"}], ")"}], + RowBox[{ + RowBox[{"(", + RowBox[{"x", "-", "xStart"}], ")"}], "/", + RowBox[{"(", + RowBox[{"xStop", "-", "xStart"}], ")"}]}]}]}], ",", + "\[IndentingNewLine]", + RowBox[{"verh", "\[Equal]", + RowBox[{"xStart", "/", + RowBox[{"(", + RowBox[{"xStop", "-", "xStart"}], ")"}]}]}]}], "\[IndentingNewLine]", + "}"}]}], "\[IndentingNewLine]", + RowBox[{ + RowBox[{"xStart", "=", + RowBox[{"xStart", "/.", + RowBox[{"First", "@", + RowBox[{"Solve", "[", + RowBox[{ + RowBox[{"eqns", "[", + RowBox[{"[", "2", "]"}], "]"}], ",", "xStart"}], "]"}]}]}]}], + ";"}], "\[IndentingNewLine]", + RowBox[{ + RowBox[{"kI", "=", + RowBox[{ + RowBox[{"(", + RowBox[{"xSteps", "-", "1"}], ")"}], + RowBox[{ + RowBox[{"(", + RowBox[{ + RowBox[{"k", "[", "x", "]"}], "-", + RowBox[{"k", "[", "xStop", "]"}]}], ")"}], "/", + RowBox[{"(", + RowBox[{ + RowBox[{"k", "[", "xStart", "]"}], "-", + RowBox[{"k", "[", "xStop", "]"}]}], ")"}]}]}]}], + ";"}], "\[IndentingNewLine]", + RowBox[{ + RowBox[{"kI", "/.", + RowBox[{"First", "@", + RowBox[{"Solve", "[", + RowBox[{ + RowBox[{"eqns", "[", + RowBox[{"[", "1", "]"}], "]"}], ",", "x"}], "]"}]}]}], "//", + "FullSimplify"}], "\[IndentingNewLine]", + RowBox[{ + RowBox[{"xI", "/.", + RowBox[{"First", "@", + RowBox[{"Solve", "[", + RowBox[{ + RowBox[{"kIi", "\[Equal]", "%"}], ",", "xI"}], "]"}]}]}], "//", + "FullSimplify"}]}], "Input", + CellChangeTimes->{{3.716270700588258*^9, 3.716270869574233*^9}, { + 3.716270906743692*^9, 3.716271141965414*^9}, {3.716271177922686*^9, + 3.716271312791499*^9}, {3.716271396656218*^9, 3.7162713968918953`*^9}, { + 3.716271559818191*^9, 3.716271597895515*^9}, {3.716271635687215*^9, + 3.7162717100276823`*^9}, {3.716271742702814*^9, 3.7162717450250397`*^9}}], +Cell[BoxData[ + RowBox[{"{", + RowBox[{ + RowBox[{"xI", "\[Equal]", + FractionBox[ + RowBox[{ + RowBox[{"(", + RowBox[{"x", "-", "xStart"}], ")"}], " ", + RowBox[{"(", + RowBox[{ + RowBox[{"-", "1"}], "+", "xSteps"}], ")"}]}], + RowBox[{ + RowBox[{"-", "xStart"}], "+", "xStop"}]]}], ",", + RowBox[{"verh", "\[Equal]", + FractionBox["xStart", + RowBox[{ + RowBox[{"-", "xStart"}], "+", "xStop"}]]}]}], "}"}]], "Output", + CellChangeTimes->{{3.716270736731851*^9, 3.7162707662029676`*^9}, { + 3.7162708383985023`*^9, 3.716270870214566*^9}, {3.716270915557753*^9, + 3.716271028401211*^9}, 3.7162710700054827`*^9, {3.71627110254945*^9, + 3.716271142505834*^9}, {3.716271192638852*^9, 3.716271227495256*^9}, { + 3.716271270749222*^9, 3.716271282301167*^9}, 3.716271315258836*^9, + 3.7162713973763647`*^9, {3.716271592848399*^9, 3.716271598329258*^9}, + 3.716271638371859*^9, {3.716271669075458*^9, 3.7162717105542107`*^9}, + 3.716271745502193*^9}], +Cell[BoxData[ + FractionBox[ + RowBox[{"verh", " ", + RowBox[{"(", + RowBox[{ + RowBox[{"-", "1"}], "+", "xSteps"}], ")"}], " ", + RowBox[{"(", + RowBox[{ + RowBox[{"-", "1"}], "-", "xI", "+", "xSteps"}], ")"}]}], + RowBox[{"xI", "+", + RowBox[{"verh", " ", + RowBox[{"(", + RowBox[{ + RowBox[{"-", "1"}], "+", "xSteps"}], ")"}]}]}]]], "Output", + CellChangeTimes->{{3.716270736731851*^9, 3.7162707662029676`*^9}, { + 3.7162708383985023`*^9, 3.716270870214566*^9}, {3.716270915557753*^9, + 3.716271028401211*^9}, 3.7162710700054827`*^9, {3.71627110254945*^9, + 3.716271142505834*^9}, {3.716271192638852*^9, 3.716271227495256*^9}, { + 3.716271270749222*^9, 3.716271282301167*^9}, 3.716271315258836*^9, + 3.7162713973763647`*^9, {3.716271592848399*^9, 3.716271598329258*^9}, + 3.716271638371859*^9, {3.716271669075458*^9, 3.7162717105542107`*^9}, + 3.716271745503914*^9}], +Cell[BoxData[ + RowBox[{"-", + FractionBox[ + RowBox[{"verh", " ", + RowBox[{"(", + RowBox[{"1", "+", "kIi", "-", "xSteps"}], ")"}], " ", + RowBox[{"(", + RowBox[{ + RowBox[{"-", "1"}], "+", "xSteps"}], ")"}]}], + RowBox[{"kIi", "+", + RowBox[{"verh", " ", + RowBox[{"(", + RowBox[{ + RowBox[{"-", "1"}], "+", "xSteps"}], ")"}]}]}]]}]], "Output", + CellChangeTimes->{{3.716270736731851*^9, 3.7162707662029676`*^9}, { + 3.7162708383985023`*^9, 3.716270870214566*^9}, {3.716270915557753*^9, + 3.716271028401211*^9}, 3.7162710700054827`*^9, {3.71627110254945*^9, + 3.716271142505834*^9}, {3.716271192638852*^9, 3.716271227495256*^9}, { + 3.716271270749222*^9, 3.716271282301167*^9}, 3.716271315258836*^9, + 3.7162713973763647`*^9, {3.716271592848399*^9, 3.716271598329258*^9}, + 3.716271638371859*^9, {3.716271669075458*^9, 3.7162717105542107`*^9}, + 3.716271745523513*^9}] +}, Open ]] +}, +WindowSize->{740, 867}, +WindowMargins->{{45, Automatic}, {Automatic, 36}}, +FrontEndVersion->"8.0 for Linux x86 (64-bit) (November 7, 2010)", +StyleDefinitions->"Default.nb" +] +(* End of Notebook Content *) +(* Internal cache information *) +(*CellTagsOutline +CellTagsIndex->{} +*) +(*CellTagsIndex +CellTagsIndex->{} +*) +(*NotebookFileOutline +Notebook[{ +Cell[CellGroupData[{ +Cell[579, 22, 2394, 72, 202, "Input"], +Cell[2976, 96, 1009, 24, 49, "Output"], +Cell[3988, 122, 909, 21, 49, "Output"], +Cell[4900, 145, 919, 21, 50, "Output"] +}, Open ]] +} +] +*) +(* End of internal cache information *) diff --git a/typenunit.pas b/typenunit.pas index 52a05d6..de06330 100644 --- a/typenunit.pas +++ b/typenunit.pas @@ -288,9 +288,13 @@ type procedure aktualisiereWmia; virtual; function transformiereKoordinatenEinzeln(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? + function transformiereKoordinatenEinzelnInvers(const p: tExtPoint; auszerhalbIstFehler: boolean = true): tExtPoint; virtual; + // und die inverse Funktion + function transformiereAchseEinzeln(const l: tLage; x: extended; auszerhalbIstFehler: boolean = true): extended; virtual; + // wie ändert sich der Wert der Achse bei der Transformation (Paradebeispiel: bei lambdaZuOmega: x -> 2*pi*c/x) + function transformiereAchseEinzelnInvers(const l: tLage; x: extended; auszerhalbIstFehler: boolean = true): extended; virtual; // und die inverse Funktion function transformiereWertEinzeln(const x: extended): extended; virtual; // wie ändert sich ein Wert @@ -437,15 +441,23 @@ type end; tLambdaZuOmegaTransformation = class (tKoordinatenTransformation) private - _faktor: extended; + _faktor: extended; + _horizontal,_vertikal: boolean; + function transformiereAchseEinzeln(const l: tLage; x: extended; auszerhalbIstFehler: boolean = true): extended; override; + function transformiereAchseEinzelnInvers(const l: tLage; x: extended; auszerhalbIstFehler: boolean = true): extended; override; + procedure wHorizontal(h: boolean); + procedure wVertikal(v: boolean); public - horizontal, vertikal: boolean; constructor create; overload; constructor create(faktor: extended); overload; + property horizontal: boolean + read _horizontal + write wHorizontal; + property vertikal: boolean + read _vertikal + write wVertikal; function verhaeltnisHorizontal: extended; function verhaeltnisVertikal: extended; - function wertZuPositionAufAchse(const l: tLage; x: extended; auszerhalbIstFehler: boolean = true): extended; override; - 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 transformiereKoordinatenEinzelnInvers(const p: tExtPoint; auszerhalbIstFehler: boolean = true): tExtPoint; override; @@ -1850,10 +1862,24 @@ begin testeAuszerhalb(p); end; +function tTransformation.transformiereAchseEinzeln(const l: tLage; x: extended; auszerhalbIstFehler: boolean = true): extended; +begin // generisch passiert nichts mit der Achsenbeschriftung + if auszerhalbIstFehler then + testeAuszerhalb(l,x); + result:=x; +end; + +function tTransformation.transformiereAchseEinzelnInvers(const l: tLage; x: extended; auszerhalbIstFehler: boolean = true): extended; +begin // generisch passiert nichts mit der Achsenbeschriftung + if auszerhalbIstFehler then + testeAuszerhalb(l,x); + result:=x; +end; + function tTransformation.transformiereKoordinaten(const p: tExtPoint; const tiefe: longint = -1): tExtPoint; begin if (length(vorgaenger)>0) and (tiefe<>0) then - result:=vorgaenger[0].transformiereKoordinaten(p,tiefe-1) + result:=beliebigerVorgaenger.transformiereKoordinaten(p,tiefe-1) else result:=p; result:=transformiereKoordinatenEinzeln(result); @@ -1872,7 +1898,7 @@ function tTransformation.transformiereKoordinatenInvers(const p: tExtPoint; cons begin result:=transformiereKoordinatenEinzelnInvers(p); if (length(vorgaenger)>0) and (tiefe<>0) then - result:=vorgaenger[0].transformiereKoordinaten(result,tiefe-1); + result:=beliebigerVorgaenger.transformiereKoordinaten(result,tiefe-1); end; function tTransformation.wertZuPositionAufAchse(const l: tLage; x: extended; auszerhalbIstFehler: boolean = true): extended; @@ -1880,15 +1906,15 @@ var c,d: char; p: tExtPoint; begin - if auszerhalbIstFehler then - testeAuszerhalb(l,x); - // das generische Verhalten ist c:=paralleleRichtung[l]; d:=senkrechteRichtung[l]; - // zuerst den Vorgänger nach der Position zu fragen - p[c]:=vorgaenger[0].wertZuPositionAufAchse(l,x,auszerhalbIstFehler); + // zuerst den Wert zu transformieren + x:=transformiereAchseEinzelnInvers(l,x,auszerhalbIstFehler); + + // dann den Vorgänger nach der Position zu fragen + p[c]:=beliebigerVorgaenger.wertZuPositionAufAchse(l,x,auszerhalbIstFehler); p[d]:=byte(l in [lRechts,lOben]); // in Koordinaten umzurechnen @@ -1900,7 +1926,6 @@ begin // und in Anteile zurückzurechnen result:=p[c]/(outXSTS[c]-1); - end; function tTransformation.positionAufAchseZuWert(const l: tLage; x: extended; auszerhalbIstFehler: boolean = true): extended; @@ -1926,10 +1951,11 @@ begin // und in Anteile zurückrechnen p[c]:=p[c]/(inXSTS[c]-1); - // und vom Vorgänger weiter berechnen lassen - result:=vorgaenger[0].positionAufAchseZuWert(l,p[c],auszerhalbIstFehler); - if auszerhalbIstFehler then - testeAuszerhalb(l,result); + // vom Vorgänger weiter berechnen lassen + result:=beliebigerVorgaenger.positionAufAchseZuWert(l,p[c],auszerhalbIstFehler); + + // und den Wert transformieren + result:=transformiereAchseEinzeln(l,result,auszerhalbIstFehler); end; function tTransformation.transformiereWertEinzeln(const x: extended): extended; @@ -1940,7 +1966,7 @@ end; function tTransformation.transformiereWert(const x: extended; const tiefe: longint = -1): extended; begin if (length(vorgaenger)>0) and (tiefe<>0) then - result:=vorgaenger[0].transformiereWert(x,tiefe-1) + result:=beliebigerVorgaenger.transformiereWert(x,tiefe-1) else result:=x; result:=transformiereWertEinzeln(result); @@ -1948,7 +1974,7 @@ end; function tTransformation.dumpParams: string; begin - result:=''; + result:=t2x2ExtendedToStr(inAchsen)+' -> '+t2x2ExtendedToStr(outAchsen); end; function tTransformation.dumpParams(tiefe: longint): string; @@ -2104,6 +2130,7 @@ begin result:='FFT: '; if horizontal then result:=result+'h'; if vertikal then result:=result+'v'; + result:=result + ' ' + inherited dumpParams; end; // tSpiegelungsTransformation ************************************************** @@ -2137,7 +2164,7 @@ end; function tSpiegelungsTransformation.dumpParams: string; begin - result:='horizontale Spiegelung'; + result:='horizontale Spiegelung ' + inherited dumpParams; end; // tKonkreteKoordinatenTransformation ****************************************** @@ -2340,6 +2367,7 @@ begin end; end; delete(result,1,2); + result:=result + ' ' + inherited dumpParams; end; function tKonkreteKoordinatenTransformation.zielausdehnung: t2x2Longint; @@ -2384,9 +2412,44 @@ end; constructor tLambdaZuOmegaTransformation.create(faktor: extended); begin inherited create; - horizontal:=false; - vertikal:=false; + _horizontal:=false; + _vertikal:=false; _faktor:=faktor; + aktualisiereAchsen; +end; + +function tLambdaZuOmegaTransformation.transformiereAchseEinzeln(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 + result:=_faktor/x + else + result:=x; +end; + +function tLambdaZuOmegaTransformation.transformiereAchseEinzelnInvers(const l: tLage; x: extended; auszerhalbIstFehler: boolean = true): extended; +begin + if ((l in [lOben,lUnten]) and horizontal) or // transformierte Achse? + ((l in [lLinks,lRechts]) and vertikal) then + result:=_faktor/x + else + result:=x; + if auszerhalbIstFehler then + testeAuszerhalb(l,x); +end; + +procedure tLambdaZuOmegaTransformation.wHorizontal(h: boolean); +begin + _horizontal:=h; + aktualisiereAlles; +end; + +procedure tLambdaZuOmegaTransformation.wVertikal(v: boolean); +begin + _vertikal:=v; + aktualisiereAlles; end; function tLambdaZuOmegaTransformation.verhaeltnisHorizontal: extended; @@ -2405,26 +2468,6 @@ begin result:=0; 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); // 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 - result:=_faktor/result; - if auszerhalbIstFehler then - testeAuszerhalb(l,result); -end; - procedure tLambdaZuOmegaTransformation.aktualisiereAchsen; var c: char; @@ -2454,16 +2497,16 @@ begin if horizontal then begin verh:=verhaeltnisHorizontal; result['x']:= - (1/(verh + p['x']/(inXSTS['x']-1)) - 1/verh) / - (1/(verh + 1) - 1/verh); + (inXSTS['x']-1-p['x'])/ + (p['x']/verh/(inXSTS['x']-1)+1); end else result['x']:=p['x']; if vertikal then begin verh:=verhaeltnisVertikal; result['y']:= - (1/(verh + p['y']/(inXSTS['y']-1)) - 1/verh) / - (1/(verh + 1) - 1/verh); + (inXSTS['y']-1-p['y'])/ + (p['y']/verh/(inXSTS['y']-1)+1); end else result['y']:=p['y']; @@ -2473,22 +2516,24 @@ function tLambdaZuOmegaTransformation.transformiereKoordinatenEinzelnInvers(cons var verh: extended; begin - if auszerhalbIstFehler then - testeAuszerhalb(p); if horizontal then begin verh:=verhaeltnisHorizontal; result['x']:= - p['x']*verh*(inXSTS['x']-1)/(verh+1-p['x']); + (inXSTS['x']-1-p['x'])/ + (p['x']/verh/(inXSTS['x']-1)+1); end else result['x']:=p['x']; if vertikal then begin verh:=verhaeltnisVertikal; result['y']:= - p['y']*verh*(inXSTS['y']-1)/(verh+1-p['y']); + (inXSTS['y']-1-p['y'])/ + (p['y']/verh/(inXSTS['y']-1)+1); end else result['y']:=p['y']; + if auszerhalbIstFehler then + testeAuszerhalb(p); end; function tLambdaZuOmegaTransformation.dumpParams: string; @@ -2500,6 +2545,7 @@ begin result:=result+' und vertikal'; startetMit(' und ',result); result:=result+' ('+floatToStr(_faktor)+')'; + result:=result + ' ' + inherited dumpParams; end; // tKoordinatenAusschnitt ****************************************************** @@ -2571,6 +2617,7 @@ end; function tKoordinatenAusschnitt.dumpParams: string; begin result:='Koordinatenausschnitt: '+intToStr(gr['x','x'])+'..'+intToStr(gr['x','y'])+' x '+intToStr(gr['y','x'])+'..'+intToStr(gr['y','y']); + result:=result + ' ' + inherited dumpParams; end; // tFitTransformation ********************************************************** @@ -2615,7 +2662,7 @@ begin if (l in [lOben,lUnten]) xor _senkrecht then result:=0 // keine Ausdehnung in dieser Richtung! else - result:=vorgaenger[0].wertZuPositionAufAchse(l,x,auszerhalbIstFehler); + result:=beliebigerVorgaenger.wertZuPositionAufAchse(l,x,auszerhalbIstFehler); end; function tFitTransformation.positionAufAchseZuWert(const l: tLage; x: extended; auszerhalbIstFehler: boolean = true): extended; @@ -2623,7 +2670,7 @@ begin if (l in [lOben,lUnten]) xor _senkrecht then fehler('Eine fit-Transformation hat keine Ausdehnung in dieser Richtung!') else - result:=vorgaenger[0].positionAufAchseZuWert(l,x,auszerhalbIstFehler); + result:=beliebigerVorgaenger.positionAufAchseZuWert(l,x,auszerhalbIstFehler); if auszerhalbIstFehler then testeAuszerhalb(l,result); end; @@ -2635,7 +2682,7 @@ begin result:=result+'vertik' else result:=result+'horizont'; - result:=result+'al'; + result:=result+'al ' + inherited dumpParams; end; // tAgglomeration ************************************************************** @@ -2774,7 +2821,7 @@ begin result:=result+'horizont' else result:=result+'vertik'; - result:=result+'al um '+floatToStr(schritt)+' versetzt'; + result:=result+'al um '+floatToStr(schritt)+' versetzt ' + inherited dumpParams; end; // tDiagonaleAgglomeration ***************************************************** @@ -2795,12 +2842,12 @@ end; procedure tDiagonaleAgglomeration.holeInfosVonVorgaengern; begin if length(vorgaenger)=0 then exit; - inAchsen:=vorgaenger[0].achsen; + inAchsen:=beliebigerVorgaenger.achsen; if length(vorgaenger)>1 then fehler('Diagonale Agglomeration kann nur einen Vorgänger haben!'); - inXSTS:=vorgaenger[0].xStepsTSiz; - inWMia:=vorgaenger[0].wMia; - inPMia:=vorgaenger[0].pMia; + inXSTS:=beliebigerVorgaenger.xStepsTSiz; + inWMia:=beliebigerVorgaenger.wMia; + inPMia:=beliebigerVorgaenger.pMia; end; procedure tDiagonaleAgglomeration.aktualisiereXsTs; @@ -2823,9 +2870,9 @@ end; function tDiagonaleAgglomeration.wertZuPositionAufAchse(const l: tLage; x: extended; auszerhalbIstFehler: boolean = true): extended; begin if (datenRichtung='x') xor (l in [lOben,lUnten]) then - result:=vorgaenger[0].wertZuPositionAufAchse(dreheLagePositiv(l),x,auszerhalbIstFehler) + result:=beliebigerVorgaenger.wertZuPositionAufAchse(dreheLagePositiv(l),x,auszerhalbIstFehler) else - result:=vorgaenger[0].wertZuPositionAufAchse(l,x,auszerhalbIstFehler); + result:=beliebigerVorgaenger.wertZuPositionAufAchse(l,x,auszerhalbIstFehler); end; function tDiagonaleAgglomeration.positionAufAchseZuWert(const l: tLage; x: extended; auszerhalbIstFehler: boolean = true): extended; @@ -2838,7 +2885,7 @@ end; function tDiagonaleAgglomeration.dumpParams: string; begin - result:='diagonale Agglomeration'; + result:='diagonale Agglomeration ' + inherited dumpParams; end; // tWerteKnickTransformation *************************************************** @@ -2878,6 +2925,7 @@ begin result:='Knick:'; for i:=0 to length(parameter) div 2 - 1 do result:=result + ' (' + floatToStr(parameter[2*i])+';'+floatToStr(parameter[2*i+1])+')'; + result:=result + ' ' + inherited dumpParams; end; // tWerteLogTransformation ***************************************************** @@ -2895,7 +2943,7 @@ end; function tWerteLogTransformation.dumpParams: string; begin - result:='Logarithmus: '+floatToStr(logMin); + result:='Logarithmus: '+floatToStr(logMin)+' ' + inherited dumpParams; end; // tWerteLogAbsTransformation ************************************************** @@ -2913,7 +2961,7 @@ end; function tWerteLogAbsTransformation.dumpParams: string; begin - result:='Betragslogarithmus: '+floatToStr(logSkala); + result:='Betragslogarithmus: '+floatToStr(logSkala) + ' ' + inherited dumpParams; end; // tWerteAbsTransformation ***************************************************** @@ -2930,7 +2978,7 @@ end; function tWerteAbsTransformation.dumpParams: string; begin - result:='Betrag'; + result:='Betrag ' + inherited dumpParams; end; function liesTWerteTransformationen(sT: boolean; s: string; f: tMyStringList; etf: tExprToFloat; var tr: tTransformation): boolean; |