summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--epost.lps143
-rw-r--r--lambdaZuOmega.nb186
-rw-r--r--typenunit.pas176
3 files changed, 369 insertions, 136 deletions
diff --git a/epost.lps b/epost.lps
index fc1fc07..f2ab84e 100644
--- a/epost.lps
+++ b/epost.lps
@@ -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;