Skip to content

Dev - #3

Merged
SerbaC6 merged 20 commits into
mainfrom
dev
Aug 18, 2026
Merged

Dev#3
SerbaC6 merged 20 commits into
mainfrom
dev

Conversation

@SerbaC6

@SerbaC6 SerbaC6 commented Aug 18, 2026

Copy link
Copy Markdown
Owner

No description provided.

rdimitrescu and others added 20 commits August 17, 2026 20:48
Multiplicatorul nu se mai trasa de la commit-ul trecut, dar restul piesei
rămăsese pe loc: `multiplicatorLagrange` importat degeaba, `kAles` folosit
după ce fusese șters — de aici și eroarea de tipuri —, iar legenda anunța
în continuare o curbă și un nod care nu mai apar nicăieri.

Evidențierea din formulă trece de pe `l_k(x)` pe `P_n(x)`: pe grafic e o
singură linie, iar aceea e suma, nu multiplicatorul. Produsul rămâne scris,
fiindcă el spune din ce e făcută suma.

Descrierea pentru cititorul de ecran spune același lucru ca desenul: o linie
prin toate nodurile, cu abaterea maximă față de funcție.
Bara de derulare și `useDerulare` erau folosite în JSX de la commit-ul
trecut, dar nu fusese importat niciunul, deci fișierul nu compila deloc.

Odată cu ele:

- legenda scapă de „verticala punctului evaluat" și de „P₀ₙ(x)" — niciuna
  nu se mai desenează, iar `PlotDreapta` nu mai e importat degeaba;
- intrarea rămasă spune și de punctele de pe curbe, ca legenda să acopere
  tot ce se vede;
- graficul urcă de la 460 la 560 de pixeli, adică exact locul lăsat liber de
  triunghiul mutat sub bara de derulare. Până acum tabelul creștea cu fiecare
  nivel și împingea desenul în sus, deci graficul era cel mai mic tocmai la
  pasul în care se vede toată schema.
Fila dispăruse din listă, dar ramurile ei rămăseseră în cod: o legendă
proprie și o descriere pentru cititorul de ecran, amândouă comparate cu un
tip de filă care nu mai există — de aici cele două erori de tipuri. Cu ele
pleacă și `amplitudine`, singura cifră pe care o folosea doar Runge.

`schimbaFila` fusese ștearsă, dar tabul o chema în continuare; nu mai are ce
face, fiindcă niciuna dintre cele trei file nu-și mai aduce funcția ei, deci
rămâne `setFila`.

Cu asta, proiectul compilează din nou: `npm run typecheck` și `npm run lint`
trec amândouă.
… se vede

Cele două curbe se desenau deja una peste alta de la commit-ul trecut, dar
pe sinusoidă asta nu ajuta: la numărul implicit de noduri stau la **doi
pixeli** una de alta, iar de la nouă noduri se suprapun exact. Fila arăta o
singură linie și cerea să se creadă că sunt două.

Măsurat ca depărtare maximă, transformată în pixeli pe înălțimea desenului:

|  noduri   |  4   |  5   |  7   |  9   |  13  |
| --------- | ---- | ---- | ---- | ---- | ---- |
| sin(πx)   |  8   |  2   |  0   |  0   |  0   |
| x⁵ − 2x³  | 12   | 10   |  5   |  3   |  1,5 |

Deci funcția de start devine `x⁵ − 2x³`, cum lăsa deschis nota. Celelalte
două file nu pierd nimic: polinomul de interpolare nu iese din cadru la
niciun număr de noduri (`max |Pₙ| = 1`, cât funcția însăși), iar de la șase
noduri o reproduce exact.

Legenda numește acum și curba punctată — până acum desenul avea două linii
și legenda una singură. Lângă `s″(x₀)`, care spune **de ce** se despart
curbele, apare și `depărtarea`, care spune **cu cât**; scrisă în cuvânt,
fiindcă al doilea spline n-are simbol în curs.

Cu trei noduri, cele două curbe coincid exact: `(−1, 1)`, `(0, 0)` și
`(1, −1)` sunt coliniare, deci amândouă condițiile dau dreapta `y = −x`.
Nu e o scăpare de calcul, e adevărat, și e scris în cod.

`max |s − f|` ceruta la scos era deja plecată.
Plafonul de înălțime ridicat în commit-ul de acum două trepte n-a mișcat
niciun pixel: măsurat în browser, coloana din stânga se oprește la 707px și
nu crește nici pe ecran de 1536px, deci înălțimea ieșea din raportul de
formă — `707 / 1,6 = 442px` —, iar plafonul nu era atins la nicio lățime.

Cu `raport = 1,3` desenul urcă de la **442px la 544px**, verificat la 1280px
și 1536px. Plafonul rămâne pus, ca înălțimea să nu treacă de rândul de cifre
de alături.
Punctele rămase erau toate pe pagina 12; celelalte fuseseră deja bifate în
trecerea a doua și s-au verificat una câte una în browser: Newton-Cotes
scrie „Subintervale N = 4" cu cifra lângă literă și `h` separat la dreapta,
cuadraturile pornesc pe `√x` cu fila scrisă „Cuadraturi Adaptive", derivarea
are graficul pe toată lățimea, iar eliminarea gaussiană ține `|aᵢₚ|` pe
aceeași linie cu matricea, amândouă mărite.

`Progress.md` primește secțiunea trecerii a treia, cu măsurătorile care au
schimbat două decizii: plafonul de înălțime nu era atins la nicio lățime,
iar cele două condiții de capăt ale spline-ului stăteau la doi pixeli una
de alta pe funcția de dinainte.

Notat acolo și ce am găsit pe drum, dar nu ține de listă: `PlotDreapta`
scrie `undefined` în capete la primul cadru, pe `derivare-numerica` și pe
`ecuatii-neliniare`.
Instalat local ca să pot verifica paginile în browser; n-are ce căuta în
dependențele proiectului, care n-are încă niciun test.
…telefon

Sub `sm`, legenda nu mai e grilă pe două coloane: simbolul și sensul lui
curg în același paragraf, deci al doilea rând al unei explicații lungi
pleacă de la marginea din stânga, nu de sub semnul egal — indentat acolo,
arăta ca o intrare nouă, căreia îi lipsește simbolul.

Peste `sm` rămâne grila de dinainte, cu semnele egal aliniate: acolo
lățimea ajunge și alinierea chiar ajută la citit.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012EvFhxeqEqtCsEsDgRqgN4
Poziția salvată se refăcea la orice sosire pe o pagină, indiferent cum ai
ajuns acolo. Dar săgețile de navigație stau chiar la **fundul** paginii,
deci orice pagină părăsită printr-una din ele își salva poziția „la fund" —
iar a doua oară când ajungeai pe ea erai pus înapoi acolo, sub tot
conținutul, în loc să vezi titlul.

Măsurat pe `interpolare-polinomiala` → `curbe-bezier`, a doua trecere:
6713 din 6966 pe telefon, 5031 din 5031 pe desktop. Se vede mai tare pe
telefon, unde paginile sunt de două ori mai înalte și o săgeată se apasă
mult mai des decât un buton „înapoi", dar nu era o problemă de telefon.

Acum poziția se reface doar la `POP` — înapoi/înainte din browser, adică
exact gestul căruia browserul îi reface singur derularea pe un site
obișnuit. Un clic pe o legătură e `PUSH`: ai cerut altă pagină, deci o
primești de la început.

Verificat pe 360px și 1280px: toate cele trei apăsări de săgeată ajung la
`scrollY = 0`, „înapoi" din browser reface poziția exactă (6966,
respectiv 5031), iar breadcrumb-ul cu ancoră duce mai departe la secțiune,
la 96px de marginea de sus.
…elefon

„a₂" în colț plus „−2" la mijloc înseamnă două texte suprapuse într-o celulă
care, pe un ecran de 360px, are vreo 19px reali. Litera dubla oricum ceva ce
desenul spune deja: pe ce diagonală stă celula și ce bloc e deasupra ei.

Numele literelor rămân unde chiar spun ceva — în formulele din panoul din
dreapta. Eticheta se scoate și de pe coloana lui d, nu doar de pe a, b și c:
altfel ar fi rămas singura coloană cu litere în colț, adică aceeași
aglomerare, doar mai mică.

Cifra crește de la 34 la 38 de unități, fiindcă acum are celula pentru ea
singură: cel mai lung text desenat are trei semne („x₁", „40") și încape în
cele 94 de unități de lățime interioară.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01D1KzHzp6YwHkoM6AfDYGHv
Pe telefon, bara se rupea pe la 382px, deși butoanele încăpeau: cu
`justify-between`, prisosul se împărțea doar între cele trei grupuri de
nivel întâi, deci golul dintre redare și viteze era de câteva ori cât cel
dintre „reia" și „pornește", iar când prisosul ajungea zero rândul ceda.
Acum toate golurile sunt `gap-1`, deci lățimea cerută e fixă.

Butoanele de viteză trec pe `px-1`: „0.5×" are patru semne mono la 14px,
adică 33,6px de text, iar cu `px-1.5` ieșea 45,6px — peste podeaua de
44px a țintei de atingere, deci butonul ăla singur lățea rândul.

Socoteala: 6 × 44px + 5 × 4px = 284px, dintr-o ramă care lasă lățimea
ecranului − 32 (Container) − 2 (rama) − 16 (`p-2`). Măsurat pe capturi la
350px, 360px și 382px: un singur rând, cu distanțe egale. La 320px se
rupe curat, între grupuri, fără derulare orizontală.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012EvFhxeqEqtCsEsDgRqgN4
Golurile egale și `px-1` de la comitul trecut se aplicau pe toată banda
de sub `sm`, adică și între 400px și 640px — acolo prisosul e destul cât
să nu rupă nimic, iar comenzile strânse la stânga lăsau un gol cât un
buton în dreapta ramei. Pragul se mută la `min-[400px]:`: sub el rândul
are goluri egale și `px-1`, peste el se întoarce `justify-between` și
`px-1.5`, exact așezarea dinainte.

Pragul e scris ca variantă arbitrară fiindcă nu e o treaptă a temei, ci
lățimea de la care rândul are loc să respire.

Măsurat pe capturi la 360px și 399px (un rând, goluri egale), 400px,
450px, 550px și 630px (așezarea veche, întinsă pe toată rama).

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012EvFhxeqEqtCsEsDgRqgN4
…lare

Tabelul „Metodă / M / N" cerea 459px într-o casetă de 252px, deci ultima
coloană se vedea doar dacă dădeai cu degetul. Un `array` n-are unde să se
rupă pe rânduri, așa că singurul pas dinaintea derulării e corpul mai mic.

`FormulaBlock` primește `incapeInCaseta`: măsoară `.katex-display` și îi
scade corpul în `em` până încape, cu prag la 10px pe corpul randat. Măsurat
pe pagină: 360px → 252px fără derulare, rândurile la 12,6px; 375px → 267px,
la 13,4px; peste `sm` nu se schimbă nimic. Spațiile din celule trec de la
`\;` la `\,`, care lățeau tabelul cu 46px degeaba.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SU3AWR3FCM2mXBp7NtLCNQ
Corpul subtitrării e clamp(0.8rem, 1.9cqw, 1.5rem). Sub ~674px de cadru se
oprește pe podeaua de 12,8px și încetează să scadă odată cu desenul, iar banda
pe care o cere crește de la 13,9 % din înălțimea cadrului la 23,2 %. Clipurile
sunt desenate cu ultima linie pe la y = 930 din cele 1080 de unități ale
pânzei — adică fix la 13,9 % —, deci pe telefon propoziția ajungea peste
legende, peste panouri și peste cartonașe.

Podeaua nu se poate coborî: sub ea propoziția nu se mai citește. Cedează
atunci desenul. Cadrul primește o rezervă calculată, din

    (H − p)·0,8622 ≤ H − 0,03·W − 2,5·f,  cu H = 0,5625·W

adică p = max(0, 2,9·f − 0,055·W). Măsurat în browser: 0,11px la 1280 și
19,08px la 360 — pe desktop nu se schimbă nimic, pe telefon SVG-ul se
micșorează cu ~10 % și se centrează singur, având preserveAspectRatio
implicit. Subtitrarea stă pe bottom-0, adică pe marginea cutiei de padding,
deci ocupă exact banda eliberată.

Formula rezervei stă lângă cea a corpului, în Subtitrari.tsx, ca cele două să
nu se poată depărta. `@container` se mută de pe cadru pe `figure`: unitățile
`cq*` se măsoară întotdeauna față de un strămoș, deci cadrul nu-și putea citi
propria lățime ca să-și calculeze rezerva.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01D1KzHzp6YwHkoM6AfDYGHv
Amândouă aveau aceeași cauză: geometrie fixă sub text care se scalează cu
`st`, adică măsuri scrise pentru desktop.

Antetul așeza rândurile la 66 și 40 de unități, dar corpul literei crește
până la 81, respectiv 43,5, pe un cadru îngust — deci al doilea rând urca
peste primul, la orice titlu sau notă de două rânduri. Pasul se ia acum din
corp, cu factori aleși ca la st = 1 să dea exact 66 și 40.

La barele de cost, cifra era ancorată la x = 1580 și unitatea la x = 1720,
amândouă cu corpul înmulțit cu `st`: pe telefon „3.628.800" creștea până sub
„operații". Sunt acum un singur text ancorat la dreapta, cu golul dat de `dx`
scalat, deci nu se mai poate închide. Exponentul lui 2,4 · 10¹⁸ își readuce
linia de bază, ca unitatea să nu rămână ridicată.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01D1KzHzp6YwHkoM6AfDYGHv
Nota despre cererea către YouTube și mențiunea limbii nu spuneau nimic
cititorului în locul acela; atribuirea e tot ce are sens sub cadru.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SU3AWR3FCM2mXBp7NtLCNQ
…rmulă

Filele împărțeau o singură stare, deci alegerea funcției de pe Lagrange o
muta și pe Neville, și pe Spline. Acum fiecare filă își ține `idFunctie`,
`cate`, `noduri` și `xEval`. Nodurile trebuiau să intre acolo, nu doar
funcția: sunt chiar valorile funcției alese pe fila aia, iar `xEval` cade în
intervalul ei — comune, fila de Spline pornea cu nodurile de pe Lagrange
așezate pe altă curbă. „Resetează" privește tot doar fila deschisă.

Lagrange pornește acum pe funcția lui Runge: fila ei e singurul loc rămas
unde se vede un polinom întins peste tot intervalul, iar de când fenomenul
nu mai are filă proprie, acolo se mai poate scoate la iveală trăgând de
numărul de noduri. Neville și Spline rămân pe `x⁵ − 2x³`, cu motivul
măsurat de dinainte: pe `sin(πx)` cele două condiții de capăt ale
spline-ului stau la doi pixeli una de alta.

Evidențierea din „Regula filei" iese cu totul — `evidentiaza`,
`evidentiereaFilei` și învelișurile `\htmlId{…}`, care existau doar ca
ancore pentru ea. Formula rămâne identică la citire, doar uniformă ca stil.
Rândurile îngroșate din „Teoria pe scurt" nu sunt atinse.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WeN5HEwk7M687DDUuVbZpa
`PlotDreapta` era singurul `motion.line` din proiect care lăsa `x1/y1/x2/y2`
exclusiv pe seama lui `animate`; `PlotPunct` le dă de mult și static. Acum
face la fel, deci atributele intră în marcajul scris de React și linia are
geometrie validă din chiar randarea care o inserează, fără să depindă de
momentul în care `motion` apucă să le scrie. `initial={false}` rămâne: el
spune de unde pornește animația, nu ce ajunge în DOM.

Erorile de consolă din nota de restanță **nu s-au putut reproduce** pe
Chrome cu `motion` 13.1.0 — încărcare curată pe `derivare-numerica` și
`ecuatii-neliniare`, pași și schimbări de metodă, zero erori; un
`MutationObserver` pe nodurile `<line>` adăugate și un cârlig pe
`setAttribute` n-au prins nicio scriere de `undefined` sau `NaN`; cele 23 de
linii din pagină au toate atributele numerice. Probabil `initial={false}`
făcea deja `motion` să randeze direct ținta. Reparația rămâne, fiindcă
aliniază piesa la tiparul din `PlotPunct`. Nota din Progress.md e
actualizată cu ce s-a măsurat.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WeN5HEwk7M687DDUuVbZpa
Signed-off-by: SerbaC6 <serbaciumacencu@gmail.com>
@SerbaC6
SerbaC6 merged commit 88daf91 into main Aug 18, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants