Timeline: define better internal zoom-out limit
The value used previously was too conservative, and prevented ZommWindow from zooming out to the complete Time domain. This was due to missing the Time::SCALE denominator, which increaded the limit by factor 1e6 In fact the code is able to handle even this extremely reduced limit, but doing so seems over the top, since now detox() kicks in on several calculations, leading to rather coarse grained errors. Thus I decided to use a compromise: lower the limit only by factor 1000; with typical screen pixel widths, we can reach the full time domain, while most scaling and zoom calculations can be performed precisely, without detox() kicking in. Obviously this change requires adjusting a lot of the test case expectations, since we can now zoom out maximally.
This commit is contained in:
parent
40f003a962
commit
c31522c236
5 changed files with 197 additions and 40 deletions
|
|
@ -185,7 +185,7 @@ namespace util {
|
|||
f128 frac = f128(r) / den;
|
||||
int64_t res = d*u + int64_t(frac*u * ROUND_ULP);
|
||||
ENSURE (abs (f128(res)/u - rational_cast<f128>(Rat{num,den})) <= 1.0/abs(u)
|
||||
,"Requantisation error exceeded num=%lu / den=%lu -> res=%lu / quant=%lu"
|
||||
,"Requantisation error exceeded num=%li / den=%li -> res=%li / quant=%li"
|
||||
, num, den, res, u);
|
||||
return res;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -475,7 +475,6 @@ namespace time {
|
|||
: Duration{Offset{timeSpec}}
|
||||
{ }
|
||||
|
||||
explicit
|
||||
Duration (FSecs const& timeSpan_in_secs)
|
||||
: Duration{Offset{timeSpan_in_secs}}
|
||||
{ }
|
||||
|
|
|
|||
|
|
@ -706,13 +706,14 @@ namespace model {
|
|||
return px1 + px2 + pxr;
|
||||
}
|
||||
|
||||
/** window size beyond that limit would yield
|
||||
* numerically dangerous zoom factors */
|
||||
/** window size beyond that limit would lead to
|
||||
* numerically dangerous zoom factors (pixel/duration) */
|
||||
static FSecs
|
||||
maxSaneWinExtension (uint pxWidth)
|
||||
{
|
||||
return FSecs{LIM_HAZARD * pxWidth, Time::SCALE};
|
||||
}
|
||||
return min (FSecs{LIM_HAZARD * pxWidth, 1000}, MAX_TIMESPAN);
|
||||
} // Note: denominator 1000 is additional safety margin
|
||||
// wouldn't be necessary, but makes detox(largeTime) more precise
|
||||
|
||||
static Rat
|
||||
establishMetric (uint pxWidth, Time startWin, Time afterWin)
|
||||
|
|
@ -763,13 +764,13 @@ namespace model {
|
|||
dur = min (dur, MAX_TIMESPAN);
|
||||
dur = max (dur, MICRO_TICK); // prevent window going void
|
||||
dur = detox (dur); // prevent integer wrap in time conversion
|
||||
TimeVar timeDur{dur};
|
||||
TimeVar timeDur{Duration{dur}};
|
||||
// prefer bias towards increased window instead of increased metric
|
||||
if (not isMicroGridAligned (dur))
|
||||
timeDur = timeDur + TimeValue(1);
|
||||
// resize window relative to anchor point
|
||||
placeWindowRelativeToAnchor (dur);
|
||||
establishWindowDuration (timeDur);
|
||||
establishWindowDuration (Duration{timeDur});
|
||||
// re-check metric to maintain precise pxWidth
|
||||
px_per_sec_ = conformMetricToWindow (pxWidth);
|
||||
ENSURE (_FSecs(afterWin_-startWin_) < MAX_TIMESPAN);
|
||||
|
|
@ -799,7 +800,7 @@ namespace model {
|
|||
conformWindowToCanvas()
|
||||
{
|
||||
FSecs dur{afterWin_-startWin_};
|
||||
REQUIRE (dur < MAX_TIMESPAN);
|
||||
REQUIRE (dur <= MAX_TIMESPAN);
|
||||
REQUIRE (Time::MIN <= startWin_);
|
||||
REQUIRE (afterWin_ <= Time::MAX);
|
||||
startAll_ = max (startAll_, Time::MIN);
|
||||
|
|
@ -989,7 +990,7 @@ namespace model {
|
|||
}
|
||||
|
||||
void
|
||||
establishWindowDuration (TimeVar duration)
|
||||
establishWindowDuration (Duration duration)
|
||||
{
|
||||
if (startWin_<= Time::MAX - duration)
|
||||
afterWin_ = startWin_ + duration;
|
||||
|
|
|
|||
|
|
@ -696,60 +696,65 @@ namespace test {
|
|||
win.setMetric (bruteZoom); // zoom out beyond what is possible and to a toxic factor
|
||||
|
||||
CHECK (_raw(win.overallSpan().duration()) == 614891469123651720); // canvas size not changed
|
||||
CHECK (_raw(win.visible().duration()) == 3298534883328); // window was expanded,
|
||||
CHECK (_raw(win.visible().duration()) == 3298534883328000); // window was expanded,
|
||||
CHECK (_raw(win.visible().duration()) < int64_t{1}<<60 ); // ...but not as much as demanded
|
||||
CHECK (_raw(win.visible().duration()) == 3 * LIM_HAZARD); // In fact it was capped at a built-in limit based on pixel size,
|
||||
CHECK (_raw(win.visible().duration()) == 3* LIM_HAZARD*1000); // In fact it was capped at a built-in limit based on pixel size,
|
||||
// to prevent formation of dangerous numbers within metric calculations
|
||||
CHECK (win.visible().start() == - win.visible().end()); // window has been expanded symmetrically to existing position
|
||||
CHECK (win.px_per_sec() > bruteZoom); // the actual zoom factor also reflects the applied limitation,
|
||||
CHECK (win.px_per_sec() == 15625_r/17179869184); // to ensure the denominator does not exceed LIM_HAZARD
|
||||
CHECK (win.px_per_sec() == 1000000_r/LIM_HAZARD);
|
||||
CHECK (win.px_per_sec() == 125_r/137438953472); // to ensure the denominator does not exceed LIM_HAZARD
|
||||
CHECK (win.px_per_sec() == 1000_r/LIM_HAZARD);
|
||||
CHECK (win.px_per_sec() == 3 / _FSecs(win.visible().duration())); // and this value also conforms with the pixel size and window duration
|
||||
CHECK (win.pxWidth() == 3);
|
||||
|
||||
/*--Test-3-----------*/
|
||||
win.setMetric (5_r/std::numeric_limits<int64_t>::max()); // same limiting applies to even more nasty values
|
||||
CHECK (_raw(win.visible().duration()) == 3298534883328); // still unchanged at limit
|
||||
CHECK (win.px_per_sec() == 15625_r/17179869184);
|
||||
CHECK (_raw(win.visible().duration()) == 3298534883328000); // still unchanged at limit
|
||||
CHECK (win.px_per_sec() == 125_r/137438953472);
|
||||
CHECK (win.pxWidth() == 3);
|
||||
|
||||
/*--Test-4-----------*/
|
||||
win.setMetric (1000001_r/LIM_HAZARD); // but zooming in more than that limit will be honored
|
||||
CHECK (_raw(win.visible().duration()) == 3298531584796); // ...window now slightly reduced in size
|
||||
CHECK (_raw(win.visible().duration()) < 3 * LIM_HAZARD);
|
||||
CHECK (win.px_per_sec() = 750000_r/824632896199); // ...yet effective zoom factor was still marginally adjusted for safety
|
||||
CHECK (win.px_per_sec() > 1000000_r/LIM_HAZARD);
|
||||
CHECK (win.px_per_sec() > 1000001_r/LIM_HAZARD); // (this is what was requested)
|
||||
CHECK (win.px_per_sec() < 1000002_r/LIM_HAZARD); // (thus result was slightly adjusted upwards)
|
||||
win.setMetric (1001_r/LIM_HAZARD); // but zooming in more than that limit will be honored
|
||||
CHECK (_raw(win.visible().duration()) == 3295239643684000); // ...window now slightly reduced in size
|
||||
CHECK (_raw(win.visible().duration()) < 3 * LIM_HAZARD*1000);
|
||||
CHECK (win.px_per_sec() == 750_r/823809910921); // ...yet effective zoom factor was still marginally adjusted for safety
|
||||
CHECK (win.px_per_sec() > 1000_r/LIM_HAZARD);
|
||||
CHECK (win.px_per_sec() > 1001_r/LIM_HAZARD); // (this is what was requested)
|
||||
CHECK (win.px_per_sec() < 1002_r/LIM_HAZARD); // (thus result was slightly adjusted upwards)
|
||||
CHECK (win.pxWidth() == 3);
|
||||
|
||||
/*--Test-5-----------*/
|
||||
win.calibrateExtension (1'000'000'000); // implicit drastic zoom-out by increasing the number of pixels
|
||||
CHECK (win.pxWidth() < 1'000'000'000); // however: this number is capped at a fixed maximum
|
||||
CHECK (win.pxWidth() == MAX_PX_WIDTH); // (which „should be enough“ for the time being...)
|
||||
CHECK (win.px_per_sec() == 508631_r/559239974093); // the zoom metric has been adapted, but to a sanitised value
|
||||
CHECK (win.px_per_sec() == 16062_r/98763149723); // the zoom metric has been adapted, but to a sanitised value
|
||||
|
||||
CHECK (_raw(win.overallSpan().duration()) == 614891469123651720); // overall canvas duration not changed
|
||||
CHECK (_raw(win.visible().duration()) == 109951052826533333); // window duration now drastically increased
|
||||
CHECK (win.overallSpan().end() == TimeValue{307445734561825860}); // window is somewhere within canvas
|
||||
CHECK (win.visible().end() == TimeValue{109949403560740935}); // but was expanded to the right,
|
||||
CHECK (win.visible().start() == TimeValue{ -1649265792398}); // ... retaining the start value
|
||||
CHECK (_raw(win.overallSpan().duration()) == 614891469123651720); // overall canvas duration not changed
|
||||
CHECK (_raw(win.visible().duration()) == 614891469123651720); // window duration now expanded to the maximum possible value
|
||||
CHECK (win.overallSpan().end() == TimeValue{ 307445734561825860}); // window now spans the complete time domain
|
||||
CHECK (win.visible().end() == TimeValue{ 307445734561825860});
|
||||
CHECK (win.visible().start() == TimeValue{-307445734561825860});
|
||||
|
||||
// Note: these parameters build up to really »poisonous« values....
|
||||
CHECK (MAX_PX_WIDTH / _FSecs(win.visible().duration()) == 100000000000_r/109951052826533333);
|
||||
CHECK (MAX_PX_WIDTH / _FSecs(win.visible().duration()) == 2500000000_r/15372286728091293);
|
||||
CHECK (MAX_PX_WIDTH * 1000000_r/614891469123651720 == 2500000000_r/15372286728091293);
|
||||
CHECK (win.px_per_sec() * _FSecs(win.visible().duration()) < 0); // we can't even calculate the resulting pxWidth() naively
|
||||
CHECK (rational_cast<float>(win.px_per_sec()) // ...while effectively these values are still correct
|
||||
* rational_cast<float>(_FSecs(win.visible().duration())) == 100000.914f);
|
||||
CHECK (rational_cast<float>(100000000000_r/109951052826533333) == 9.09495611e-07f); // theoretical value
|
||||
CHECK (rational_cast<float>(win.px_per_sec()) == 9.09503967e-07f); // value actually chosen
|
||||
CHECK (win.px_per_sec() == 508631_r/559239974093);
|
||||
* rational_cast<float>(_FSecs(win.visible().duration())) == 100000.727f);
|
||||
CHECK (rational_cast<float>(MAX_PX_WIDTH*1000000_r/614891469123651720) == 1.62630329e-07f); // theoretical value
|
||||
CHECK (rational_cast<float>(win.px_per_sec()) == 1.62631508e-07f); // value actually chosen
|
||||
CHECK (win.px_per_sec() == 16062_r/98763149723);
|
||||
|
||||
/*--Test-6-----------*/
|
||||
win.setMetric (bruteZoom); // And now put one on top by requesting excessive zoom-out:
|
||||
CHECK (_raw(win.overallSpan().duration()) == 614891469123651720); // overall canvas duration not changed
|
||||
CHECK (_raw(win.visible().duration()) == 109951162777600000); // window duration only slightly increased
|
||||
CHECK (508631_r/559239974093 > 15625_r/17179869184); // zoom factor slightly reduced
|
||||
CHECK (win.px_per_sec() == 15625_r/17179869184); // and now hitting again the minimum limit
|
||||
SHOW_EXPR(_raw(win.overallSpan().duration()))
|
||||
SHOW_EXPR(_raw(win.visible().duration()))
|
||||
CHECK (_raw(win.visible().duration()) == 614891469123640625); // window duration was slightly decreased -- WHY?? (TODO)
|
||||
CHECK (16062_r/98763149723 > 200000_r/1229782938247); // zoom factor numerically slightly reduced
|
||||
SHOW_EXPR(win.px_per_sec())
|
||||
CHECK (win.px_per_sec() == 200000_r/1229782938247); // and now hitting again the minimum limit
|
||||
SHOW_EXPR(MAX_PX_WIDTH /(614891469123651720_r/1000000))
|
||||
CHECK (win.pxWidth() == MAX_PX_WIDTH); // pixel count unchanged at maximum
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -40522,21 +40522,173 @@
|
|||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1670620383399" ID="ID_674544235" MODIFIED="1670620401994" TEXT="hätte Zoom auf gesamten Canvas erwartet">
|
||||
<node COLOR="#435e98" CREATED="1670620383399" ID="ID_674544235" MODIFIED="1670642115198" TEXT="hätte Zoom auf gesamten Canvas erwartet">
|
||||
<icon BUILTIN="yes"/>
|
||||
<node CREATED="1670620405080" ID="ID_1202192964" MODIFIED="1670620418967" TEXT="...nachdem jetzt die Zahl der Pixel so drastisch erhöht wurde"/>
|
||||
<node CREATED="1670621505792" ID="ID_645635162" MODIFIED="1670621528305" TEXT="aber der definierte Grenzfaktor verhindert das">
|
||||
<icon BUILTIN="info"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#f0d5c5" COLOR="#990033" CREATED="1670621532941" ID="ID_1641685049" MODIFIED="1670621550148" TEXT="ist der Grenzfaktor korrekt berechnet?">
|
||||
<node COLOR="#435e98" CREATED="1670621532941" ID="ID_1641685049" MODIFIED="1670641908692" TEXT="ist der Grenzfaktor korrekt berechnet?">
|
||||
<icon BUILTIN="help"/>
|
||||
<node CREATED="1670621551706" ID="ID_804263127" MODIFIED="1670621631745" TEXT="konzeptionell hatte ich etwas Anderes in Erinnerung">
|
||||
<arrowlink COLOR="#6ca8d7" DESTINATION="ID_735928158" ENDARROW="Default" ENDINCLINATION="-761;71;" ID="Arrow_ID_907454112" STARTARROW="None" STARTINCLINATION="1521;-73;"/>
|
||||
<icon BUILTIN="messagebox_warning"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1670623877667" ID="ID_1836625419" MODIFIED="1670623900060" TEXT="möglicherweise genau um Time::SCALE zu klein?">
|
||||
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1670623877667" ID="ID_1836625419" MODIFIED="1670641911673" TEXT="möglicherweise genau um Time::SCALE zu klein?">
|
||||
<icon BUILTIN="idea"/>
|
||||
<node CREATED="1670629795767" ID="ID_1040393126" MODIFIED="1670629827889" TEXT="der Nenner Time::SCALE ist nämlich in dem Fall harmlos (da pxWidth limitiert ist)"/>
|
||||
<node CREATED="1670629829067" ID="ID_1784755741" MODIFIED="1670629843428" TEXT="aber er macht das Ergebnis um den Fakror 1Mio größer"/>
|
||||
<node CREATED="1670629845864" ID="ID_1290369344" MODIFIED="1670629860659" TEXT="und limitiert genau dadurch den minimalen Zoom"/>
|
||||
<node CREATED="1670629897993" ID="ID_652419307" MODIFIED="1670629969742" TEXT="1 / LIM_HAZARD wäre das Extremum">
|
||||
<arrowlink COLOR="#549dd2" DESTINATION="ID_1085901724" ENDARROW="Default" ENDINCLINATION="53;-82;" ID="Arrow_ID_292029179" STARTARROW="None" STARTINCLINATION="-212;16;"/>
|
||||
<icon BUILTIN="forward"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node COLOR="#435e98" CREATED="1670629923629" ID="ID_1085901724" MODIFIED="1670641895675" TEXT="versuchen, das Limit um 1e-6 abzusenken">
|
||||
<linktarget COLOR="#549dd2" DESTINATION="ID_1085901724" ENDARROW="Default" ENDINCLINATION="53;-82;" ID="Arrow_ID_292029179" SOURCE="ID_652419307" STARTARROW="None" STARTINCLINATION="-212;16;"/>
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<icon BUILTIN="button_cancel"/>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1670629990253" ID="ID_1122755361" MODIFIED="1670629998128" TEXT="ENSURE_matchesExpectedPixWidth scheitert">
|
||||
<icon BUILTIN="broken-line"/>
|
||||
<node CREATED="1670629999164" ID="ID_1312554244" MODIFIED="1670630059800" TEXT="und zwar mit interessanten (realistischen) Werten">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<p>
|
||||
ZoomWindow: established size or metric misses expectation by more than 1px. 3px != 0.279620 expected pixel.
|
||||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
<icon BUILTIN="idea"/>
|
||||
</node>
|
||||
<node COLOR="#435e98" CREATED="1670631017435" ID="ID_1279940239" MODIFIED="1670634674575" TEXT="Beobachtung">
|
||||
<icon BUILTIN="info"/>
|
||||
<node CREATED="1670634343385" ID="ID_284249821" MODIFIED="1670634414906" TEXT="detox(changedMetric) macht nix">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<p>
|
||||
da die Metrik ja limitiert wurde und damit per definitionem auch sauber
|
||||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
<icon BUILTIN="idea"/>
|
||||
</node>
|
||||
<node CREATED="1670631027193" ID="ID_1715093187" MODIFIED="1670631034852" TEXT="dur = 3* LIM_HAZARD"/>
|
||||
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1670631036152" ID="ID_824462335" MODIFIED="1670634653392" TEXT="ist größer als MAX_TIMESPAN und wird limitiert">
|
||||
<linktarget COLOR="#de3b4d" DESTINATION="ID_824462335" ENDARROW="Default" ENDINCLINATION="507;0;" ID="Arrow_ID_79951922" SOURCE="ID_1912544646" STARTARROW="Default" STARTINCLINATION="507;0;"/>
|
||||
<icon BUILTIN="clanbomber"/>
|
||||
</node>
|
||||
<node CREATED="1670631144522" ID="ID_1178539358" MODIFIED="1670631160644" TEXT="detox(dur) läuft dann in das untere Limit für den quantiser = 64"/>
|
||||
<node CREATED="1670631354782" ID="ID_1215630500" MODIFIED="1670633662153" TEXT="der Fehler dadurch ist kleiner als 1 sec und relativ irre klein (1e-14)"/>
|
||||
<node COLOR="#435e98" CREATED="1670631820765" ID="ID_1612035545" MODIFIED="1670632327145" TEXT="aber TimeVar limitiert">
|
||||
<icon BUILTIN="broken-line"/>
|
||||
<node CREATED="1670631831417" ID="ID_1807731566" MODIFIED="1670631837782" TEXT="umgewandelter Wert: 614891469123640625"/>
|
||||
<node CREATED="1670631861403" ID="ID_1701766180" MODIFIED="1670631953102" TEXT="theoretischer Wert: 614891469123651720"/>
|
||||
<node CREATED="1670631996436" ID="ID_327677153" MODIFIED="1670632023685" TEXT="limitierter Zeitpunkt: 307445734561825860"/>
|
||||
<node COLOR="#338800" CREATED="1670632336743" ID="ID_769313456" MODIFIED="1670632349302" TEXT="Fix: Umwandlung über Duration(FSecs)">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1670633143989" ID="ID_1654804140" MODIFIED="1670633155150" TEXT="conformWindowToMetric(3px)">
|
||||
<node CREATED="1670633164402" ID="ID_208283454" MODIFIED="1670633165812" TEXT="Rat adjMetric = detox (Rat(pxWidth) / dur);"/>
|
||||
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1670633167112" ID="ID_404249260" MODIFIED="1670633316053" TEXT="detox() führt hier einen starken Fehler ein">
|
||||
<icon BUILTIN="broken-line"/>
|
||||
<node CREATED="1670633198943" ID="ID_1237559681" MODIFIED="1670633230283" TEXT="vorher: 192/39353054023913"/>
|
||||
<node CREATED="1670633202891" ID="ID_34394013" MODIFIED="1670633262719" TEXT="nachher: 5/1229782938247"/>
|
||||
<node CREATED="1670633305726" ID="ID_841098021" MODIFIED="1670633311104" TEXT="16% Fehler"/>
|
||||
<node CREATED="1670633355551" ID="ID_86750972" MODIFIED="1670633370881" TEXT="Grund: der kleine Zähler wegen kleiner Pixelzahl"/>
|
||||
</node>
|
||||
<node CREATED="1670633496181" ID="ID_1991750411" MODIFIED="1670633509494" TEXT="nachjustierte Metrik">
|
||||
<node CREATED="1670633510314" ID="ID_474285004" MODIFIED="1670633512214" TEXT="6/1229782938247"/>
|
||||
<node CREATED="1670633548900" ID="ID_1038736733" MODIFIED="1670633568254" TEXT="viel näher am Wert vor detox()"/>
|
||||
<node CREATED="1670633579125" ID="ID_330672165" MODIFIED="1670633590883" TEXT="Fehlerfaktor: nur noch 1e-13"/>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1670634446738" ID="ID_335582946" MODIFIED="1670634451077" TEXT="Gesamtresultat">
|
||||
<node CREATED="1670634452282" ID="ID_695823259" MODIFIED="1670634564479" TEXT="geforderte Metrik: 1/1099511627776 = 9.09e-13"/>
|
||||
<node CREATED="1670634484934" ID="ID_186085154" MODIFIED="1670634549193" TEXT="resultiernde Metrik: 6/1229782938247 = 1.87e-12"/>
|
||||
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1670634566275" ID="ID_16315489" MODIFIED="1670634586577" TEXT="das ist natürlich viel zu weit weg">
|
||||
<icon BUILTIN="stop-sign"/>
|
||||
<node CREATED="1670634593967" ID="ID_213992089" MODIFIED="1670634599258" TEXT="Fehler 430%"/>
|
||||
<node CREATED="1670634622307" ID="ID_1912544646" MODIFIED="1670634640149" TEXT="Grund ist aber kein Rechenfehler....">
|
||||
<arrowlink COLOR="#de3b4d" DESTINATION="ID_824462335" ENDARROW="Default" ENDINCLINATION="507;0;" ID="Arrow_ID_79951922" STARTARROW="Default" STARTINCLINATION="507;0;"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node COLOR="#435e98" CREATED="1670634676452" ID="ID_829552595" MODIFIED="1670642079860">
|
||||
<richcontent TYPE="NODE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<p>
|
||||
<b>Grund</b> sind die expliziten <i>Limitierungen </i>in dieser Funktion
|
||||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
<linktarget COLOR="#6d669c" DESTINATION="ID_829552595" ENDARROW="Default" ENDINCLINATION="299;14;" ID="Arrow_ID_166387953" SOURCE="ID_1376379301" STARTARROW="None" STARTINCLINATION="107;-4;"/>
|
||||
<icon BUILTIN="forward"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#f0d5c5" COLOR="#990033" CREATED="1670635244880" ID="ID_873866162" MODIFIED="1670635272173" TEXT="nicht klar ob man diese Assertion aufrecht erhalten kann">
|
||||
<icon BUILTIN="help"/>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1670634800459" ID="ID_1764699375" MODIFIED="1670634819881" TEXT="abgesehen davon würde die Rechnung sogar mit diesen extremen Werten funktionieren">
|
||||
<icon BUILTIN="idea"/>
|
||||
<node CREATED="1670634821458" ID="ID_343578534" MODIFIED="1670634835363" TEXT="das liegt vor allem an dem Nachjustieren per Newton"/>
|
||||
<node CREATED="1670634842378" ID="ID_1192611860" MODIFIED="1670635459431" TEXT="detox() würde hier wegen dem kleinen Zähler schon zu extremen Fehlern führen">
|
||||
<arrowlink COLOR="#f9ffa8" DESTINATION="ID_1107044319" ENDARROW="Default" ENDINCLINATION="291;11;" ID="Arrow_ID_1783361555" STARTARROW="None" STARTINCLINATION="-36;103;"/>
|
||||
<icon BUILTIN="messagebox_warning"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1670635294357" ID="ID_1940319351" MODIFIED="1670642085976" TEXT="Kompromiß: Faktor 1000">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node CREATED="1670635326013" ID="ID_1487818131" MODIFIED="1670635342383" TEXT="liegt zwischen den ausgetesteten Grenzen"/>
|
||||
<node CREATED="1670635343499" ID="ID_641939740" MODIFIED="1670635360580" TEXT="wäre immer noch grade ausreichend groß">
|
||||
<node CREATED="1670635361856" ID="ID_1028559962" MODIFIED="1670635368331" TEXT="wenige Pixel: beschränkte Domäne"/>
|
||||
<node CREATED="1670635369111" ID="ID_733591685" MODIFIED="1670635384681" TEXT="1000 Pixel : kann ganze Zeitdomäne darstellen"/>
|
||||
</node>
|
||||
<node CREATED="1670635388270" ID="ID_1107044319" MODIFIED="1670635464001" TEXT="Abstand vom Quantisierer 1000 mal größer ⟹ detox() arbeitet geschmeidiger">
|
||||
<linktarget COLOR="#f9ffa8" DESTINATION="ID_1107044319" ENDARROW="Default" ENDINCLINATION="291;11;" ID="Arrow_ID_1783361555" SOURCE="ID_1192611860" STARTARROW="None" STARTINCLINATION="-36;103;"/>
|
||||
<icon BUILTIN="idea"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1670638029954" ID="ID_1190734639" MODIFIED="1670638077699" TEXT="maxSaneWindowExtension(MAX_PX_WIDTH) wird zu groß">
|
||||
<icon BUILTIN="broken-line"/>
|
||||
<node CREATED="1670638079529" ID="ID_1748017185" MODIFIED="1670638086064" TEXT="als FSecs noch darstellbar"/>
|
||||
<node CREATED="1670638086722" ID="ID_1899582755" MODIFIED="1670638102317" TEXT="aber die Umwandlung in TimeValue scheitert"/>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1670641927167" ID="ID_623913340" MODIFIED="1670641959044" TEXT="direkt hier die Limitierung auf MAX_TIMESPAN">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node CREATED="1670641960810" ID="ID_1647554495" MODIFIED="1670641975196" TEXT="damit gefährliche Werte überhaupt nirgends mehr in die Rechnung kommen"/>
|
||||
<node CREATED="1670641975904" ID="ID_977206807" MODIFIED="1670641988890" TEXT="sollte sich unter dem Strich genauso verhalten (wie wenn wir später limitieren)"/>
|
||||
<node CREATED="1670641992206" ID="ID_1376379301" MODIFIED="1670642079860" TEXT="das Problem mit der nachträglichen Domain-Beschränkung ist „unter den Teppich gekehrt“">
|
||||
<arrowlink COLOR="#6d669c" DESTINATION="ID_829552595" ENDARROW="Default" ENDINCLINATION="299;14;" ID="Arrow_ID_166387953" STARTARROW="None" STARTINCLINATION="107;-4;"/>
|
||||
<icon BUILTIN="messagebox_warning"/>
|
||||
</node>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1670642102191" ID="ID_1301915764" MODIFIED="1670642109934" TEXT="nun geht der Zoom auf den ganzen Canvas">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1670642126767" ID="ID_235330604" MODIFIED="1670642131347" TEXT="Testdaten anpassen">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1670642140314" ID="ID_846585763" MODIFIED="1670642165125" TEXT="bruteZoom verhält sich aber sonderbar">
|
||||
<icon BUILTIN="messagebox_warning"/>
|
||||
<node CREATED="1670642186191" ID="ID_1230929067" MODIFIED="1670642222176" TEXT="Fenster vorher auf Max">
|
||||
<icon BUILTIN="info"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1670642203289" ID="ID_415548658" MODIFIED="1670642219593" TEXT="danach Fenster minimal verkleinert">
|
||||
<icon BUILTIN="broken-line"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
|
|
|
|||
Loading…
Reference in a new issue