eb5593333c
Источники: одиночный луч и лазер (узкий пучок) + угол прицеливания (point/single/laser/parallel наклоняются по ang). Новые элементы: - граница сред: Снеллиус на вертикальной плоскости + полное внутр. отражение (проверено: 30°→19.47°, ПВО при 50°) - стеклянная пластина: параллельный сдвиг (преломление вход/выход) Улучшения: - отсечение апертурой (лучи вне линзы/зеркала поглощаются — виньетирование) - метки F и 2F у собирающей линзы - числовые значения у слайдеров инспектора (без пересборки панели) bump opticsbench.js?v=5 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
53 lines
6.7 KiB
Markdown
53 lines
6.7 KiB
Markdown
# Конструктор оптических систем (в составе оптической скамьи)
|
||
|
||
Цель: превратить режим «Цепочка линз» (`FreeBuildSim`, только линзы) в полноценный **конструктор оптических систем** на базе общего 2D-трассировщика лучей с разнотипными элементами.
|
||
|
||
Файлы: `frontend/js/labs/opticsbench.js` (новый класс `BenchSim`), панель `#ob-ctrl-freebuild` и canvas `ob-free-canvas` в `frontend/lab.html`, вкладка `ob-tab-freebuild` (переименовать «Конструктор»).
|
||
|
||
Опирается на: реестр состояния `_registerSimState('opticsbench', …)`, OB_FX-слой, инфраструктуру вкладок `obSwitchMode`.
|
||
|
||
Статус: [ ] todo · [~] в работе · [x] готово
|
||
|
||
## Архитектура — общий 2D-трассировщик
|
||
|
||
- Сцена: горизонтальная ось, элементы на позициях `xf` (0..1 по ширине), центр на оси.
|
||
- Луч `{x,y, dx,dy(ед.), wl, alive, bounces}`; трассировка: найти ближайший элемент по ходу → применить взаимодействие → продолжить (до выхода за холст / поглощения / лимита отражений).
|
||
- Источники: предмет-стрелка, точечный, параллельный пучок.
|
||
- Элементы (interact-функции):
|
||
- **Линза** (f, апертура): параксиальный «кик» θ' = θ − y/f.
|
||
- **Зеркало** (плоское/вогнутое/выпуклое, R): разворот хода + кик θ' для сферического (f=R/2).
|
||
- **Диафрагма/щель** (зазор): поглощает вне зазора.
|
||
- **Экран/детектор**: поглощает, фиксирует точку (пятно/профиль).
|
||
- **Призма** (угол при вершине, n): преломление по Снеллиусу на двух гранях + дисперсия по λ.
|
||
|
||
## Фазы
|
||
|
||
### Фаза 1 — Ядро трассировщика + линза/зеркало/диафрагма/экран + источники — [x]
|
||
- [x] 1.1 Класс `BenchSim`: модель элементов, источник, выбор/перетаскивание (pointer-слушатели на canvas + capture, dispose).
|
||
- [x] 1.2 Трассировщик: линза (параксиальный кик, фокус в `x+f` — проверено численно), зеркало плоск./сфер. (разворот хода + кик, лимит отражений — без зацикливания), диафрагма (поглощение вне зазора), экран (фиксация точки); источники предмет/точка/параллель.
|
||
- [x] 1.3 Рендер: лучи по λ (`_obRayColor`), элементы с подписями, выделение, OB_FX-слой.
|
||
- [x] 1.4 Динамический инспектор: палитра «+ элемент» (линза/зеркало/диафрагма/экран/призма), список схемы, свойства выбранного, удаление. Слайдеры перерисовывают только холст (не ломают drag).
|
||
- [x] 1.5 Встроено в режим `freebuild` (вкладка «Конструктор»), пресеты систем (микроскоп/телескоп/проектор/зеркальная), сохранение состояния в снимок.
|
||
- Призма пока — грубый дефлектор-placeholder (настоящий Снеллиус в 2.2).
|
||
|
||
### Фаза 2 — Сферические зеркала + призма + дисперсия — [x]
|
||
- [x] 2.1 Вогнутое/выпуклое зеркало — сделано ещё в Фазе 1 (кик f=R/2, разворот хода, лимит отражений).
|
||
- [x] 2.2 Призма: тонкопризменное отклонение δ=(n−1)·A к основанию + хроматическая дисперсия n(λ). Белый свет — пучки по `OB_SPECTRAL`, каждый луч красится по λ (`wavelengthToRGB`); до призмы совпадают, после — расходятся в спектр. Управление через общий λ-бар скамьи. Проверено численно (фиолетовый отклоняется сильнее красного).
|
||
|
||
### Фаза 3 — Сохранение состояния + полировка — [x]
|
||
- [x] 3.1 Сохранение состояния конструктора — сделано в Фазе 1 (`_obGetState/_obApplyState` + `bench`).
|
||
- [x] 3.2 Пресеты систем (микроскоп/телескоп/проектор/зеркальная) — Фаза 1; экспорт PNG (`benchExportPng`, кнопка «Снимок PNG»).
|
||
- [x] 3.3 Экран ловит изображение: светящиеся пятна (additive `lighter`) в точках попадания лучей, по λ — видно формирование изображения и спектр.
|
||
|
||
### Фаза 4 — Контент и улучшения — [x]
|
||
- [x] Источники: **одиночный луч** и **лазер** (узкий пучок) + **угол прицеливания** (point/single/laser/parallel наклоняются на `ang`).
|
||
- [x] Новые элементы: **граница сред** (Снеллиус на вертикальной плоскости + ПВО — проверено: 30°→19.47°, ПВО при 50°) и **стеклянная пластина** (параллельный сдвиг, преломление на входе/выходе).
|
||
- [x] Отсечение апертурой: лучи вне апертуры линзы/зеркала поглощаются (видно виньетирование, размер апертуры значим).
|
||
- [x] Метки **F и 2F** у собирающей линзы.
|
||
- [x] Числовые значения у слайдеров инспектора (живое обновление без пересборки панели).
|
||
|
||
Бэклог: точная двухгранная призма (Снеллиус на гранях вместо тонкопризменного); профиль интенсивности на экране; поворот/наклон элементов и 2D-перетаскивание (yf); делитель пучка (форк луча); удаление legacy `FreeBuildSim`.
|
||
|
||
---
|
||
История: создан 2026-05-30.
|