summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorErich Eckner <git@eckner.net>2018-05-24 11:00:45 +0200
committerErich Eckner <git@eckner.net>2018-05-24 11:00:45 +0200
commit07cacf5918f0b9489a0b066285847e8be84a77e9 (patch)
tree6a1959788d3858eb4237fc6608bed932337c8eb3
parent9383d6629dc5db8490984a870da1c5be6b8e58ea (diff)
downloadepost-07cacf5918f0b9489a0b066285847e8be84a77e9.tar.xz
Kontur kann nun auch aus Gerade erzeugt werden
-rw-r--r--epostunit.pas116
1 files changed, 101 insertions, 15 deletions
diff --git a/epostunit.pas b/epostunit.pas
index 700ab5c..0acf74f 100644
--- a/epostunit.pas
+++ b/epostunit.pas
@@ -77,6 +77,7 @@ type
function liesVonDatei(sT: boolean; s: string; xMi,xMa,tMi,tMa: extended): boolean;
function erzeugeAusWerten(sT: boolean; s: string; w: pTWerteArray; mT: longint; _xmin,_xmax,_tmin,_tmax: string): boolean;
function erzeugeAusFunktion(sT: boolean; s: string; xMi,xMa,tMi,tMa,dX,dT: extended; mT: longint): boolean;
+ procedure erzeugeAlsGerade(sT: boolean; von,bis: tExtPoint; dX,dT: extended);
property xMin: extended read rxmin;
property xMax: extended read rxmax;
property tMin: extended read rtmin;
@@ -195,6 +196,8 @@ type
function paramsDump: string;
function knownValues: tKnownValues;
procedure beendeLeseThreadWennFertig;
+ function diskRand: tGeradenArray;
+ function kontRand: tGeradenArray;
property transformationen: tTransformation read rTransformationen write wTransformationen;
property _xSteps: longint read rXSteps write wXSteps;
property _tSiz: longint read rTSiz write wTSiz;
@@ -6052,7 +6055,6 @@ var
i,schritte: longint;
integriere,iWaag: boolean;
tmpValues: tKnownValues;
- rand: array[0..3] of tGerade;
begin
result:=false;
warteAufBeendigungDesLeseThreads;
@@ -6064,18 +6066,6 @@ begin
ab['x']:=extPoint(0,0);
ab['y']:=extPoint(_xSteps-1,_tSiz-1);
- for i:=0 to 3 do
- rand[i]:=
- gerade(
- extPoint(
- byte(i in [1,2])*(_xSteps-1),
- byte(i in [2,3])*(_tSiz-1)
- ),
- extPoint(
- byte(odd(i+1)),
- byte(odd(i))
- )
- );
skalierung:='1';
verschiebung:=0;
@@ -6144,7 +6134,7 @@ begin
tmpPoint,
extPoint(-cos(tmp),-sin(tmp))
),
- rand
+ diskRand
);
ab['y']:=
naechsterSchnittpunkt(
@@ -6152,7 +6142,7 @@ begin
tmpPoint,
extPoint(cos(tmp),sin(tmp))
),
- rand
+ diskRand
);
continue;
end;
@@ -6711,6 +6701,46 @@ begin
end;
end;
+function tWerte.kontRand: tGeradenArray;
+var
+ i: longint;
+begin
+ setLength(result,4);
+ for i:=0 to 3 do
+ result[i]:=
+ gerade(
+ extPoint(
+ byte(i in [1,2])*_xStop +
+ byte(i in [0,3])*_xStart,
+ byte(i in [2,3])*_tStop +
+ byte(i in [0,1])*_tStart
+ ),
+ extPoint(
+ byte(odd(i+1)),
+ byte(odd(i))
+ )
+ );
+end;
+
+function tWerte.diskRand: tGeradenArray;
+var
+ i: longint;
+begin
+ setLength(result,4);
+ for i:=0 to 3 do
+ result[i]:=
+ gerade(
+ extPoint(
+ byte(i in [1,2])*(_xSteps-1),
+ byte(i in [2,3])*(_tSiz-1)
+ ),
+ extPoint(
+ byte(odd(i+1)),
+ byte(odd(i))
+ )
+ );
+end;
+
// tZuZeichnendeKontur *********************************************************
constructor tZuZeichnendeKontur.create;
@@ -7561,6 +7591,8 @@ function tKontur.init(sT: boolean; f: tMyStringList; w: pTWerteArray; mT: longin
var
s,xMi,xMa,tMi,tMa,dX,dT: string;
i,j,k: longint;
+ tmp: extended;
+ tmpPoint: tExtPoint;
bekannteBefehle: tMyStringList;
begin
result:=false;
@@ -7686,6 +7718,39 @@ begin
end;
continue;
end;
+ if istDasBefehl('Werte, Aufpunkt und Richtung:',s,bekannteBefehle,true) then begin
+ i:=findeWerte(erstesArgument(s,','),nil,w,nil,false);
+ if i<0 then
+ exit;
+ tmp:=w^[i].exprToFloat(sT,erstesArgument(s,','));
+ tmpPoint:=extPoint(tmp,w^[i].exprToFloat(sT,erstesArgument(s,',')));
+ if sT then
+ tmpPoint:=extPoint(
+ (w^[i]._xStop+w^[i]._xStart)/2,
+ (w^[i]._tStop+w^[i]._tStart)/2
+ );
+ tmp:=w^[i].exprToFloat(sT,s);
+ erzeugeAlsGerade(
+ sT,
+ naechsterSchnittpunkt(
+ gerade(
+ tmpPoint,
+ extPoint(-cos(tmp),-sin(tmp))
+ ),
+ w^[i].kontRand
+ ),
+ naechsterSchnittpunkt(
+ gerade(
+ tmpPoint,
+ extPoint(cos(tmp),sin(tmp))
+ ),
+ w^[i].kontRand
+ ),
+ (w^[i]._xStop-w^[i]._xStart)/(w^[i]._xSteps-1),
+ (w^[i]._tStop-w^[i]._tStart)/(w^[i]._tSiz-1)
+ );
+ continue;
+ end;
if istDasBefehl('Ende',s,bekannteBefehle,false) then break;
bekannteBefehle.sort;
gibAus('Verstehe Option '''+s+''' nicht beim Einlesen/Berechnen einer Kontur!'#10'Ich kenne:'#10+bekannteBefehle.text,3);
@@ -7942,6 +8007,27 @@ begin
result:=true;
end;
+procedure tKontur.erzeugeAlsGerade(sT: boolean; von,bis: tExtPoint; dX,dT: extended);
+var
+ i: longestOrdinal;
+ r: tExtPoint;
+begin
+ if sT then begin
+ setLength(orte,1);
+ orte[0]:=0.5*(von+bis);
+ exit;
+ end;
+ r:=bis-von;
+ if abs(r['x']*dT) > abs(r['y']*dX) then // mehr Schritte in x-Richtung
+ setLength(orte,abs(round(r['x']/dX)))
+ else
+ setLength(orte,abs(round(r['y']/dT)));
+ for i:=0 to length(orte)-1 do
+ orte[i]:=
+ von +
+ i/(length(orte)-1) * r;
+end;
+
function tKontur.sortiereNachY(mT: longint): boolean;
begin
result:=sortiereNachY(mT,0,length(orte)-1);