Files
Learn_System/.claude/memory/project_optics_constructor.md
Maxim Dolgolyov 8a7091ddec chore(memory): снимок файлов памяти Claude в репозиторий для переноса
Копия пользовательской автопамяти (29 фактов + индекс MEMORY.md) в
.claude/memory/, чтобы переносить между машинами через git.
README.md — как восстановить в пользовательскую папку на другой машине.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-05 08:32:16 +03:00

3.8 KiB
Raw Permalink Blame History

name, description, metadata
name description metadata
project_optics_constructor Конструктор оптических систем в оптической скамье (BenchSim) — что это и как устроено
node_type type originSessionId
memory project e04a2ab1-2fce-4387-9ec4-7f3f2fb6d65c

Оптическая скамья (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.