From 5bd9b12d82526940b988a55f7a1dda4591685a29 Mon Sep 17 00:00:00 2001 From: Erich Eckner Date: Thu, 26 Sep 2019 16:28:15 +0200 Subject: zweitdominantesten Punkt speichern und als Variable verfügbar machen MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- epost.lps | 116 +++++++++++++++++++++++++++++----------------------------- epostunit.pas | 98 ++++++++++++++++++++++++++++++++++--------------- typenunit.pas | 38 ++++++++++++++++++- 3 files changed, 163 insertions(+), 89 deletions(-) diff --git a/epost.lps b/epost.lps index 6608b5e..7dee00f 100644 --- a/epost.lps +++ b/epost.lps @@ -7,8 +7,8 @@ - - + + @@ -24,8 +24,8 @@ - - + + @@ -33,8 +33,8 @@ - - + + @@ -42,8 +42,8 @@ - - + + @@ -86,7 +86,7 @@ - + @@ -94,7 +94,7 @@ - + @@ -212,121 +212,123 @@ + - + - + - + - + - + - + - + - + - + - - + + - - + + - - + + - - + + - + - - + + - - + + - - + + - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + diff --git a/epostunit.pas b/epostunit.pas index 8a24fda..3247830 100644 --- a/epostunit.pas +++ b/epostunit.pas @@ -123,6 +123,8 @@ type procedure wMinP(miP: tInt64Point); function rMaxP: tInt64Point; procedure wMaxP(maP: tInt64Point); + function rZDP: tInt64Point; + procedure wZDP(zDP: tInt64Point); function rIstKomplex: boolean; procedure wIstKomplex(komplex: boolean); function xScale: extended; @@ -216,6 +218,7 @@ type property _maxW: extended read rMaxW write wMaxW; property _minP: tInt64Point read rMinP write wMinP; property _maxP: tInt64Point read rMaxP write wMaxP; + property _zDP: tInt64Point read rZDP write wZDP; property istKomplex: boolean read rIstKomplex write wIstKomplex; end; tAchse = record @@ -642,6 +645,8 @@ begin 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='pZDX') or (s='zDPX') then result:=wertes^[i].disk2kont('x',wertes^[i]._zDP['x']) + else if (s='pZDT') or (s='zDPT') or (s='pZDY') or (s='zDPY') then result:=wertes^[i].disk2kont('y',wertes^[i]._zDP['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 @@ -664,6 +669,8 @@ begin '''minP[XYT]'''#10 + '''pMax[XYT]'''#10 + '''maxP[XYT]'''#10 + + '''pZD[XYT]'''#10 + + '''zDP[XYT]'''#10 + '''np'''#10 + '''beta'''#10 + '''β'''#10 + @@ -1101,6 +1108,34 @@ begin end{of case}; end; +function tWerte.rZDP: tInt64Point; +begin + case genauigkeit of + gSingle: result:=sWerte.params.zDP; + gDouble: result:=dWerte.params.zDP; + gExtended: result:=eWerte.params.zDP; + end{of case}; +end; + +procedure tWerte.wZDP(zDP: tInt64Point); +begin + transformationen.zDP:=zDP; + case genauigkeit of + gSingle: begin + sWerte.params.zDP:=zDP; + sWerte.params.refreshKnownValues; + end; + gDouble: begin + dWerte.params.zDP:=zDP; + dWerte.params.refreshKnownValues; + end; + gExtended: begin + eWerte.params.zDP:=zDP; + eWerte.params.refreshKnownValues; + end; + end{of case}; +end; + function tWerte.rIstKomplex: boolean; begin case genauigkeit of @@ -7362,38 +7397,41 @@ begin gExtended: eWerte.findeZweitdominantestenPunkt(xMin,xMax,tMin,tMax,xFak,tFak,p); end{of case}; - - outF:=tMyStringList.create; - if fileExists(datei) then - outF.loadFromFile(datei); - if ueberschreiben then - outF.grep('^'+escapeStringToRegex(identifizierer + separator,rtFpc),true); - s:=identifizierer + separator; - if indizes then - s:=s+ - intToStr(p['x']-_xSteps*byte(toroidal and (p['x']*2>=_xSteps))) + separator + - intToStr(p['y']-_tSiz*byte(toroidal and (p['y']*2>=_tSiz))) + separator + - intToStr(_xSteps) + separator + - intToStr(_tSiz) + separator - else - s:=s+ - myFloatToStr(transformationen.positionAufAchseZuWert(lUnten,p['x']/_xSteps) - (_xStop-_xStart) * (1 + 1/(_xSteps-1)) * byte(toroidal and (p['x']*2>=_xSteps)) ) + separator + - myFloatToStr(transformationen.positionAufAchseZuWert(lLinks,p['y']/_tSiz) - (_tStop-_tStart) * (1 + 1/(_tSiz-1)) * byte(toroidal and (p['y']*2>=_tSiz)) ) + separator + - myFloatToStr((_xStop-_xStart) * (1 + 1/(_xSteps-1))) + separator + - myFloatToStr((_tStop-_tStart) * (1 + 1/(_tSiz-1))) + separator; - case genauigkeit of - gSingle: - s:=s+ - myFloatToStr(sWerte.werte[p['x'] + p['y']*_xSteps]); - gDouble: + _zDP:=p; + + if datei<>'' then begin + outF:=tMyStringList.create; + if fileExists(datei) then + outF.loadFromFile(datei); + if ueberschreiben then + outF.grep('^'+escapeStringToRegex(identifizierer + separator,rtFpc),true); + s:=identifizierer + separator; + if indizes then s:=s+ - myFloatToStr(dWerte.werte[p['x'] + p['y']*_xSteps]); - gExtended: + intToStr(_zDP['x']-_xSteps*byte(toroidal and (_zDP['x']*2>=_xSteps))) + separator + + intToStr(_zDP['y']-_tSiz*byte(toroidal and (_zDP['y']*2>=_tSiz))) + separator + + intToStr(_xSteps) + separator + + intToStr(_tSiz) + separator + else s:=s+ - myFloatToStr(eWerte.werte[p['x'] + p['y']*_xSteps]); - end{of case}; - outF.add(s); - outF.saveToFile(datei); + myFloatToStr(transformationen.positionAufAchseZuWert(lUnten,_zDP['x']/_xSteps) - (_xStop-_xStart) * (1 + 1/(_xSteps-1)) * byte(toroidal and (_zDP['x']*2>=_xSteps)) ) + separator + + myFloatToStr(transformationen.positionAufAchseZuWert(lLinks,_zDP['y']/_tSiz) - (_tStop-_tStart) * (1 + 1/(_tSiz-1)) * byte(toroidal and (_zDP['y']*2>=_tSiz)) ) + separator + + myFloatToStr((_xStop-_xStart) * (1 + 1/(_xSteps-1))) + separator + + myFloatToStr((_tStop-_tStart) * (1 + 1/(_tSiz-1))) + separator; + case genauigkeit of + gSingle: + s:=s+ + myFloatToStr(sWerte.werte[_zDP['x'] + _zDP['y']*_xSteps]); + gDouble: + s:=s+ + myFloatToStr(dWerte.werte[_zDP['x'] + _zDP['y']*_xSteps]); + gExtended: + s:=s+ + myFloatToStr(eWerte.werte[_zDP['x'] + _zDP['y']*_xSteps]); + end{of case}; + outF.add(s); + outF.saveToFile(datei); + end; gibAus('... fertig '+timetostr(now-Zeit),3); result:=true; end; diff --git a/typenunit.pas b/typenunit.pas index a6e6fb8..01bca49 100644 --- a/typenunit.pas +++ b/typenunit.pas @@ -284,7 +284,7 @@ type procedure wTransformationen(tr: tTransformation); public maxW,minW,np,beta: extended; - maxP,minP: tInt64Point; + maxP,minP,zDP: tInt64Point; tSiz,xSteps,tSiz_,xSteps_: longint; istKomplex: boolean; knownValues: tKnownValues; @@ -308,6 +308,7 @@ type inAchsen,outAchsen: t2x2Extended; inWMia,outWMia: tExtPoint; inPMia,outPMia: t2x2Int64; + inZDP,outZDP: tInt64Point; wmiaExplizit: boolean; // wMia wurde explizit gesetzt _anzZugehoerigerDaten: longint; @@ -347,6 +348,8 @@ type procedure wPMin(p: tInt64Point); function rPMax: tInt64Point; procedure wPMax(p: tInt64Point); + function rZDP: tInt64Point; + procedure wZDP(p: tInt64Point); function rXSteps: longint; procedure wXSteps(x: longint); function rTSiz: longint; @@ -404,6 +407,9 @@ type property pMax: tInt64Point read rPMax write wPMax; + property zDP: tInt64Point + read rZDP + write wZDP; property xSteps: longint read rXSteps write wXSteps; @@ -1552,6 +1558,7 @@ begin minW:=0; maxP:=int64Point(-1,-1); minP:=int64Point(-1,-1); + zDP:=int64Point(-1,-1); transformationen:=tTransformation.create; transformationen.erhoeheZugehoerigkeitsanzahl; np:=1; @@ -1571,6 +1578,7 @@ begin minW:=original.minW; maxP:=original.maxP; minP:=original.minP; + zDP:=original.minP; transformationen:=tIdentitaet.create(original.transformationen); np:=original.np; beta:=original.beta; @@ -1630,18 +1638,22 @@ begin if xSteps>1 then begin knownValues.add(knownValue('maxPX', maxP['x']/(xSteps-1)*(xStop-xStart) + xStart)); knownValues.add(knownValue('minPX', minP['x']/(xSteps-1)*(xStop-xStart) + xStart)); + knownValues.add(knownValue('zDPX', zDP['x']/(xSteps-1)*(xStop-xStart) + xStart)); end else begin knownValues.add(knownValue('maxPX', xStart)); knownValues.add(knownValue('minPX', xStart)); + knownValues.add(knownValue('zDPX', xStart)); end; if tSiz>1 then begin knownValues.add(knownValue('maxPY', maxP['y']/(tSiz-1)*(tStop-tStart) + tStart)); knownValues.add(knownValue('minPY', minP['y']/(tSiz-1)*(tStop-tStart) + tStart)); + knownValues.add(knownValue('zDPY', maxP['y']/(tSiz-1)*(tStop-tStart) + tStart)); end else begin knownValues.add(knownValue('maxPY', tStart)); knownValues.add(knownValue('minPY', tStart)); + knownValues.add(knownValue('zDPY', tStart)); end; knownValues.add(knownValue('beta',beta)); knownValues.add(knownValue('xStart',xStart)); @@ -1860,9 +1872,11 @@ begin if not wmiaExplizit then begin inWMia:=vorgaenger[0].wMia; inPMia:=vorgaenger[0].pMia; + inZDP:=vorgaenger[0].zDP; for i:=1 to length(vorgaenger)-1 do if (inWMia <> vorgaenger[i].wMia) or - (inPMia <> vorgaenger[i].pMia) then + (inPMia <> vorgaenger[i].pMia) or + (inZDP <> vorgaenger[i].zDP) then fehler('Vorgänger haben verschiedene wmin, wmax, pmin oder pmax, was generisch nicht zu verstehen ist!'); end; end; @@ -1882,6 +1896,7 @@ begin if not wmiaExplizit then begin outWMia:=inWMia; outPMia:=inPMia; + outZDP:=inZDP; end; end; @@ -2005,6 +2020,23 @@ begin aktualisiereAlles; end; +function tTransformation.rZDP: tInt64Point; +begin + result:=outZDP; +end; + +procedure tTransformation.wZDP(p: tInt64Point); +begin + if (self is tAgglomeration) then begin + if zDP<>p then + fehler('Setzen von zDP für Agglomeration nicht erlaubt ( '+tInt64PointToStr(p)+' ≠ '+tInt64PointToStr(zDP)+' )!'); + exit; + end; + wmiaExplizit:=true; + outZDP:=p; + aktualisiereAlles; +end; + function tTransformation.rXSteps: longint; begin result:=outXSTS['x']; @@ -3389,6 +3421,7 @@ begin fehler('Vorgänger haben verschiedene xSteps oder tSiz, was bei Agglomeration nicht geht!'); inWMia:=vorgaenger[0].wMia; inPMia:=vorgaenger[0].pMia; + inZDP:=int64Point(-1,-1); for i:=1 to length(vorgaenger)-1 do begin if inWMia['x'] > vorgaenger[i].wMia['x'] then begin inWMia['x']:=vorgaenger[i].wMia['x']; @@ -3519,6 +3552,7 @@ begin inXSTS:=beliebigerVorgaenger.xStepsTSiz; inWMia:=beliebigerVorgaenger.wMia; inPMia:=beliebigerVorgaenger.pMia; + inZDP:=beliebigerVorgaenger.zDP; end; procedure tDiagonaleAgglomeration.aktualisiereXsTs; -- cgit v1.2.3-70-g09d2