summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--epost.lpr19
-rw-r--r--epost.lps142
-rw-r--r--epostunit.pas125
-rw-r--r--typenunit.pas82
-rw-r--r--werteunit.inc36
-rw-r--r--werteunit.pas12
6 files changed, 345 insertions, 71 deletions
diff --git a/epost.lpr b/epost.lpr
index aafa087..718eb2c 100644
--- a/epost.lpr
+++ b/epost.lpr
@@ -171,6 +171,25 @@ begin
wertes[j].kopiereVon(syntaxTest,wertes[i]);
continue;
end;
+ if istDasBefehl('Radon-Transformation',s,bekannteBefehle,true) then begin
+ i:=findeWerte(erstesArgument(s),nil,@wertes,@konturen,false);
+ if i<0 then begin
+ aufraeumen;
+ halt(1);
+ end;
+ if not startetMit('zu ',s) then begin
+ gibAus('Fehlende Parameter, erwartet: ''Radon $Quelle zu $Ziel''',3);
+ aufraeumen;
+ halt(1);
+ end;
+ j:=findeWerte(s,inf,@wertes,@konturen,true);
+ if j<0 then begin
+ aufraeumen;
+ halt(1);
+ end;
+ wertes[j].berechneRadonTransformation(syntaxTest,inf,maxThreads,wertes[i]);
+ continue;
+ end;
if istDasBefehl('erzeuge Dummy-Werte',s,bekannteBefehle,true) then begin
b1:=startetMit('gefüllt',s);
i:=findeWerte(s,inf,@wertes,@konturen,true);
diff --git a/epost.lps b/epost.lps
index 944324a..d1ea066 100644
--- a/epost.lps
+++ b/epost.lps
@@ -7,8 +7,8 @@
<Unit0>
<Filename Value="epost.lpr"/>
<IsPartOfProject Value="True"/>
- <TopLine Value="85"/>
- <CursorPos Y="134"/>
+ <TopLine Value="172"/>
+ <CursorPos X="66" Y="190"/>
<UsageCount Value="202"/>
<Loaded Value="True"/>
</Unit0>
@@ -23,28 +23,29 @@
<Filename Value="epostunit.pas"/>
<IsPartOfProject Value="True"/>
<EditorIndex Value="1"/>
- <TopLine Value="1355"/>
- <CursorPos X="60" Y="1370"/>
+ <TopLine Value="8637"/>
+ <CursorPos X="97" Y="8658"/>
<UsageCount Value="201"/>
<Loaded Value="True"/>
</Unit2>
<Unit3>
<Filename Value="werteunit.pas"/>
<IsPartOfProject Value="True"/>
- <IsVisibleTab Value="True"/>
<EditorIndex Value="9"/>
- <TopLine Value="629"/>
- <CursorPos Y="646"/>
- <FoldState Value=" T3k80{D4L1Y"/>
+ <TopLine Value="322"/>
+ <CursorPos Y="899"/>
+ <FoldState Value=" T3kB0{D4L2 ppMu90R2n"/>
<UsageCount Value="200"/>
<Loaded Value="True"/>
</Unit3>
<Unit4>
<Filename Value="typenunit.pas"/>
<IsPartOfProject Value="True"/>
+ <IsVisibleTab Value="True"/>
<EditorIndex Value="12"/>
- <TopLine Value="767"/>
- <CursorPos Y="853"/>
+ <TopLine Value="2367"/>
+ <CursorPos X="50" Y="2396"/>
+ <FoldState Value=" T3w00IE piak403B pjIk80O7]IZjY099[R4jM09F[95c0PC[R4k607C]j1]IA2]9Ljd066[s5C06F[95U0AC[95S0JA]a6k40WC[{R5G0I377[K4mb0M3]9Jk60K]Tj8kF]l]cYjY[{u6bja0AB pjEk9035[{u5A04B[{B5O049]RBjd042 pj5jF0K2F"/>
<UsageCount Value="200"/>
<Loaded Value="True"/>
</Unit4>
@@ -78,9 +79,9 @@
<Filename Value="werteunit.inc"/>
<IsPartOfProject Value="True"/>
<EditorIndex Value="10"/>
- <TopLine Value="142"/>
- <CursorPos X="17" Y="170"/>
- <UsageCount Value="156"/>
+ <TopLine Value="172"/>
+ <CursorPos X="21" Y="183"/>
+ <UsageCount Value="159"/>
<Loaded Value="True"/>
</Unit8>
<Unit9>
@@ -94,7 +95,7 @@
<EditorIndex Value="8"/>
<TopLine Value="515"/>
<CursorPos X="21" Y="543"/>
- <UsageCount Value="76"/>
+ <UsageCount Value="78"/>
<Loaded Value="True"/>
</Unit10>
<Unit11>
@@ -118,7 +119,7 @@
<EditorIndex Value="2"/>
<TopLine Value="238"/>
<CursorPos X="33" Y="202"/>
- <UsageCount Value="90"/>
+ <UsageCount Value="92"/>
<Loaded Value="True"/>
</Unit13>
<Unit14>
@@ -189,129 +190,128 @@
<EditorIndex Value="6"/>
<TopLine Value="87"/>
<CursorPos X="3" Y="18"/>
- <UsageCount Value="25"/>
+ <UsageCount Value="27"/>
<Loaded Value="True"/>
</Unit23>
</Units>
<JumpHistory Count="30" HistoryIndex="29">
<Position1>
- <Filename Value="typenunit.pas"/>
- <Caret Line="100" Column="55" TopLine="82"/>
+ <Filename Value="werteunit.inc"/>
+ <Caret Line="174" Column="3" TopLine="154"/>
</Position1>
<Position2>
- <Filename Value="typenunit.pas"/>
- <Caret Line="29" Column="28" TopLine="11"/>
+ <Filename Value="epostunit.pas"/>
+ <Caret Line="8646" Column="39" TopLine="8634"/>
</Position2>
<Position3>
- <Filename Value="typenunit.pas"/>
- <Caret Line="36" Column="58" TopLine="11"/>
+ <Filename Value="epostunit.pas"/>
+ <Caret Line="8651" Column="82" TopLine="8633"/>
</Position3>
<Position4>
- <Filename Value="typenunit.pas"/>
- <Caret Line="44" Column="63" TopLine="15"/>
+ <Filename Value="epostunit.pas"/>
+ <Caret Line="8655" Column="72" TopLine="8635"/>
</Position4>
<Position5>
- <Filename Value="typenunit.pas"/>
- <Caret Line="45" Column="58" TopLine="16"/>
+ <Filename Value="epostunit.pas"/>
+ <Caret Line="8669" Column="15" TopLine="8643"/>
</Position5>
<Position6>
- <Filename Value="typenunit.pas"/>
- <Caret Line="49" Column="62" TopLine="20"/>
+ <Filename Value="epostunit.pas"/>
+ <Caret Line="472" TopLine="455"/>
</Position6>
<Position7>
- <Filename Value="typenunit.pas"/>
- <Caret Line="50" Column="58" TopLine="21"/>
+ <Filename Value="epost.lpr"/>
+ <Caret Line="190" Column="60" TopLine="172"/>
</Position7>
<Position8>
- <Filename Value="typenunit.pas"/>
- <Caret Line="54" Column="58" TopLine="25"/>
+ <Filename Value="werteunit.inc"/>
+ <Caret Line="180" Column="7" TopLine="154"/>
</Position8>
<Position9>
- <Filename Value="typenunit.pas"/>
- <Caret Line="56" Column="58" TopLine="27"/>
+ <Filename Value="werteunit.inc"/>
+ <Caret Line="179" Column="29" TopLine="161"/>
</Position9>
<Position10>
- <Filename Value="typenunit.pas"/>
- <Caret Line="60" Column="59" TopLine="31"/>
+ <Filename Value="werteunit.inc"/>
+ <Caret Line="199" Column="56" TopLine="167"/>
</Position10>
<Position11>
<Filename Value="typenunit.pas"/>
- <Caret Line="129" Column="47" TopLine="128"/>
+ <Caret Line="2390" TopLine="2364"/>
</Position11>
<Position12>
- <Filename Value="typenunit.pas"/>
- <Caret Line="128" Column="26" TopLine="112"/>
+ <Filename Value="epostunit.pas"/>
+ <Caret Line="583" Column="65" TopLine="560"/>
</Position12>
<Position13>
- <Filename Value="typenunit.pas"/>
- <Caret Line="178" Column="24" TopLine="150"/>
+ <Filename Value="epostunit.pas"/>
+ <Caret Line="8650" Column="40" TopLine="8621"/>
</Position13>
<Position14>
- <Filename Value="typenunit.pas"/>
- <Caret Line="1167" Column="35" TopLine="1097"/>
+ <Filename Value="epostunit.pas"/>
</Position14>
<Position15>
- <Filename Value="typenunit.pas"/>
- <Caret Line="1162" Column="15" TopLine="1031"/>
+ <Filename Value="epostunit.pas"/>
+ <Caret Line="8639" Column="20" TopLine="8621"/>
</Position15>
<Position16>
- <Filename Value="typenunit.pas"/>
- <Caret Line="110" Column="34" TopLine="93"/>
+ <Filename Value="epostunit.pas"/>
+ <Caret Line="468" Column="30" TopLine="450"/>
</Position16>
<Position17>
- <Filename Value="typenunit.pas"/>
- <Caret Line="1161" TopLine="1139"/>
+ <Filename Value="epostunit.pas"/>
+ <Caret Line="5433" Column="49" TopLine="5416"/>
</Position17>
<Position18>
- <Filename Value="typenunit.pas"/>
- <Caret Line="1154" Column="14" TopLine="1062"/>
+ <Filename Value="epostunit.pas"/>
+ <Caret Line="468" Column="30" TopLine="450"/>
</Position18>
<Position19>
- <Filename Value="typenunit.pas"/>
+ <Filename Value="epostunit.pas"/>
+ <Caret Line="5393" Column="78" TopLine="5364"/>
</Position19>
<Position20>
- <Filename Value="typenunit.pas"/>
- <Caret Line="110" Column="16" TopLine="81"/>
+ <Filename Value="epostunit.pas"/>
+ <Caret Line="5433" Column="66" TopLine="5405"/>
</Position20>
<Position21>
- <Filename Value="typenunit.pas"/>
- <Caret Line="176" Column="23" TopLine="148"/>
+ <Filename Value="epostunit.pas"/>
+ <Caret Line="8630" Column="49" TopLine="8618"/>
</Position21>
<Position22>
- <Filename Value="typenunit.pas"/>
- <Caret Line="996" Column="3" TopLine="961"/>
+ <Filename Value="epostunit.pas"/>
</Position22>
<Position23>
- <Filename Value="typenunit.pas"/>
- <Caret Line="1011" Column="3" TopLine="961"/>
+ <Filename Value="epostunit.pas"/>
+ <Caret Line="468" Column="30" TopLine="439"/>
</Position23>
<Position24>
- <Filename Value="typenunit.pas"/>
- <Caret Line="1171" Column="5" TopLine="1034"/>
+ <Filename Value="epostunit.pas"/>
+ <Caret Line="5393" Column="78" TopLine="5097"/>
</Position24>
<Position25>
- <Filename Value="typenunit.pas"/>
- <Caret Line="129" Column="25" TopLine="121"/>
+ <Filename Value="epostunit.pas"/>
+ <Caret Line="5445" Column="91" TopLine="5420"/>
</Position25>
<Position26>
- <Filename Value="typenunit.pas"/>
- <Caret Line="189" Column="23" TopLine="161"/>
+ <Filename Value="epostunit.pas"/>
+ <Caret Line="8626" Column="31" TopLine="8597"/>
</Position26>
<Position27>
- <Filename Value="epostunit.pas"/>
- <Caret Line="1370" Column="60" TopLine="1355"/>
+ <Filename Value="typenunit.pas"/>
+ <Caret Line="432" Column="86" TopLine="422"/>
</Position27>
<Position28>
<Filename Value="typenunit.pas"/>
- <Caret Line="190" Column="14" TopLine="175"/>
+ <Caret Line="2335" Column="21" TopLine="2220"/>
</Position28>
<Position29>
<Filename Value="typenunit.pas"/>
- <Caret Line="130" Column="30" TopLine="113"/>
+ <Caret Line="2336" Column="26" TopLine="2221"/>
</Position29>
<Position30>
<Filename Value="typenunit.pas"/>
- <Caret Line="192" Column="28" TopLine="164"/>
+ <Caret Line="2350" Column="25" TopLine="2349"/>
</Position30>
</JumpHistory>
</ProjectSession>
diff --git a/epostunit.pas b/epostunit.pas
index 660a6de..0afa38c 100644
--- a/epostunit.pas
+++ b/epostunit.pas
@@ -177,6 +177,7 @@ type
function berechneIntegral(sT: boolean; f: tMyStringList; threads: longint; quelle: tWerte): boolean;
function berechneFFT(sT: boolean; f: tMyStringList; threads: longint; warn: tWarnStufe): boolean;
function berechneFFT2d(sT: boolean; f: tMyStringList; threads: longint; warn: tWarnStufe): boolean;
+ function berechneRadonTransformation(sT: boolean; f: tMyStringList; threads: longint; quelle: tWerte): boolean;
function erzeugeLinearesBild(sT: boolean; var f: tMyStringList; threads: longint): boolean;
function erzeugeAscii(sT: boolean; f: tMyStringList): boolean;
function erzeugeLineout(sT: boolean; f: tMyStringList): boolean;
@@ -464,6 +465,12 @@ type
destructor destroy; override;
procedure stExecute; override;
end;
+ tRadonTransformationsThread = class(tLogThread)
+ qu,zi: tWerte;
+ xMi,xMa: longint;
+ constructor create(quelle,ziel: tWerte; xMin,xMax: longint);
+ procedure stExecute; override;
+ end;
function neuePalette(f: tMyStringList): boolean;
function initBmpHeader(w,h: longint): tBmpHeader;
@@ -5375,6 +5382,72 @@ begin
result:=true;
end;
+function tWerte.berechneRadonTransformation(sT: boolean; f: tMyStringList; threads: longint; quelle: tWerte): boolean;
+var
+ Zeit: extended;
+ winkelSchritte,verschiebungsSchritte: int64;
+ s: string;
+ bekannteBefehle: tMyStringList;
+ i: longint;
+ fertig: boolean;
+ radonTransformationsThreads: array of tRadonTransformationsThread;
+begin
+ result:=false;
+ warteAufBeendigungDesLeseThreads;
+ Zeit:=now;
+ winkelSchritte:=180;
+ verschiebungsSchritte:=180;
+ bekannteBefehle:=tMyStringList.create;
+ repeat
+ if not f.metaReadln(s,true) then begin
+ gibAus('Unerwartetes Dateiende!',3);
+ bekannteBefehle.free;
+ exit;
+ end;
+ bekannteBefehle.clear;
+ if istDasBefehl('Ende',s,bekannteBefehle,false) then break;
+ if istDasBefehl('Winkelschritte:',s,bekannteBefehle,true) then begin
+ winkelSchritte:=round(exprToFloat(sT,s));
+ continue;
+ end;
+ if istDasBefehl('Verschiebungsschritte:',s,bekannteBefehle,true) then begin
+ verschiebungsSchritte:=round(exprToFloat(sT,s));
+ continue;
+ end;
+ bekannteBefehle.sort;
+ gibAus('Verstehe Option '''+s+''' nicht bei Erstellung einer Radon-Transformation!'#10'Ich kenne:'#10+bekannteBefehle.text,3);
+ bekannteBefehle.free;
+ exit;
+ until false;
+ bekannteBefehle.free;
+
+ _xSteps:=winkelSchritte;
+ _tSiz:=verschiebungsSchritte;
+ transformationen:=tRTTransformation.create(quelle.transformationen,winkelSchritte,verschiebungsSchritte);
+
+ if not sT then begin
+ holeRAM(0);
+ gibAus('berechne Radon-Transformation ...',3);
+ setLength(radonTransformationsThreads,threads);
+ for i:=0 to length(radonTransformationsThreads)-1 do
+ radonTransformationsThreads[i]:=tRadonTransformationsThread.create(
+ quelle,
+ self,
+ round(_xSteps/length(radonTransformationsThreads)*i),
+ round(_xSteps/length(radonTransformationsThreads)*(i+1))-1
+ );
+ repeat
+ fertig:=true;
+ for i:=0 to length(radonTransformationsThreads)-1 do
+ fertig:=radonTransformationsThreads[i].fertig and fertig;
+ if not fertig then
+ sleep(10);
+ until fertig;
+ gibAus('... fertig! '+timetostr(now-Zeit),3);
+ end;
+ result:=true;
+end;
+
function tWerte.erzeugeLinearesBild(sT: boolean; var f: tMyStringList; threads: longint): boolean;
var
s,datei: string;
@@ -8550,6 +8623,58 @@ begin
gibAus('SkalierungsThread beendet',1);
end;
+// tRadonTransformationsThread *************************************************
+
+constructor tRadonTransformationsThread.create(quelle,ziel: tWerte; xMin,xMax: longint);
+begin
+ inherited create;
+ qu:=quelle;
+ zi:=ziel;
+ xMi:=xMin;
+ xMa:=xMax;
+ suspended:=false;
+ gibAus('RadonTransformationsThread erzeugt: '+intToStr(xMi)+'-'+intToStr(xMa),1);
+end;
+
+procedure tRadonTransformationsThread.stExecute;
+var
+ dx,dy: extended;
+begin
+ gibAus('RadonTransformationsThread gestartet',1);
+ dx:=(zi._xStop-zi._xStart)/(zi._xSteps-1);
+ dy:=(zi._tStop-zi._tStart)/(zi._tSiz-1);
+ case zi.genauigkeit of
+ gSingle:
+ case qu.genauigkeit of
+ gSingle:
+ zi.sWerte.radonTransformation(xMi,xMa,dx,dy,pTLLWerteSingle(@qu.sWerte));
+ gDouble:
+ zi.sWerte.radonTransformation(xMi,xMa,dx,dy,pTLLWerteDouble(@qu.dWerte));
+ gExtended:
+ zi.sWerte.radonTransformation(xMi,xMa,dx,dy,pTLLWerteExtended(@qu.eWerte));
+ end{of case};
+ gDouble:
+ case qu.genauigkeit of
+ gSingle:
+ zi.dWerte.radonTransformation(xMi,xMa,dx,dy,pTLLWerteSingle(@qu.sWerte));
+ gDouble:
+ zi.dWerte.radonTransformation(xMi,xMa,dx,dy,pTLLWerteDouble(@qu.dWerte));
+ gExtended:
+ zi.dWerte.radonTransformation(xMi,xMa,dx,dy,pTLLWerteExtended(@qu.eWerte));
+ end{of case};
+ gExtended:
+ case qu.genauigkeit of
+ gSingle:
+ zi.eWerte.radonTransformation(xMi,xMa,dx,dy,pTLLWerteSingle(@qu.sWerte));
+ gDouble:
+ zi.eWerte.radonTransformation(xMi,xMa,dx,dy,pTLLWerteDouble(@qu.dWerte));
+ gExtended:
+ zi.eWerte.radonTransformation(xMi,xMa,dx,dy,pTLLWerteExtended(@qu.eWerte));
+ end{of case};
+ end{of case};
+ gibAus('RadonTransformationsThread beendet',1);
+end;
+
// sonstiges *******************************************************************
function findePalette(out palette: tPalette; name: string): boolean;
diff --git a/typenunit.pas b/typenunit.pas
index 8c04e7a..faddb6f 100644
--- a/typenunit.pas
+++ b/typenunit.pas
@@ -431,6 +431,18 @@ type
function positionAufAchseZuWert(const l: tLage; x: extended; auszerhalbIstFehler: boolean = true): extended; override;
function dumpParams: string; override;
end;
+ tRTTransformation = class (tKoordinatenTransformation)
+ // repräsentiert die Transformation der Koordinaten bei einer Radontransformation
+ winkelSchritte, verschiebeSchritte: int64;
+ constructor create; overload;
+ constructor create(vorg: tTransformation; ws,vs: int64);
+ procedure aktualisiereAchsen; override;
+ procedure aktualisiereXsTs; override;
+ // keine Änderung der Positionen, der Werte(skalierung)
+ function wertZuPositionAufAchse(const l: tLage; x: extended; auszerhalbIstFehler: boolean = true): extended; override;
+ function positionAufAchseZuWert(const l: tLage; x: extended; auszerhalbIstFehler: boolean = true): extended; override;
+ function dumpParams: string; override;
+ end;
tSpiegelungsTransformation = class (tKoordinatenTransformation)
// repräsentiert die horizontale Spiegelung der Koordinaten
constructor create;
@@ -2315,6 +2327,76 @@ begin
result:=result + ' ' + inherited dumpParams;
end;
+// tRTTransformation ***********************************************************
+
+constructor tRTTransformation.create;
+begin
+ inherited create;
+ winkelSchritte:=180;
+ verschiebeSchritte:=180;
+end;
+
+constructor tRTTransformation.create(vorg: tTransformation; ws,vs: int64);
+begin
+ inherited create;
+ winkelSchritte:=ws;
+ verschiebeSchritte:=vs;
+ fuegeVorgaengerHinzu(vorg);
+end;
+
+procedure tRTTransformation.aktualisiereAchsen;
+begin
+ outAchsen['x','x']:=0; // Winkel-Start
+ outAchsen['x','y']:=pi*(1-1/winkelSchritte); // Winkel-Stop
+ outAchsen['y','x']:=sqrt(sqr(inAchsen['x','y']-inAchsen['x','x']) + sqr(inAchsen['y','y']-inAchsen['y','x']))/2; // Verschiebe-Start
+ outAchsen['y','y']:=-outAchsen['y','x']; // Verschiebe-Stop
+end;
+
+procedure tRTTransformation.aktualisiereXsTs;
+begin
+ outXSTS['x']:=winkelSchritte;
+ outXSTS['y']:=verschiebeSchritte;
+end;
+
+function tRTTransformation.wertZuPositionAufAchse(const l: tLage; x: extended; auszerhalbIstFehler: boolean = true): extended;
+var
+ c: char;
+begin
+ if auszerhalbIstFehler then
+ testeAuszerhalb(false,false,l,x);
+ // egal, wie die Werte vor der RT aussahen, wir setzen sie danach linear
+ c:=paralleleRichtung[l];
+ if x=outAchsen[c,'x'] then
+ result:=0
+ else
+ result:=(x-outAchsen[c,'x'])/(outAchsen[c,'y']-outAchsen[c,'x']);
+ result:=result*(1-1/outXSTS[c]);
+ if auszerhalbIstFehler then
+ testeAuszerhalb(false,true,l,result);
+end;
+
+function tRTTransformation.positionAufAchseZuWert(const l: tLage; x: extended; auszerhalbIstFehler: boolean = true): extended;
+var
+ c: char;
+begin
+ if auszerhalbIstFehler then
+ testeAuszerhalb(false,true,l,x);
+ // egal, wie die Werte vor der RT aussahen, wir setzen sie danach linear
+ 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(false,false,l,result);
+end;
+
+function tRTTransformation.dumpParams: string;
+begin
+ result:='RT: '+intToStr(winkelSchritte)+' x '+intToStr(verschiebeSchritte);
+ result:=result + ' ' + inherited dumpParams;
+end;
+
// tSpiegelungsTransformation **************************************************
constructor tSpiegelungsTransformation.create;
diff --git a/werteunit.inc b/werteunit.inc
index c7182a9..704e1bc 100644
--- a/werteunit.inc
+++ b/werteunit.inc
@@ -170,6 +170,42 @@ begin
end;
{$ENDIF}
+{$IFDEF tLLWerte_radonTransformation}
+//procedure tLLWerte.radonTransformation(xMin,xMax: longint; xStep,yStep: extended; qu: pTLLWerteSingle);
+var
+ oX,oY,iX,iY: longint;
+ oYf,cX,sX,iXM,iYM,oYM,wert: extended;
+begin
+ iXM:=(qu^.params.xSteps-1)/2;
+ iYM:=(qu^.params.tSiz-1)/2;
+ oYM:=(params.tSiz-1)/2;
+ for oX:=xMin to xMax do begin
+ cX:=cos(oX*xStep);
+ sX:=sin(oX*xStep);
+ for oY:=0 to params.tSiz-1 do
+ werte[oX+oY*params.xSteps]:=0;
+ for iY:=0 to qu^.params.tSiz-1 do
+ for iX:=0 to qu^.params.xSteps-1 do begin
+ oYf:=((iX-iXM)*sX + (iY-iYM)*cX) / yStep + oYM;
+ wert:=qu^.werte[iX + iY*qu^.params.xSteps];
+ if oYf<=0 then
+ werte[oX]:=
+ werte[oX] + wert
+ else if oYf >= params.tSiz-1 then
+ werte[oX + (params.tSiz-1)*params.xSteps]:=
+ werte[oX + (params.tSiz-1)*params.xSteps] + wert
+ else begin
+ oY:=floor(oYf);
+ werte[oX + oY*params.xSteps]:=
+ werte[oX + oY*params.xSteps] + wert * (1-oYf+oY);
+ werte[oX + (oY+1)*params.xSteps]:=
+ werte[oX + (oY+1)*params.xSteps] + wert * (oYf-oY);
+ end;
+ end;
+ end;
+end;
+{$ENDIF}
+
{$IFDEF tLLWerte_integriere}
//procedure tLLWerte.integriereSingle(qu: pTLLWerteSingle; xMi,xMa,tMi,tMa,xOf,tOf: longint; richtung: tIntegrationsRichtung);
var
diff --git a/werteunit.pas b/werteunit.pas
index f11c717..7b7385f 100644
--- a/werteunit.pas
+++ b/werteunit.pas
@@ -54,6 +54,9 @@ type
function liesDateien(dateien: tGenerischeInputDateiInfoArray): boolean;
function fft(senkrecht,invers: boolean; algo: tFFTAlgorithmus; fen: tFenster; hg: tExtendedArray; out pvFehler: extended): boolean; overload; inline;
function fft(sMin,sMax: longint; senkrecht,invers: boolean; algo: tFFTAlgorithmus; fen: tFenster; hg: tExtendedArray; out pvFehler: extended): boolean; overload;
+ procedure radonTransformation(xMin,xMax: longint; xStep,yStep: extended; qu: pTLLWerteSingle); overload;
+ procedure radonTransformation(xMin,xMax: longint; xStep,yStep: extended; qu: pTLLWerteDouble); overload;
+ procedure radonTransformation(xMin,xMax: longint; xStep,yStep: extended; qu: pTLLWerteExtended); overload;
procedure spiegle; overload;
procedure spiegle(tMin,tMax: longint); overload;
procedure fft2dNachbearbeitungA(nB: tFFTDatenordnung);
@@ -891,6 +894,15 @@ begin
result:=not (in0 or out0);
end;
+{$DEFINE tLLWerte_radonTransformation}
+procedure tLLWerte.radonTransformation(xMin,xMax: longint; xStep,yStep: extended; qu: pTLLWerteSingle);
+{$INCLUDE werteunit.inc}
+procedure tLLWerte.radonTransformation(xMin,xMax: longint; xStep,yStep: extended; qu: pTLLWerteDouble);
+{$INCLUDE werteunit.inc}
+procedure tLLWerte.radonTransformation(xMin,xMax: longint; xStep,yStep: extended; qu: pTLLWerteExtended);
+{$INCLUDE werteunit.inc}
+{$UNDEF tLLWerte_radonTransformation}
+
procedure tLLWerte.schreibeWert(var f: textfile; x,y: longint; beschriftung: tExtPoint; var letzterWert: extended; entspringen,verschiebung: extended; skalierung: string; kvs: tKnownValues; cbgv: tCallBackGetValue);
var
tmp: extended;