Folds lying on the ground were pushed out by proximity and pulled back by stretch constraints every two frames, so the cloth never settled. Remove the velocity along the proximity push and smooth velocities with the neighbour mean once per frame. Drop scene only. The drop scene is now 40x40 with gap 0.02 and an initial spin, so more folds cross. Add the cloth ICM next steps to the roadmap.
42 lines
4.9 KiB
Markdown
42 lines
4.9 KiB
Markdown
# Roadmap
|
|
|
|
Open ideas for the playground frontend. Tick a box when done.
|
|
|
|
## Quick wins
|
|
|
|
- [ ] **Labyrinth grid size crash**: `labyrinth.component.html` still binds `[gridRows]`; typed sizes above the max crash the page. Same fix as pathfinding (clamp in code, drop the binding).
|
|
- [ ] **Fourier circles slider thumb**: at "Circles: 256" the thumb sits near the left end, like at 30. Check `max`/value binding of the circles `mat-slider` (seen 2026-10-14, not verified).
|
|
- [ ] **Lighthouse gate**: add an `assert` block to `lighthouserc.json` (e.g. performance, accessibility, SEO >= 0.9). Today CI runs the audit but never fails.
|
|
Note: the `@lhci/cli` → lighthouse 13 override in `package.json` is only safe without `assert`. Check it again before you add one.
|
|
- [ ] **robots.txt + sitemap.xml**: static files in `public/`, listing all routes from `app.routes.ts`.
|
|
- [ ] **SEO per algorithm page**: all algorithm routes use `data: { seo: 'ALGORITHMS' }`. Give each one its own key and add `SEO.<KEY>.TITLE` / `DESCRIPTION` to `en.json` and `de.json`.
|
|
- [ ] **nginx security headers**: no CSP, `X-Content-Type-Options`, `Referrer-Policy`, `frame-ancestors` in `nginx.conf` (gzip done). First check with `curl -I https://andreas-dahm.eu/` if the reverse proxy already sets them.
|
|
|
|
## Tests
|
|
|
|
- [ ] `seo.service.ts`: spec for title/meta update on route change and language change.
|
|
- [ ] **Cloth ICM drop specs near timeout**: drop specs in `cloth-icm-solver.spec.ts` take 2.5-3 s each vs Vitest's 5 s default; give them an explicit timeout before a slow CI runner fails them.
|
|
- [ ] Pure logic without specs: `pathfinding-animator.ts`, cloth and pendulum GPU strategies (the math around them, not the shaders), `fractal3d`.
|
|
|
|
## Features
|
|
|
|
- [ ] **Cloth ICM next steps** (page `algorithms/cloth-icm`, CPU; detection + contours in `collision/`, one response file per paper in `response/`):
|
|
- [x] **Fold flutter damping**: drop cloth never settled (fold vertices flutter at 0.6-1.0 m/s). Done 2026-11-01: cause was the proximity push on folds lying on the ground (push out, next frame stretch constraints pull back, ~1 m/s chatter), not XPBD. Velocity smoothing (neighbour mean) + proximity velocity clamp, drop scene only, drop gap 0.035 -> 0.02: after landing (frames 600-900) max speed median 0.107, p90 0.207 (was 1.2 / 2.0 at 35x35), mean 0.012, same fall and drape, landing frame 20 as before, 11-12 ms/frame headless on 40x40 (was 10.3 on 35x35). Tangled scene bit-identical.
|
|
- [ ] **Bridson 2002**: CCD + velocity-level repulsion, so fast motion cannot jump through the gap; allows a finer drop grid. Large.
|
|
- [ ] **Papers extending ICM**: Ye et al. 2017 (untangling via discrete collision detection), Buffet et al. 2019 (implicit untangling, layered clothing). New `response/` file + scene each. Medium per paper.
|
|
- [ ] **GPU port**: detection on the GPU, contours stay on the CPU (serial walk). Very large.
|
|
- [ ] **Cloth ICM drop scene** (state): hits mostly solved, cloth settles. Drop scene 40x40 (spacing 0.145, 5.7 m cloth, user-set), gap 0.02, initial spin 1.5 rad/s around y, one mid-frame proximity re-detection (every 5), velocity smoothing + proximity velocity clamp. Frames 100-240: ICM on avg 1.0 hits per frame (59 % of frames at 0, max 10), ICM off avg 9.8 (max 43), bounded over 900 frames (max 92 after frame 150). Settled: max vertex speed median 0.107 / p90 0.207 m/s (frames 600-900, ICM on; target was 0.1; ICM off median 0.089), mean 0.012, rare snaps to 0.6-0.7. 11.4 ms/frame headless (60 fps budget 16.7). Spin sweep (values above ~0.75 rad/s are capped at the rim to 3 m/s in the first frame; ICM on / off hits, ratio): none 0.31 / 3.9 (12.7x); 0.1 2.6 / 4.3; 0.4 3.5 / 5.8; 0.7 1.3 / 5.1; 1.5 1.0 / 9.8 (chosen, most hits); 3 0.7 / 7.2 (rest speed worse). Finer grids or a gap >= 0.04 made ICM off blow up before the fix (not re-measured). Next: Bridson 2002 CCD + velocity repulsion.
|
|
- [ ] **Shareable demo state**: keep demo settings in query params (fractal zoom/center, sorting algorithm, seeds). Opening the link restores the view.
|
|
- [ ] **New algorithm demos** (pattern: route + `RouterConstants` + `AlgorithmsService` entry + i18n + information panel):
|
|
- [x] Boids / flocking (GPU path like cloth)
|
|
- [x] **Physarum** (slime mold transport networks, trail map on GPU compute, CPU fallback)
|
|
- [ ] Boids 3D (later, 2D done)
|
|
- [x] **Voronoi / Delaunay** (Bowyer-Watson, CPU + Canvas 2D)
|
|
- [x] A* vs Dijkstra side by side (reuse pathfinding)
|
|
- [x] Fourier epicycles
|
|
- [x] Reaction-diffusion (Gray-Scott) shader (reuse the fractal shader setup)
|
|
- [x] **Lenia** (continuous Game of Life, shader ping-pong like Gray-Scott)
|
|
- [x] **Fluid (Stable Fluids)** (velocity, pressure and dye shader ping-pong like Lenia)
|
|
- [x] **Cloth self-collision (ICM)** (Volino and Magnenat-Thalmann 2006, CPU: BVH with normal-cone culling, contour tracing, intersection contour minimization)
|
|
- [x] **Ant colony** (ACO on TSP, CPU + Canvas 2D)
|