Копия пользовательской автопамяти (29 фактов + индекс MEMORY.md) в .claude/memory/, чтобы переносить между машинами через git. README.md — как восстановить в пользовательскую папку на другой машине. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
3.8 KiB
name, description, metadata
| name | description | metadata | ||||||
|---|---|---|---|---|---|---|---|---|
| project_optics_constructor | Конструктор оптических систем в оптической скамье (BenchSim) — что это и как устроено |
|
Оптическая скамья (frontend/js/labs/opticsbench.js, ~4600+ строк) — это 7 режимов-вкладок, каждый отдельный класс/canvas/панель: линза (ThinLensSim), зеркало (MirrorSim), преломление (RefractionSim), Конструктор (BenchSim), призма (PrismSim), интерференция (InterferenceSim), волны (DiffractionSim). Переключение — obSwitchMode(mode).
Конструктор оптических систем (май 2026, коммиты 832efc0…1c7d8e9) — режим freebuild, вкладка «Конструктор» (бывш. «Цепочка линз»). Класс BenchSim — общий 2D-трассировщик:
- Элементы по
xf(0..1), центр на оси: линза (f, ap), зеркало (kind plane/concave/convex, R, ap), диафрагма (gap), экран, призма (apex, n, size), граница сред (n1|n2, Снеллиус+ПВО), стеклянная пластина (n, t, параллельный сдвиг). Источник: предмет/точка/параллель/одиночный луч/лазер, с углом прицеливанияang. Линза/зеркало отсекают лучи вне апертуры (виньетирование); у собирающей линзы метки F/2F. - Трассировка
_traceRay: ближайший элемент по ходу →_interact→ дальше; лимит отражений (зеркала разворачивают ход). Линза — параксиальный кик θ'=θ−y/f (фокус в x+f). Призма — тонкопризменное δ=(n−1)·A + дисперсия_nAtWavelength(n,λ). - Белый свет (общий λ-бар скамьи,
window._obWhiteLight): пучки поOB_SPECTRAL, каждый луч краситсяwavelengthToRGB(wl)→ после призмы спектр. Экран ловит изображение — светящиеся пятна (_drawScreenHits, additive). - UI: динамический инспектор (
_benchUpdateUI,bench-list/bench-props), палитраbenchAdd(type),benchSelect/benchUpdate/benchRemove, пресетыbenchPreset(микроскоп/телескоп/проектор/зеркальная),benchExportPng. ВАЖНО: слайдеры свойств вызываютupdateElement→_redraw(только холст), НЕ_changed— иначе пересборка панели ломает drag слайдера. - Состояние:
benchSim.getState/setState, проброшено в_obGetState/_obApplyState(снимок/embed).
Старый FreeBuildSim/freeSim и функции freeAddLens/freeLensF — legacy, не используются (панель переведена на bench*). Ревью скамьи и план — plans/OPTICS_CONSTRUCTOR.md.
Бэклог: точная двухгранная призма (Снеллиус на гранях), апертурное отсечение лучей вне линзы (сейчас проходят прямо), профиль интенсивности на экране, поворот элементов.
Правило: при правке opticsbench.js поднимать ?v=N у <script src="/js/labs/opticsbench.js?v=N">. См. project_stereo3d_improvements, feedback_no_emoji.