tiennm99 27ec89fe89 fix(dinh-ly-pythagoras): preserve area through the shear proof
The animation interpolated each vertex straight from the leg square to its
target rectangle, which is not area preserving: the square collapsed to
about a ninth of its area midway, so a lesson about shear preserving area
showed the opposite. The morph is now a composition of shears and a quarter
turn built on geom-engine/transforms.js, each of determinant 1, so the area
is exactly a squared and b squared at every frame.

The square on the hypotenuse also reached outside the viewBox. The canvas
is larger and the legs are capped so every polygon stays on screen for any
position of the draggable vertex.
2026-09-15 10:06:57 +07:00
2026-04-30 21:44:43 +07:00
2026-08-17 13:15:15 +07:00
2026-04-30 21:44:43 +07:00
2026-04-30 21:44:43 +07:00
2026-08-17 13:15:15 +07:00
2026-08-17 13:15:15 +07:00
2026-08-17 13:15:15 +07:00
2026-04-30 21:44:43 +07:00
2026-04-30 21:44:43 +07:00

MathMax

Toán tương tác cho học sinh THCS Việt Nam (lớp 6-9). Số học, Đại số, Hình học qua kéo-thả và minh hoạ trực quan.

Status

8 bài đã ra mắt — số học, đại số, hình học đều có ít nhất hai bài.

  • Lớp 6 — Ước chung lớn nhất (Euclid): /so-hoc/uoc-chung-lon-nhat/
  • Lớp 6 — Sàng Eratosthenes: /so-hoc/sang-eratosthenes/
  • Lớp 7 — Hiệu hai bình phương: /dai-so/hieu-hai-binh-phuong/
  • Lớp 7 — Đồ thị y = ax + b: /dai-so/duong-thang/
  • Lớp 7 — Định lý Pythagoras: /hinh-hoc/dinh-ly-pythagoras/
  • Lớp 7 — Tam giác bằng nhau (SSS): /hinh-hoc/tam-giac-bang-nhau/
  • Lớp 8 — Tam giác đồng dạng: /hinh-hoc/tam-giac-dong-dang/
  • Lớp 9 — Góc nội tiếp: /hinh-hoc/goc-noi-tiep/

Develop

Yêu cầu: Node 24+, npm.

npm install
npm run dev       # http://localhost:5173/mathmax/
npm test          # Vitest (geom-engine unit tests)
npm run check     # svelte-check + JSDoc strict
npm run build     # Static output → build/
npm run preview   # Serve build/

Deploy

Auto-deploy lên GitHub Pages từ main qua actions/deploy-pages@v4. Xem RUNBOOK.md để rollback / chuyển domain.

Live URL: https://tiennm99.github.io/mathmax/

Architecture

  • Static: SvelteKit + @sveltejs/adapter-static, paths.base = '/mathmax', output build/.
  • Styling: Tailwind 3 (PostCSS) + Be Vietnam Pro (woff2 qua @fontsource). Tick palette colors.pair.{1,2,3,4} được khai báo trong tailwind.config.js.
  • Language: JavaScript only (Svelte 5, JSDoc qua jsconfig.json với checkJs: true).
  • Math engines: src/lib/geom-engine/ (vec, triangle, circle, ticks, transforms), src/lib/numtheory-engine/ (gcd, lcm, gcdSteps, sieve), src/lib/algebra-engine/ (linear). Module thuần, không phụ thuộc DOM. Vitest unit tests đi kèm.
  • Math typography: src/lib/components/tex.svelte — wrapper KaTeX duy nhất. SSR qua renderToString, không cần JS phía client để hiển thị.
  • Lessons: mỗi bài là một +page.svelte; copy tiếng Việt colocate trong src/lib/lessons/<slug>/copy.vi.js.
  • Drag: Svelte action use:draggable (src/lib/actions/draggable.svelte.js) — Pointer Events + bàn phím mũi tên cho a11y.
  • i18n: Hiện chỉ có tiếng Việt. Site chrome ở src/lib/i18n/site.vi.js. English thêm sau bằng cách tạo *.en.js song song.

License

Apache-2.0. Xem LICENSE.

S
Description
MathMax — Toán tương tác cho học sinh THCS Việt Nam (lớp 6-9). Static site.
Readme Apache-2.0
720 KiB
Languages
Svelte 53.9%
JavaScript 45.5%
CSS 0.4%
HTML 0.2%