# Корабль-матка — исследование формы, редакция 02

Интерактивная браузерная сцена на локальном Three.js. По уточнению пользователя диорама Töre задаёт только композицию. Геометрия переработана по чертежам и реальным фотографиям. Это составной технический этюд; историческая идентичность и совместная эксплуатация изображённых объектов не утверждаются.

## Запуск

Из корня репозитория: `python -m http.server 8765 --bind 127.0.0.1`, затем <http://127.0.0.1:8765/mothership/>. Сборка и CDN не нужны. Остальные экспонаты не изменены. Публикация не выполнялась.

## Что изменилось во второй редакции

- Носитель: плавные продольные обводы, подъём палубы к носу, замкнутый транец, ватерлиния и окраска подводной части, ярусная надстройка со скруглениями, крылья мостика, рамы окон, двери, решётки, спасательные плоты, леера, трапы, решётчатая мачта, такелаж, якорное и палубное оборудование.
- Кран: коробчатые балки со скруглёнными кромками, фланцы, рёбра, оси, болты основания, силовые распорки, шланги, кабина, лестницы, барабаны и блоки. Четырёхточечная траверса обходит рубку. Канаты имеют объём: 32 цилиндрических участка на ветвь.
- Минилодка: профиль и план ориентированы на схему Минеева — округлый нос, суженная корма, широкий корпус, плоский кожух, низкая скошенная рубка, наружные контейнеры, люки, отверстия свободного затопления, профилированные рули и изогнутые лопасти винта.
- Большая подлодка имеет собственные обводы и высокую переднюю рубку с рулями. На кормовых опорах установлена та же минилодка `createMini()` в том же масштабе, что и под краном. Ложементы повторяют сечения её корпуса. Это композиционное решение пользователя; архивный DSRV с фотографии не воспроизводится.
- Вместо декоративной плиты и параллельных полос воды — протяжённая поверхность с мелкой рябью, туманом у горизонта, локальным контактом с корпусом и каплями при подъёме.

## Источники и достоверность

[Сопоставление деталей с источниками, ссылки и атрибуция фотографий](references/README.ru.md).

Основные визуальные основания: палубные планы Atlantis (WHOI), схема «Пираньи» в статье Ю. К. Минеева («Судостроение» 5/2004, с.49), фото подъёма AS-26 судном SS-750 (Mil.ru, 2020), фото USS Pintado с DSRV-1 (NHHC KN-24996, 1977).

Сведения не объединяются в вымышленный исторический факт. Носитель не называется Atlantis/Belos, минилодка не называется Spiggen II. Форма минилодки нормализована до 12 условных метров и не является полноразмерной моделью проекта 865. Сечения, детали, размеры и кинематика, для которых нет рабочих чертежей, остаются допущениями.

## Модули

| Файл | Ответственность |
|---|---|
| `parameters.js` | Условные метры, оси, размеры, происхождение данных |
| `geometry.js` | Общие объёмные примитивы, профили, леера, люки, объединение статических мешей по материалам |
| `carrier.js` | Корпус, палубы, надстройка, оборудование, ложементы и шарнирные зажимы |
| `submarines.js` | Общая модель обеих минилодок, большая лодка, профильные ложементы и винты |
| `crane.js` | Кран, вращающиеся блоки/барабаны, траверса, крюки, объёмные канаты |
| `hydrostatics.js` | Общий профиль минилодки и интеграл погружённого объёма |
| `models.js` | Сборка независимых моделей |
| `timeline.js` | Чистая функция `sample(seconds)`, две отдельные последовательности, покачивание |
| `effects.js` | Детерминированные капли и контакт с водой |
| `scene.js` | Камера, свет, вода, привязки и обновление модели |
| `app.js` | Интерфейс и часы |
| `i18n.js` | Русский, шведский и английский интерфейс, справка и 23 этапа цикла |

## Механика

X направлена к носу судна, Y вверх, Z поперёк. Вода Y=0. Палуба рабочей зоны Y=2,1. Носитель 52 × 10 условных метров. Вертикальная ось крана X=−18, Z=0; вылет 12,5 м; поворот от 0 до −90°. Центр лодки на опорах Y=3,65, при переносе Y=5,5, на плаву Y=−0,25.

0–76 с — спуск; 76–154 с — самостоятельная последовательность подъёма. Между этапами используется quintic-интерполяция с нулевой скоростью и ускорением на границах. Родитель лодки никогда не меняется: все положения определяются в мировых координатах.

Во время переноса небольшой ограниченный снос подвеса (не более 0,07 м) отклоняет реальные ветви от вертикали. До подключения свободная лодка имеет небольшой крен, дифферент и вертикальное движение; эти движения плавно исчезают при натяжении. Качка корабля не добавлена. Это визуальная квазистатика, не динамический решатель нагрузок.

Погружённый объём интегрируется по 120 эллиптическим сечениям того же профиля, из которого построен корпус. Для каждого сечения используется точная площадь сегмента эллипса под плоскостью воды. Нагрузка при переходе в воду: `max(0, 1 - V(y) / V(floatY))`. Масса условно соответствует водоизмещению при выбранной осадке. Рули, рубка, контейнеры, динамические силы, сопротивление и сжимаемость в этом интеграле не учтены.

Сначала плавучесть полностью принимает нагрузку (59 с), затем стропы ослабляются (59–61 с). При подъёме сначала выбирается слабина, затем лодка выходит из воды и нагрузка растёт с уменьшением вытесненного объёма. Барабаны и шкивы вращаются соответственно длине выдаваемого каната и своим радиусам. Запасовка иллюстративная, не восстановленная заводская схема. После посадки нагрузка переходит на ложементы; стропы убираются, зажимы закрываются.

## Управление

Ракурс «Большая подлодка» показывает минилодку, профильные ложементы и четыре шарнирных захвата крупно. Ракурс «Надстройка» позволяет проверить сопряжение надстройки с палубой. Переключатели «Надводный кран» / «Подводный носитель» выбирают панель управления; у циклов независимые часы, пауза, перемотка и скорость.

Подводный цикл (`companion-timeline.js`, 180 с): совместное погружение, открытие захватов, вертикальное отделение, боковой отход, движение вне габарита носителя, обход к корме. Возврат начинается на 96 с: выравнивание по оси, подход минилодки передним ходом (104–124), зависание и совмещение (124–132), вертикальная посадка (132–146), закрытие захватов (146–154), совместное всплытие (154–174). Носитель сохраняет положение во время подхода и посадки; он не всплывает навстречу минилодке.

Принцип активной посадки малого аппарата и последующей фиксации экипажем носителя подтверждён NAVSHIPS 0905-120-0010, §5-35, рис. 6-5. Направление подхода, обход, глубина 12,7 условного метра и темп — решения демонстрации; источник не задаёт их как обязательную процедуру. Минилодка сцены не является DSRV. Балласт, маневровые движители и полная гидродинамика не моделируются. Камера следует по глубине и расширяет кадр при отходе; вода становится прозрачнее для осмотра.

Язык выбирается в шапке: Русский / Svenska / English. Прямые ссылки: `?lang=ru`, `?lang=sv`, `?lang=en`. Выбор сохраняется в браузере; параметр URL имеет приоритет. Переключение языка сохраняет время, состояние воспроизведения и ракурс.

Вращение, масштаб и сдвиг — OrbitControls. «Спуск»/«Подъём» переходят к началу выбранной части; «Сначала» возвращает на палубу и останавливает. Ползунок ставит на паузу. В области сцены: пробел — пауза, стрелки — ±2 с. При стартовой загрузке анимация неподвижна. Все эффекты зависят от времени: обратная перемотка воспроизводит тот же кадр.

## Проверка

`node tests/mothership-companion.browser.cjs` проверяет подводный цикл с шагом 0,125 с: блокировку захватов до погружения, освобождение до отделения, отсутствие пересечений консервативных габаритов корпуса/рубки/кормового руля носителя с габаритами групп треугольников минилодки, подход передним ходом, неподвижность носителя при посадке, замыкание цикла, независимость часов, переводы, клавиатуру, кнопки и мобильную ширину. Также проверяется, что нижняя надстройка находится внутри контура палубы. Это ограниченные проверки габаритов, не универсальный поиск всех столкновений.

`node tests/mothership.browser.cjs http://127.0.0.1:8765` (Playwright и установленный Chrome; для другого канала — `CHROME_CHANNEL`).

`node tests/mothership-locales.browser.cjs` проверяет совпадение геометрии и масштаба обеих минилодок, три языка, все этапы и справку, сохранение времени при переключении, запоминание языка, прямые ссылки и мобильную компоновку.

Проверки охватывают весь цикл с шагом 0,125 с. Габарит берётся из фактических мешей минилодки, включая рули, проушины и винт. Он проверяется относительно бокового контура и высоты ограждения при переносе. Минимальный боковой зазор по этому консервативному габариту после доработки — **1,21 м**. Это ограниченная проверка габаритов, не универсальный поиск всех пересечений треугольников.

Дополнительно проверяются непрерывность (максимум 0,00271 м за 0,001 с), замыкание цикла, совпадение концов стропов с проушинами (ошибка < 0,000001 м), воспроизводимость кадров при перемотке, монотонная разгрузка без преждевременной слабины, симметрия интеграла плавучести, кнопки, пауза, скорости, повторный запуск, диалог, камера и ширины 1440/1024/820/390 px. Статические детали объединены по материалам: около 100 вызовов отрисовки в проверенном ракурсе, вместо отдельных вызовов для каждого болта.

Снимки: `output/mothership/`. Диагностика: `window.mothership.state`, `window.mothership.seek(seconds)`. Проверка консоли: ошибок нет.
