Тапни по строке — отметить. По кружку справа — назначить ответственного. Всё сохраняется на устройстве и работает оффлайн.
0/0
0%
Такелаж — это всё, что держит мачту и управляет парусами. Делится на стоячий (тросы, удерживающие мачту — их не трогают) и бегучий (тросы и шкоты, которыми поднимают и настраивают паруса).
Схема яхты
Базовый шлюп · вид сбоку
Бегучий такелаж — как тянем
Тапни на сценарий — увидишь какой конец и куда
Стоячий такелаж
Не трогаем в плавании · только проверяем глазами
Бегучий такелаж
Все «концы», которыми работаем
Паруса и детали
Что во что превращается под ветром
Части яхты: снаружи и внутри
Полный словарь - что где находится на яхте
Курсы относительно ветра — куда смотрит нос яхты по отношению к ветру. От этого зависит, как стоят паруса, как идёт яхта и какие манёвры безопасны. Ниже — роза курсов: тапни по любому сектору, чтобы прочитать, что делать.
Роза курсов
Тапни на сектор — увидишь, что это и как работают паруса
Тапни на любой курс — увидишь, как настраиваются паруса и куда смотрит лодка
Заход и отход ветра
Куда поворачивается ветер — и что это значит для нас
Поворот и смена галса
Как яхта переходит с одного галса на другой
Навигация — как мы определяем, где мы и куда идём. На море нет дорог, поэтому считаем углы и расстояния от севера. Главная задача: пересчитать показания компаса в настоящий курс на карте, и наоборот.
1° / 1' / миля / узел
Базовые меры — почему всё считается через широту
Три «севера»: истинный, магнитный, компасный
Тапни на дугу — увидишь, что это и зачем
Тапни на любую дугу или направление
Перевод курсов: ИК ↔ МК ↔ КК
Как из показаний компаса получить курс на карте
Курс, пеленг, КУ, HDG, COG
Разные углы — для разных задач
Обратный пеленг
Когда смотрят на тебя — какой у них пеленг на тебя
Приливы и течения
Правило двенадцатых, расчёт высоты, влияние течения на курс
Морская карта: основные символы
Что означают значки на навигационной карте
МППСС — Международные правила предупреждения столкновений судов. На простом языке: кто кому уступает, как сигналить и как не врезаться. Полная редакция — 38 правил, ниже самые важные для нас.
Кто кому уступает
Иерархия — сверху вниз: те, кто ниже, уступают тем, кто выше
Полный официальный перечень — нумерация совпадает с документом и сайтом. Простым языком, без юридических формулировок. Сложные термины подсвечены — нажми, чтобы прочитать значение.
VHF-радиостанция (УКВ) - главное средство связи на море. Канал 16 - экстренный, его слушают ВСЕ суда и береговые станции. На экзамене нужно знать каналы, процедуры вызова и сигналы бедствия.
Каналы VHF
Какой канал для чего - запомни 16-й и рабочие
MAYDAY - угроза жизни
Тонем, горим, тяжёлая травма - канал 16
PAN-PAN - срочность
Серьёзная ситуация, но прямой угрозы жизни пока нет
SECURITÉ - безопасность
Навигационное предупреждение для всех
Фонетический алфавит NATO
Название яхты и позывной передают по буквам
DSC - цифровой вызов
Digital Selective Calling - автоматический вызов одной кнопкой
Правила эфира
Как вести себя на связи
Морские узлы - на экзамене нужно уметь вязать минимум 6-8 основных узлов. Каждый узел - для своей задачи. Неправильный узел может развязаться в критический момент или, наоборот, затянуться так, что не развязать.
Основные узлы
Тапни на узел - увидишь для чего он и как вязать
Где какой узел
Краткая шпаргалка - ситуация и узел
Безопасность на яхте - человек за бортом (MOB) - самая опасная ситуация. На экзамене спрашивают порядок действий, сигналы бедствия и снаряжение безопасности.
Человек за бортом (MOB)
Порядок действий - выучить наизусть
Снаряжение безопасности
Что должно быть на борту и где
Сигналы бедствия
Приложение IV МППСС - все способы позвать на помощь
Пожар на борту
Порядок действий при пожаре
Метео: шкала Бофорта
Сила ветра - от штиля до урагана
Облака: что они предсказывают
Простейшие признаки изменения погоды
Местные ветры Средиземноморья
Знать, если ходишь в Хорватии, Греции, Турции
Система навигационных знаков IALA (регион A - Европа). Буи и знаки показывают фарватер, опасности и направления. Цвета и формы - НЕ случайные, их нужно знать наизусть.
Латеральные знаки
При входе с моря: красный - СЛЕВА, зелёный - СПРАВА
Кардинальные знаки
Показывают с какой стороны обходить опасность
Специальные знаки
Отдельная опасность, безопасная вода, спецзоны
Мнемоника
Как запомнить кардинальные знаки
Якорная стоянка - одна из ключевых тем на экзамене. Нужно знать: как выбрать место, сколько цепи травить, как ставить и сниматься, и что делать если якорь ползёт.
Типы якорей
Какой якорь на какой яхте и в каком грунте
Scope: длина цепи
Главное правило - сколько травить
Выбор места якорной стоянки
На что смотреть перед тем как бросать
Постановка на якорь
Пошаговая процедура
Снятие с якоря
Пошаговая процедура
Якорная вахта и дрейф
Как понять что якорь ползёт
Команды на борту - стандартные голосовые команды капитана и экипажа. На экзамене проверяют что ты знаешь правильные команды и их порядок. Команды на русском, международные - на английском.
Команды при отходе/подходе
Марина, швартовка, мурингование
Команды под парусами
Постановка, уборка, повороты
Команды при якорной стоянке
Постановка и снятие с якоря
Экстренные команды
Человек за бортом, пожар, столкновение
Морской словарь — все термины из этого приложения с расшифровкой. Поиск ищет по слову и по тексту определения.
Saved · offline
Made by Vladyslav Zaiets
Кто отвечает за пункт?
Можно выбрать нескольких.
Погода и ветра - шкала Бофорта, местные ветра Средиземноморья, глобальная циркуляция, шквалы. Знать для экзамена и для реальных переходов.
Шкала Бофорта
Сила ветра: баллы, узлы, описание моря
Балл
Название
Узлы
м/с
Море
0
Calm (штиль)
0
0-0.2
Зеркало
1
Light air
1-3
0.3-1.5
Рябь
2
Light breeze
4-6
1.6-3.3
Мелкие волны
3
Gentle breeze
7-10
3.4-5.4
Слабое волнение
4
Moderate breeze
11-16
5.5-7.9
Барашки, 1-1.5м
5
Fresh breeze
17-21
8.0-10.7
Барашки повсюду, 2-2.5м
6
Strong breeze
22-27
10.8-13.8
Пена, 3-4м
7
Near gale
28-33
13.9-17.1
Пенящиеся гребни, 4-5.5м
8
Gale (шторм)
34-40
17.2-20.7
Полосы пены, 5.5-7.5м
9
Strong gale
41-47
20.8-24.4
Высокие волны, 7-10м
10
Storm
48-55
24.5-28.4
Очень высокие волны, 9-12м
11
Violent storm
56-63
28.5-32.6
Исключительно высокие, 11-16м
12
Hurricane
64+
>32.7
Воздух наполнен пеной, >14м
Местные ветра Средиземноморья
Знать для безопасного плавания в регионе
Ветер
Регион
Характеристика
Мельтеми (Etesian)
Эгейское море, лето
Сильный сухой N ветер. Июль-август до 7-8 баллов. Днем дует, ночью стихает. Усиливается в проливах (Вентури).
Темная полоса на горизонте. Быстро растущие Cumulonimbus (наковальня видна за 20-30 миль). Темная линия на воде = фронт порыва. Резкое падение давления. Молнии.
Действия
1) Зарифить ДО прихода. 2) Закрыть люки и иллюминаторы. 3) Жилеты, страховочные. 4) Навигационные огни. 5) Зафиксировать все на палубе. Ветер: 10->40+ уз за минуты.
Длительность
15-30 минут. После фронта ветер может резко сменить направление. Дождь кончается быстрее ветра.
Атмосферное давление и барометр
Нормальное давление 1013 мб (гПа). Барометр - главный инструмент прогноза на борту
Изменение
Скорость
Что ожидать
Устойчиво падает
<1 мб/ч
Обычный фронт. Ухудшение погоды через 12-24ч. Подготовиться.
Кратковременное улучшение. Может смениться новым фронтом.
Закон Buys Ballot
Правило
Встань спиной к ветру (Сев. полушарие): низкое давление слева, высокое - справа. Центр депрессии слева и чуть впереди.
Применение
Определить положение центра циклона без барометра. Если ветер усиливается и заходит по часовой (veers) - депрессия проходит севернее. Если backing - южнее.
Юж. полушарие
Наоборот: низкое давление справа.
Погодные фронты
Теплый, холодный, окклюзия - что несет каждый фронт
Тип фронта
Облака
Давление
Ветер
Осадки
Температура
Теплый (warm front)
Ci -> Cs -> As -> Ns (постепенно снижаются)
Плавно падает до прохождения, стабилизируется после
Veers (по часовой в Сев. полуш.). Заходит из S/SE в S/SW
Международные флаги (International Code of Signals). Однофлажные сигналы, комбинации бедствия. Обязательно знать Alpha, Bravo, Oscar, November+Charlie, Quebec.
Однофлажные сигналы
Каждый флаг имеет стандартное значение
Флаг
Значение
Alpha (A)
У меня водолаз. Держитесь в стороне, малым ходом.
Bravo (B)
Опасный груз: погрузка/выгрузка/перевозка.
Charlie (C)
Да (утвердительный ответ).
Delta (D)
Держитесь в стороне, маневрирую с трудом.
Echo (E)
Изменяю курс вправо.
Golf (G)
Требую лоцмана.
Hotel (H)
У меня лоцман на борту.
India (I)
Изменяю курс влево.
Kilo (K)
Желаю установить связь.
Lima (L)
Немедленно остановите судно.
November (N)
Нет (отрицательный ответ).
Oscar (O)
Человек за бортом!
Papa (P)
Судно выходит в море (Blue Peter). Все на борт!
Quebec (Q)
Судно здорово, прошу свободную практику (карантинный флаг).
Victor (V)
Требую помощи.
Whiskey (W)
Требую медицинской помощи.
Foxtrot (F)
Потерял управление. Свяжитесь со мной.
Juliet (J)
Пожар на борту, держитесь в стороне.
Mike (M)
Судно остановилось и не движется.
Romeo (R)
Самостоятельного значения не имеет.
Sierra (S)
Мои двигатели работают на задний ход.
Tango (T)
Держитесь в стороне, веду траловый лов.
Uniform (U)
Вы идете в опасном направлении.
X-ray (X)
Прекратите намерения, следите за моими сигналами.
Yankee (Y)
Мой якорь ползет.
Zulu (Z)
Мне нужен буксир.
Комбинации бедствия
Комбинация
Значение
N над C
Сигнал бедствия. Международно признанный.
Флаг + вымпел
Цифровой вымпел уточняет значение буквенного флага.
На экзамене: A (водолаз), B (опасный груз), F (disabled), G (лоцман), M (stopped), O (MOB), Q (карантин), S (astern), T (trawling), U (danger), Y (dragging anchor), N+C (бедствие). Полный набор 26 флагов.
Части яхты и морская терминология. Размерения, стороны, стоячий и бегучий такелаж, ключевые конструктивные элементы.
Размерения и стороны
Термин (EN)
Русский
Описание
LOA (Length Overall)
Полная длина
От крайней точки носа до крайней точки кормы.
LWL (Length Waterline)
Длина по ватерлинии
Длина корпуса на уровне воды. Влияет на скорость.
Beam
Ширина
Максимальная ширина корпуса.
Draft
Осадка
От ватерлинии до нижней точки киля. Определяет мин. глубину.
Freeboard
Надводный борт
От ватерлинии до верхней кромки палубы.
Displacement
Водоизмещение
Вес вытесненной воды = вес яхты.
Port
Левый борт
Красный огонь. Запомнить: Port = Left = Red (4 буквы).
Starboard
Правый борт
Зеленый огонь.
Bow
Нос
Передняя часть яхты.
Stern
Корма
Задняя часть яхты.
Windward
Наветренная
Сторона, откуда дует ветер.
Leeward
Подветренная
Сторона, куда дует ветер. Произносится "люард".
Конструкция и такелаж
Термин
Описание
Keel (киль)
Утяжеленный плавник снизу. Препятствует дрейфу, обеспечивает остойчивость.
Rudder (руль)
Подвижная пластина на корме. Управление курсом через штурвал/румпель.
Tiller (румпель)
Рычаг руля. Повернуть от себя = нос идет к тебе. Обратно штурвалу!
Helm (штурвал)
Колесо управления. Вращение как автомобильный руль.
Ветер строго сзади. Опасность непроизвольного поворота фордевинд (gybe). Грот и стаксель на разных бортах (goose wing).
Маневр
Описание
Tacking (оверштаг)
Поворот носом через ветер. Из бейдевинда на одном галсе в бейдевинд на другом. Безопасный маневр.
Gybing (поворот фордевинд)
Поворот кормой через ветер. Грот перебрасывается резко. Опасно - гик может ударить по голове. Контролировать шкот грота!
Luffing up (приводиться)
Поворот ближе к ветру (увеличение курса к ветру).
Bearing away (уваливаться)
Поворот от ветра (увеличение угла к ветру).
Seacocks и системы безопасности корпуса
Через-корпусная арматура - критично для непотопляемости
Элемент
Описание
Seacock (забортный клапан)
Кран на каждом отверстии в корпусе ниже ватерлинии. Охлаждение двигателя, гальюн, раковина. Деревянные пробки рядом с каждым на случай поломки!
Skin fitting
Штуцер, проходящий через корпус. Seacock крепится к нему. Проверять коррозию (электролиз) регулярно.
Bilge pump (помпа трюмная)
Ручная и электрическая. Знать расположение обеих. Ручная работает всегда - электрическая зависит от АКБ.
Электрика 12V/24V
Две АКБ: стартовая (двигатель) и сервисная (приборы, свет). Не разряжать стартовую! Переключатель батарей (1/2/Both/Off).
Hull speed
Максимальная скорость водоизмещающего корпуса: 1.34 x sqrt(LWL в футах). Для 36 фт яхты: 1.34 x 6 = 8.04 узлов.
Маневрирование под мотором. Prop walk, spring lines, подход/отход от причала, разворот в ограниченном пространстве.
Prop Walk (эффект гребного винта)
Режим
Правый винт
Что происходит
Вперед
Корму уводит вправо (слабо)
На ходу вперед эффект минимален, руль компенсирует.
Назад
Корму уводит ВЛЕВО (сильно)
На заднем ходу prop walk максимален! Руль почти не работает. Корма идет в Port.
Большинство яхт имеют правый винт. Назад = корма влево. Используй это при подходе к причалу!
Отход от причала
Ситуация
Действия
Ветер от стенки
Отдать все концы. Ветер сам отнесет яхту. Включить двигатель когда есть зазор.
Ветер к стенке
Spring line на корме. Руль в сторону стенки. Вперед на малом ходу - нос отходит от стенки. Отдать spring, задний ход.
Ветер вдоль (нос вперед)
Отдать кормовые. Нос удерживать. Когда корма отошла - отдать носовые, вперед.
Подход к причалу
Правило
Описание
Против ветра/течения
ВСЕГДА подходить против ветра или течения (что сильнее). Это дает контроль скорости.
Острый угол
Подход под 30-45° к стенке. На малом ходу. В последний момент - руль от стенки.
Стоп-линь
Первым подать spring line (средний конец) - он останавливает яхту и не дает уйти от стенки.
Задний ход
Использовать prop walk при торможении. Правый винт: задний ход прижмет корму к причалу слева.
Швартовные концы
Конец
Откуда/Куда
Функция
Bow line (носовой)
Нос -> вперед по причалу
Не дает яхте уйти назад.
Stern line (кормовой)
Корма -> назад по причалу
Не дает яхте уйти вперед.
Fore spring
Нос -> назад по причалу
Не дает уйти вперед. Основной для маневра.
Aft spring
Корма -> вперед по причалу
Не дает уйти назад. Для отхода с пружиной.
Breast line
Перпендикулярно борту
Прижимает к стенке. Временный, при погрузке.
Med Mooring (средиземноморская швартовка)
Шаг
Действие
1
Подойти носом к причалу, развернуться на 180° (корма к стенке).
2
Отдать якорь на расстоянии ~4 длин корпуса от причала.
3
Задний ход к причалу, потравливая якорную цепь.
4
Подать кормовые концы на причал (или муринг).
5
Натянуть якорную цепь - яхта удерживается между якорем и причалом.
Муринг - подводная цепь от причала. Подцепить багром вместо якоря. Стандарт в Средиземноморье.
Разворот в ограниченном пространстве
Шаг
Действие
1
Руль до упора ВПРАВО. Короткий импульс вперед. Руль перекладывается ДО включения хода!
2
Нейтраль. Яхта поворачивается по инерции.
3
Руль до упора ВЛЕВО. Короткий импульс назад. Prop walk помогает (корма влево = нос вправо).
4
Повторять пока не развернетесь. Обычно 2-3 цикла.
Используй prop walk! На заднем ходу корма идет влево (правый винт) - это бесплатный поворот.
Рафтинг (борт к борту)
Правило
Описание
Разрешение
ВСЕГДА спросить разрешения у соседней яхты перед швартовкой рафтом.
Кранцы
Кранцы с обоих сторон. Проверить высоту - чтобы не "перешагивали".
Мачты
Не ставить мачту напротив мачты соседа - смещайте вперед/назад на 1-2м.
Концы
Подать свои концы НА БЕРЕГ (через соседнюю яхту), не только к соседу.
Проход
Проходить через чужую яхту только через нос (не через кокпит).
Pre-start checks двигателя
Перед каждым запуском - WOBBLE
Проверка
Что делать
W - Water (охлаждение)
Открыть seacock забортной воды. Проверить уровень антифриза (если закрытый контур).
O - Oil (масло)
Проверить уровень щупом. Между MIN и MAX. Проверить на утечки.
B - Belt (ремень)
Натяжение ремня генератора/помпы. Прогиб ~1 см при нажатии. Нет трещин.
B - Bilge (трюм)
Проверить трюм под двигателем - нет ли воды или масла.
L - Leaks (утечки)
Осмотреть шланги, соединения, топливные линии. Нет ли потеков.
E - Exhaust (выхлоп)
После запуска: проверить что вода идет из выхлопа. Нет воды = немедленно глушить (перегрев за 30 сек).
Raw water filter
Проверить фильтр забортной воды - не забит ли водорослями/мусором.
Передача в нейтрали!
ОБЯЗАТЕЛЬНО нейтраль перед запуском. Иначе рывок - удар о причал или намотка на винт.
Планирование перехода (passage planning). Обязательный навык для шкипера. Погода, приливы, маршрут, запасные порты, топливо.
Этапы планирования
Этап
Что делать
1. Погода
Прогноз на переход + 24 часа. Сила и направление ветра, видимость, осадки. Источники: VHF, Navtex, интернет.
2. Приливы
Время HW/LW в портах отхода и прихода. Приливные течения на маршруте. Tidal gates (окна по течению).
3. Маршрут
Проложить на карте. Waypoints с координатами. Пеленги на опасности. Безопасные глубины (draft + запас).
4. Опасности
Мели, скалы, TSS (зоны разделения движения), военные зоны. Отметить на карте. Clearing bearings.
5. Запасные порты
Ports of refuge на маршруте. Для каждого: вход, глубины, связь. Минимум 1-2 на переход.
6. Топливо и запасы
Расход двигателя. Запас воды. Еда на переход + резерв. Батареи, газ.
7. Экипаж
Вахтенное расписание. Опыт каждого. Склонность к морской болезни. Briefing перед выходом.
8. Оповещение
Оставить passage plan на берегу. Сообщить ETA. Контакты береговой охраны.
Ключевые понятия
Термин
Описание
Waypoint
Контрольная точка маршрута с координатами (lat/lon). Загружается в GPS/chartplotter.
ETA
Estimated Time of Arrival. Расчет: дистанция / скорость + поправка на течение.
ETD
Estimated Time of Departure. Выбирается с учетом приливов и погодного окна.
Tidal gate
Окно по течению. Период, когда течение попутное. Пропустил - ждешь 6 часов.
Clearing bearing
Контрольный пеленг на ориентир. Пока пеленг больше/меньше X° - ты в безопасности.
CPA
Closest Point of Approach. Минимальное расстояние до опасности/судна на маршруте.
Port of refuge
Запасной порт-убежище. Вход должен быть безопасен в любых условиях.
Course to Steer (CTS) - курс для рулевого
Векторный треугольник: учет течения при прокладке курса
Вектор
Что означает
Чем определяется
Ground track
Желаемый курс по карте (от A до B)
Прокладка на карте - линия, по которой хотим двигаться по грунту
Tidal stream
Вектор течения (set и drift)
Set = направление течения, Drift = скорость (узлы). Из tidal atlas или tidal diamonds
Water track (CTS)
Курс, который задаем рулевому
Результат построения - курс яхты через воду с учетом сноса течением
Шаг
Действие
1
Проложить на карте желаемый курс (Ground track) от точки A до точки B. Измерить направление.
2
От начальной точки A отложить вектор течения: направление = Set, длина = Drift x время (например, 2 уз x 1 ч = 2 мили). Получим точку C.
3
Из точки C раствором циркуля = скорость яхты x время (например, 5 уз x 1 ч = 5 миль) провести дугу до пересечения с линией Ground track.
4
Точка пересечения дуги с линией Ground track = точка D. Направление от C до D = CTS (курс для рулевого).
5
Скорость по грунту (SOG) = расстояние A-D / время. Именно её используем для расчета ETA.
Рабочий пример
Дано
Ground track = 045°T. Течение: Set 270°T, Drift 2.0 уз. Скорость яхты = 5.0 уз. Время = 1 час.
Шаг 1
Прокладываем линию 045°T от точки A на карте.
Шаг 2
От точки A откладываем вектор 270°T длиной 2.0 мили (2.0 уз x 1 ч). Получаем точку C.
Шаг 3
Из точки C циркулем 5.0 миль (5.0 уз x 1 ч) проводим дугу до пересечения с линией 045°T.
Результат
CTS = 060°T (рулевому). SOG = 4.2 уз (по грунту). ETA на 10 миль = 10 / 4.2 = 2 ч 23 мин.
Проверка
Течение сносит влево (на запад), значит CTS должен быть правее Ground track. 060° > 045° - верно.
Estimated Position (EP) vs Fix
Способы определения местоположения яхты на карте
Метод
Точность
Как получить
На карте
Fix
Высокая
Пересечение 2+ позиционных линий (пеленги, GPS, transit). Три пеленга = cocked hat (треугольник погрешности). Принимаем позицию ближайшую к опасности.
Точка + кружок + время. Подписывается временем.
DR (Dead Reckoning)
Низкая
Только курс компаса + скорость лага. Без учета течения и ветрового дрейфа. Чем дольше без фикса - тем менее точна.
Крестик (+) на проложенном курсе + время.
EP (Estimated Position)
Средняя
DR + поправка на течение (set/drift) + leeway (снос ветром). Лучше DR, но хуже Fix. Используется когда нет возможности взять пеленги.
Треугольник + время. Показывает наилучшую оценку позиции.
Понятие
Описание
Cocked hat
Треугольник, образованный тремя пеленгами, которые не сходятся в одну точку (из-за погрешностей). Чем меньше треугольник - тем точнее фикс. Позицию принимают ближе к ближайшей опасности.
Leeway
Снос ветром. Угол между курсом яхты и реальным следом через воду. Обычно 3-7° в зависимости от силы ветра и типа яхты. Прибавляется к подветренной стороне.
Set & Drift
Set = направление, куда несет течение (в градусах True). Drift = скорость течения (в узлах). Берется из tidal atlas или tidal diamonds на карте.
Правило
Каждый Fix обнуляет накопленную ошибку. Брать фиксы как можно чаще. При навигации вблизи опасностей - фикс каждые 15-30 мин.
Пеленги и определение места
Position lines: transit, compass bearing, transferred PL
Тип
Описание
Когда использовать
Transit (створ)
Два объекта на одной линии (маяк за маяком, буй и мыс). Самая точная позиционная линия - не требует компаса, нет ошибки deviation/variation.
Контроль входа в фарватер. Clearing line - если объекты на створе, вы в безопасности. Проверка девиации компаса.
Compass bearing (пеленг)
Пеленг на объект ручным компасом. Компасный -> магнитный (+ deviation) -> истинный (+ variation). Формула: True = Magnetic + Variation, Magnetic = Compass + Deviation.
Основной метод определения позиции. Два пеленга на разные объекты = Fix. Оптимальный угол между пеленгами: 60-90°.
Back bearing
Пеленг от объекта на яхту (обратный). Равен compass bearing +/- 180°. Используется для проверки: объект должен быть на определенном пеленге от нас.
Контроль курса. Проверка clearing bearing. Убедиться, что не сносит в опасную зону.
Transferred PL
Перенесенная позиционная линия. Если есть только один объект - берем пеленг, через время берем второй пеленг на тот же или другой объект. Первый пеленг переносим параллельно на расстояние, пройденное за время между пеленгами (с учетом течения). Пересечение = Running Fix.
Когда виден только один ориентир. Ночная навигация (один маяк). Береговое плавание с одним видимым объектом.
Clearing bearing
Контрольный пеленг на ориентир: пока пеленг больше/меньше заданного значения, яхта находится в безопасной зоне. Прокладывается заранее при планировании.
Обход мелей и скал. Например: пеленг на маяк не менее 045° - значит мы западнее линии опасности.
Правило
Детали
3 пеленга
Идеальный фикс - три пеленга на три объекта. Разнесены на 60° друг от друга. Cocked hat должен быть маленьким (< 1 мили). Брать быстро, начиная с объекта, который меняет пеленг медленнее всего (траверз).
Порядок пеленгования
Первым берем объект ближе к траверзу (медленно меняется), последним - объект по носу/корме (быстро меняется). Так минимизируем ошибку от движения яхты.
CADET
Перевод пеленгов: Compass -> Add Deviation -> (East = +) -> True. Обратно: True -> Add (West = +) -> Deviation -> Compass. Мнемоника: Compass Add Deviation East True, обратно - TAWED.
Расчет топлива
Формула, запасы, моточасы - сколько залить и почему больше
Основная формула
Формула
Топливо = Расход (л/ч) x Время (ч) x 1.3 (запас 30%). Минимальный запас - всегда 30% сверх расчетного расхода.
Расход
Указан в мануале двигателя. Типичный дизель на яхте 30-40 фт: 2-4 л/ч на крейсерских оборотах (2000-2500 RPM). На холостых: 0.5-1 л/ч.
Время
Время работы двигателя: переход под мотором + маневры в портах + зарядка аккумуляторов. Не только время перехода!
Рабочий пример
Дано
Расход двигателя: 3 л/ч. Переход: 8 часов под мотором. Маневры в порту: ~1 час.
Расчет перехода
3 л/ч x 8 ч = 24 л
Маневры
3 л/ч x 1 ч = 3 л
Итого без запаса
24 + 3 = 27 л
С запасом 30%
27 x 1.3 = 35.1 л - минимум топлива в танке перед выходом
Альтернативный расчет
3 л/ч x (8 + 1) x 1.3 = 3 x 9 x 1.3 = 35.1 л
Фактор
Описание
Моточасы
Считать по счетчику моточасов (engine hours). Замена масла каждые 100-200 моточасов, фильтров - по регламенту. Записывать в судовой журнал.
Топливные фильтры
Иметь запасной фильтр на борту. Грязное топливо и вода в танке - частая причина остановки двигателя. Сепаратор воды (water trap) проверять регулярно.
Маневры в порту
Закладывать 30-60 мин на заход/выход: развороты, ожидание, швартовка. Расход может быть выше из-за частых переключений передач.
Встречное течение/ветер
Увеличивает время перехода и расход. При встречном течении 2 уз и скорости 5 уз: реальная SOG = 3 уз, время x 1.7. Учитывать при расчете.
Запас батарей
Двигатель заряжает АКБ. Если долго под парусами - может потребоваться 1-2 ч работы двигателя на холостых для зарядки. Учитывать в расчете.
TSS - Traffic Separation Scheme
Зоны разделения движения - правила МППСС-72, правило 10
Правило
Описание
Пересечение TSS
Пересекать строго под прямым углом (90°) к направлению потока движения. Это минимизирует время нахождения в полосе и снижает риск столкновения.
Движение в TSS
Двигаться в направлении установленного потока (по своей полосе). Входить/выходить под малым углом к потоку. Избегать пересечения разделительной зоны.
Уступать судам в TSS
Яхта (< 20м или парусная), пересекающая TSS, обязана уступать дорогу ВСЕМ судам, идущим по полосе движения. Они не обязаны маневрировать!
Inshore Traffic Zone (ITZ)
Прибрежная зона между берегом и TSS. Малые суда (< 20м) должны использовать ITZ вместо TSS когда возможно. Рыболовные суда могут ловить в ITZ.
Разделительная зона
Separation zone/line между встречными потоками. НЕ входить без крайней необходимости (авария, спасение, рыбалка). Не становиться на якорь в TSS.
Рыболовные суда
Могут ловить рыбу в TSS, но не должны препятствовать движению судов по полосе. Не имеют привилегий в TSS.
Кто
Приоритет в TSS
Суда в полосе движения
Имеют преимущество перед судами, пересекающими TSS
Суда < 20 м
Не должны затруднять движение в TSS. Использовать ITZ. При пересечении - уступать всем
Парусные яхты
Не должны затруднять движение судов в полосе. ColRegs Rule 10(j): парусное судно не имеет привилегий в TSS
Суда, ограниченные осадкой
Могут отклоняться от правил TSS если необходимо для безопасности. Показывают соответствующие огни/знаки
Запомнить
В TSS размер и маневренность имеют значение. Яхта - самый маленький и маневренный участник. Уступать всем, пересекать быстро, под 90°
Go / No-Go критерии
Решение о выходе в море - Day Skipper level
Фактор
Go
Caution
No-Go
Ветер (Бофорт)
Force 1-4 (до 16 уз)
Force 5 (17-21 уз) - рифим паруса, опытный экипаж
Force 6+ (22+ уз) для Day Skipper. Решение шкипера с учетом опыта
< 2 миль (плохая). Без радара и опыта - не выходить. Fog = danger
Высота волны
До 1.5 м (smooth-slight). Комфортное плавание
1.5-2.5 м (moderate). Морская болезнь у неопытных. Фиксировать все
> 2.5 м (rough+). Опасно для малых яхт. Заливание кокпита
Прогноз
Стабильный прогноз. Нет ухудшения на время перехода + 12 ч
Возможное ухудшение. Есть порты-убежища на маршруте
Шторм/gale warning. Прогноз ухудшения без портов-убежищ
Экипаж
Отдохнувший, без больных. Минимум 2 чел. способны управлять яхтой
Усталость, 1 морская болезнь. Один опытный + один способный
Все укачались или устали. Шкипер не в форме. Один на борту
Яхта
Все системы работают. Паруса целы. Двигатель заводится. Навигация OK
Мелкие неисправности (лампочка, помпа). Запасные части есть
Двигатель не заводится. Течь. Рулевое повреждено. Навигация отказала
Приливы/течения
Попутное течение или слабое (< 1 уз). Достаточная глубина на всем маршруте
Течение до 2 уз. Tidal gate - нужно выйти в определенное время
Сильное встречное (> 3 уз). Wind-over-tide (ветер против течения = крутые волны). Недостаточная глубина
Время перехода
Прибытие засветло. Маршрут < 8 часов. Знакомый район
Прибытие в сумерках. 8-12 часов. Незнакомый порт прихода
Ночной переход без опыта. > 12 ч без вахтенного расписания. Незнакомые воды ночью
Ключевые принципы принятия решения
Правило
Один фактор в No-Go = не выходим, пока не устранен. Два и более Caution = пересмотреть план или отложить.
Давление
Не поддаваться давлению чартера, расписания, экипажа. Шкипер принимает решение единолично. "Лучше быть в порту и жалеть о пропущенном дне, чем в море и жалеть о выходе."
Пересмотр
Решение Go/No-Go можно пересмотреть в любой момент. Вышли и стало хуже - разворот к ближайшему порту-убежищу. Это не слабость, это грамотная навигация.
Запасной план
Всегда иметь Plan B: другой маршрут, другой порт, другой день. Passage plan включает запасные порты - они именно для этого.
Первая помощь на борту. Основные ситуации: гипотермия, утопление, кровотечение, переломы, шок, ожоги, морская болезнь. На море помощь может прийти через часы.
Обезболивающее (ибупрофен, парацетамол), антигистаминное, от морской болезни
Инструменты
Ножницы, пинцет, термометр, перчатки одноразовые
Специальное
Солнцезащитный крем, средство от ожогов, глазные капли (соленая вода)
Шинирование
SAM splints (гнущиеся шины), steri-strips (полоски для ран), жгут
От морской болезни
Stugeron (Cinnarizine) - принять за 2 часа ДО выхода!
DR ABC - алгоритм первой помощи
Универсальный порядок действий при любом пострадавшем
Буква
Действие
Что делать
D
Danger (опасность)
Убедись что безопасно для ТЕБЯ. Не создавай вторую жертву!
R
Response (реакция)
Потряси за плечи, громко спроси "Вы меня слышите?". Реагирует? Нет?
A
Airway (дых. пути)
Запрокинуть голову, поднять подбородок. Убрать инородные тела изо рта.
B
Breathing (дыхание)
Смотри, слушай, чувствуй 10 сек. Грудь поднимается? Дыхание слышно?
C
Circulation (кровообращение)
Нет дыхания = начать СЛР (CPR). Есть дыхание = recovery position.
СЛР (CPR) - сердечно-легочная реанимация
Параметр
Значение
Соотношение
30 компрессий : 2 вдоха
Глубина
5-6 см (1/3 грудной клетки)
Ритм
100-120 компрессий/мин (ритм песни "Stayin' Alive")
Руки
Основание ладони на центр груди, вторая рука сверху, руки прямые
Не прекращать
Продолжать до прибытия помощи или появления дыхания
AED
Если есть дефибриллятор - использовать. Следовать голосовым инструкциям.
Recovery Position (устойчивое боковое положение)
Шаг
Действие
1
Ближнюю к тебе руку - под прямым углом, ладонь вверх.
2
Дальнюю руку - через грудь, тыл ладони к щеке.
3
Дальнее колено согнуть, потянуть на себя - перекатить на бок.
4
Голову запрокинуть для открытия дыхательных путей.
5
Контролировать дыхание каждые 2 мин. Укрыть от холода.
Radio Medical Advice: Pan-Pan MEDICO на канале 16. Описать симптомы, получить консультацию врача по радио.
Выживание в воде - температура и время
Критично для принятия решений при MOB
Температура воды
Потеря сознания
Ожидаемое выживание
< 2°C (ледяная)
< 15 мин
15-45 мин
2-4°C
15-30 мин
30-90 мин
4-10°C (Сев. Европа зимой)
30-60 мин
1-3 часа
10-15°C (Ла-Манш летом)
1-2 часа
1-6 часов
15-21°C (Средиземноморье)
2-7 часов
2-40 часов
21-27°C (тропики)
3-12 часов
3-40+ часов
> 27°C
Indefinite
Indefinite (другие факторы)
Без спасжилета время сокращается вдвое. Поза HELP (колени к груди, руки прижаты) замедляет потерю тепла на 50%.
Удушье инородным телом (Choking)
Степень
Признаки
Действия
Частичная обструкция
Кашляет, может говорить, дышит с трудом
Поощрять кашель. НЕ хлопать по спине если кашляет эффективно.
Полная обструкция
Не может кашлять/говорить/дышать. Хватается за горло. Синеет.
1) 5 ударов между лопаток (наклонить вперед). 2) 5 абдоминальных толчков (прием Хаймлиха): кулак выше пупка, резко вверх и внутрь. Чередовать. Если без сознания - СЛР.
Ответственность шкипера (капитана). Юридическая и практическая. Safety briefing, проверка оборудования, судовой журнал, SOLAS.
Safety Briefing (инструктаж)
Обязательно перед первым выходом с новым экипажем
#
Тема
Что показать/объяснить
1
Спасжилеты
Где хранятся, как надевать, как активировать. Каждый примеряет свой.
2
Страховочные
Harness + jacklines. Когда пристегиваться (ночь, непогода, один на палубе).
3
Огнетушители
Расположение (кокпит, камбуз, каюты). Как использовать. Типы (порошок, CO2).
4
MOB процедура
Кнопка MOB на GPS. Кто кричит, кто смотрит, кто управляет. Quick Stop / Williamson turn.
5
VHF рация
Где находится. Канал 16. Как подать Mayday (MIPDANIO). DSC кнопка.
6
Трап и выходы
Главный выход, запасной. Как открыть люки.
7
Газ (камбуз)
Где вентиль. Закрывать после каждого использования. Газ тяжелее воздуха - скапливается в трюме!
8
Фальшфейеры
Расположение. Типы (красные, оранжевый дым, парашютные). Срок годности!
Обязанности шкипера
Обязанность
Описание
Юридическая ответственность
Шкипер несет ПОЛНУЮ ответственность за безопасность судна, экипажа и пассажиров. Это закон, не рекомендация.
Проверка оборудования
Перед каждым выходом: двигатель, рулевое, навигация, безопасность, связь, якорь.
Судовой журнал (logbook)
Запись: маршрут, погода, состояние моря, расход топлива, происшествия, вахты.
Вахтенное расписание
Расписание вахт при переходах. Достаточный отдых для каждого. Минимум 2 человека на вахте ночью.
Прогноз погоды
Получать прогноз каждые 12 часов. Решение go/no-go принимает только шкипер.
Passage plan
Оставить копию на берегу (марина, друзья, coastguard). Сообщить ETA.
Минимальное оборудование безопасности
Категория
Что обязательно
Спасательные
Жилеты на ВСЕХ (включая детские). Спасательный круг с линем. MOB буй.
Пожарные
Огнетушители (мин. 2). Противопожарное одеяло на камбузе.
' + (opts.placeholder || 'Заполни поля выше.') + '
' +
(opts.tip ? '
' + opts.tip + '
' : '');
grid.appendChild(card);
return card;
}
function setOut(outEl, html, isPlaceholder) {
outEl.innerHTML = html;
outEl.classList.toggle('placeholder', !!isPlaceholder);
}
// ---- 1. CADET ----
const cadet = makeCard({
icon: '🧭',
title: 'Перевод курсов (CADET)',
desc: 'Истинный ↔ Магнитный ↔ Компасный с учётом склонения и девиации.',
fieldRows: [
[
{ id:'cadetT', label:'Истинный курс', placeholder:'045', step:1 },
{ id:'cadetM', label:'Магнитный', placeholder:'—', step:1 },
{ id:'cadetC', label:'Компасный', placeholder:'—', step:1 },
],
[
{ id:'cadetV', label:'Variation °', placeholder:'−4', step:0.5, hint:'минус = W, плюс = E' },
{ id:'cadetD', label:'Deviation °', placeholder:'+2', step:0.5, hint:'минус = W, плюс = E' },
],
],
outId: 'cadetOut',
placeholder: 'Введи V, D и любой из курсов — остальные посчитаются.',
tip: '💡 CADET: Compass + dev = Mag → + var = True. East плюс, West минус.',
});
function recalcCadet(driver) {
const $ = sel => cadet.querySelector(sel);
const T = parseFloat($('#cadetT').value);
const M = parseFloat($('#cadetM').value);
const C = parseFloat($('#cadetC').value);
const V = parseFloat($('#cadetV').value);
const D = parseFloat($('#cadetD').value);
const out = $('#cadetOut');
function n(x) { return ((x % 360) + 360) % 360; }
if (isNaN(V) || isNaN(D)) { setOut(out, 'Введи V и D, чтобы посчитать.', true); return; }
if (driver === 'T' && !isNaN(T)) {
const Mc = n(T - V), Cc = n(Mc - D);
$('#cadetM').value = Mc.toFixed(1); $('#cadetC').value = Cc.toFixed(1);
setOut(out, 'True ' + T + '° → Mag ' + Mc.toFixed(1) + '° → Compass ' + Cc.toFixed(1) + '°');
} else if (driver === 'M' && !isNaN(M)) {
const Tc = n(M + V), Cc = n(M - D);
$('#cadetT').value = Tc.toFixed(1); $('#cadetC').value = Cc.toFixed(1);
setOut(out, 'Mag ' + M + '° → True ' + Tc.toFixed(1) + '° · Compass ' + Cc.toFixed(1) + '°');
} else if (driver === 'C' && !isNaN(C)) {
const Mc = n(C + D), Tc = n(Mc + V);
$('#cadetM').value = Mc.toFixed(1); $('#cadetT').value = Tc.toFixed(1);
setOut(out, 'Compass ' + C + '° → Mag ' + Mc.toFixed(1) + '° → True ' + Tc.toFixed(1) + '°');
}
}
cadet.querySelector('#cadetT').addEventListener('input', () => recalcCadet('T'));
cadet.querySelector('#cadetM').addEventListener('input', () => recalcCadet('M'));
cadet.querySelector('#cadetC').addEventListener('input', () => recalcCadet('C'));
cadet.querySelector('#cadetV').addEventListener('input', () => recalcCadet('T'));
cadet.querySelector('#cadetD').addEventListener('input', () => recalcCadet('T'));
// ---- 2. Tides ----
const tide = makeCard({
icon: '🌊',
title: 'Приливы — правило 12-х',
desc: 'Высота воды сейчас между HW и LW. Подъём по часам 1·2·3·3·2·1.',
fieldRows: [
[
{ id:'tHWh', label:'Высота HW (м)', step:0.1, placeholder:'4.8' },
{ id:'tLWh', label:'Высота LW (м)', step:0.1, placeholder:'0.6' },
],
[
{ id:'tHWt', label:'Время HW', type:'time' },
{ id:'tLWt', label:'Время LW', type:'time' },
],
[
{ id:'tNow', label:'Сейчас', type:'time' },
],
],
actions: [{ id:'tNowBtn', label:'⏱ Сейчас', cls:'subtle' }],
outId: 'tideOut',
placeholder: 'Введи HW/LW, времена и текущее время.',
tip: '💡 Минимальная глубина = карта + LW. Карта 2.0м, LW 0.6м → реально 2.6м.',
});
function recalcTide() {
const $ = s => tide.querySelector(s);
const HWh = parseFloat($('#tHWh').value), LWh = parseFloat($('#tLWh').value);
const HWt = $('#tHWt').value, LWt = $('#tLWt').value, now = $('#tNow').value;
const out = $('#tideOut');
if (isNaN(HWh) || isNaN(LWh) || !HWt || !LWt || !now) { setOut(out, 'Введи HW/LW, времена и текущее время.', true); return; }
function toMin(s) { const [h,m] = s.split(':').map(Number); return h*60+m; }
const tHW = toMin(HWt), tLW = toMin(LWt), tN = toMin(now);
const range = HWh - LWh;
const rising = tHW > tLW;
const start = rising ? tLW : tHW;
const fr = [0,1,3,6,9,11,12];
let pos = ((tN - start + 1440) % 1440) / 60;
if (pos > 6) pos = 6; if (pos < 0) pos = 0;
const lo = Math.floor(pos), hi = Math.min(6, lo+1);
const f = fr[lo] + (fr[hi] - fr[lo]) * (pos - lo);
const heightFromStart = (f/12) * range;
const startH = rising ? LWh : HWh;
const cur = startH + (rising ? +1 : -1) * heightFromStart;
setOut(out, 'Прошло ' + pos.toFixed(1) + ' ч от ' + (rising ? 'LW' : 'HW') + '. Высота воды: ' + cur.toFixed(2) + ' м (' + (rising ? 'прилив' : 'отлив') + ').');
}
tide.querySelectorAll('input').forEach(i => i.addEventListener('input', recalcTide));
tide.querySelector('#tNowBtn').addEventListener('click', () => {
const d = new Date();
tide.querySelector('#tNow').value = String(d.getHours()).padStart(2,'0') + ':' + String(d.getMinutes()).padStart(2,'0');
recalcTide();
});
// ---- 3. Anchor scope ----
const anch = makeCard({
icon: '⚓',
title: 'Якорная цепь — scope',
desc: 'Сколько цепи травить с учётом прилива и клюза. Норма 5:1, шторм 7-10:1.',
fieldRows: [
[
{ id:'aDep', label:'Глубина (м)', step:0.5, placeholder:'5' },
{ id:'aTide', label:'Подъём (м)', step:0.5, placeholder:'2', hint:'макс. прилив за стоянку' },
{ id:'aFb', label:'Клюз (м)', step:0.1, placeholder:'1' },
],
[
{ id:'aScope', label:'Scope ratio', type:'select', options:[
{ v:3, l:'3:1 — кратко, тихо' },
{ v:5, l:'5:1 — норма', selected:true },
{ v:7, l:'7:1 — свежий ветер' },
{ v:10, l:'10:1 — шторм' },
]},
],
],
outId: 'anchOut',
placeholder: 'Введи глубину.',
tip: '💡 На верёвке (rope) добавь +1 к ratio. Меньше 3:1 — якорь не возьмёт.',
});
function recalcAnch() {
const $ = s => anch.querySelector(s);
const d = parseFloat($('#aDep').value);
const t = parseFloat($('#aTide').value) || 0;
const f = parseFloat($('#aFb').value) || 0;
const r = parseFloat($('#aScope').value);
const out = $('#anchOut');
if (isNaN(d) || isNaN(r)) { setOut(out, 'Введи глубину и выбери scope.', true); return; }
const tot = d + t + f;
setOut(out, 'Глубина + прилив + клюз = ' + tot.toFixed(1) + 'м. При scope ' + r + ':1 травить ' + (tot*r).toFixed(1) + 'м цепи.');
}
anch.querySelectorAll('input, select').forEach(i => i.addEventListener('input', recalcAnch));
// ---- 4. Hull Speed ----
const hull = makeCard({
icon: '🚤',
title: 'Hull Speed',
desc: 'Теоретическая макс. скорость водоизмещающего корпуса.',
fields: [
{ id:'hLwl', label:'LWL — длина по ватерлинии (м)', step:0.1, placeholder:'9.5' },
],
outId: 'hullOut',
placeholder: 'Введи длину по ватерлинии.',
tip: '💡 После hull speed лодка тратит силы на свою же волну. Глиссировать не может.',
});
hull.querySelector('#hLwl').addEventListener('input', () => {
const out = hull.querySelector('#hullOut');
const v = parseFloat(hull.querySelector('#hLwl').value);
if (isNaN(v)) { setOut(out, 'Введи длину по ватерлинии.', true); return; }
const ft = v * 3.28084;
const kn = 1.34 * Math.sqrt(ft);
setOut(out, 'LWL = ' + v.toFixed(1) + 'м (' + ft.toFixed(1) + ' ft). Hull speed: ' + kn.toFixed(2) + ' уз (' + (kn*1.852).toFixed(1) + ' км/ч).');
});
// ---- 5. Anchor watch (GPS) ----
const watch = makeCard({
icon: '📡',
title: 'Якорная вахта (GPS)',
desc: 'Запоминает позицию якоря и сигналит если снесло.',
fields: [
{ id:'wRadius', label:'Радиус допуска (м)', step:5, value:50 },
],
actions: [
{ id:'wStart', label:'🎯 Зафиксировать', cls:'primary' },
{ id:'wStop', label:'⏹ Стоп', cls:'danger', disabled: true },
],
outId: 'watchOut',
placeholder: 'Нажми «Зафиксировать», когда якорь сел.',
tip: '⚠️ GPS точность ±5–15м. Меньше 30м обычно бесполезно. Не закрывай вкладку.',
});
let watchAnchor = null, watchId = null, _watchAlarmTriggered = false;
function dist(a, b) {
const R = 6371000, toRad = x => x * Math.PI / 180;
const dLat = toRad(b.lat - a.lat), dLon = toRad(b.lon - a.lon);
const aV = Math.sin(dLat/2)**2 + Math.cos(toRad(a.lat))*Math.cos(toRad(b.lat))*Math.sin(dLon/2)**2;
return 2 * R * Math.asin(Math.sqrt(aV));
}
function beepAlarm() {
try {
const ctx = new (window.AudioContext || window.webkitAudioContext)();
const osc = ctx.createOscillator(), gain = ctx.createGain();
osc.connect(gain); gain.connect(ctx.destination);
osc.frequency.value = 880; gain.gain.value = 0.3;
osc.start(); setTimeout(() => { osc.stop(); ctx.close(); }, 1500);
} catch(e) {}
}
const watchOut = watch.querySelector('#watchOut');
const wStart = watch.querySelector('#wStart'), wStop = watch.querySelector('#wStop');
wStart.addEventListener('click', () => {
if (!navigator.geolocation) { setOut(watchOut, 'GPS не поддерживается.'); return; }
setOut(watchOut, 'Получаю GPS-координаты…');
navigator.geolocation.getCurrentPosition(pos => {
watchAnchor = { lat: pos.coords.latitude, lon: pos.coords.longitude };
wStart.disabled = true; wStop.disabled = false;
setOut(watchOut, '✅ Зафиксировано: ' + watchAnchor.lat.toFixed(5) + ', ' + watchAnchor.lon.toFixed(5) + '. Жду движения…');
_watchAlarmTriggered = false;
if (watchId !== null) navigator.geolocation.clearWatch(watchId);
watchId = navigator.geolocation.watchPosition(p => {
if (!watchAnchor) return;
const cur = { lat: p.coords.latitude, lon: p.coords.longitude };
const d = dist(watchAnchor, cur);
const r = parseFloat(watch.querySelector('#wRadius').value) || 50;
if (d > r) {
setOut(watchOut, '🚨 ДРЕЙФ! Снесло на ' + d.toFixed(0) + 'м (предел ' + r + 'м)');
if (!_watchAlarmTriggered) {
_watchAlarmTriggered = true; beepAlarm();
if (navigator.vibrate) navigator.vibrate([400,200,400,200,400,200,400]);
}
} else {
setOut(watchOut, '📍 Дистанция от якоря: ' + d.toFixed(1) + 'м / ' + r + 'м · точность ±' + (p.coords.accuracy||0).toFixed(0) + 'м');
}
}, e => setOut(watchOut, '' + e.message + ''), { enableHighAccuracy: true, maximumAge: 5000 });
}, e => setOut(watchOut, 'GPS: ' + e.message + ''), { enableHighAccuracy: true, timeout: 15000 });
});
wStop.addEventListener('click', () => {
if (watchId !== null) navigator.geolocation.clearWatch(watchId);
watchId = null; watchAnchor = null;
wStart.disabled = false; wStop.disabled = true;
setOut(watchOut, 'Остановлено.', true);
});
// ---- 6. VHF range ----
const vhf = makeCard({
icon: '📻',
title: 'VHF дальность связи',
desc: 'Радиогоризонт зависит от высоты антенн. D = 2.2 × (√h1 + √h2).',
fields: [
{ id:'vhfA1', label:'Своя антенна (м)', step:0.5, placeholder:'12' },
{ id:'vhfA2', label:'Их антенна (м)', step:0.5, placeholder:'50' },
],
outId: 'vhfOut',
placeholder: 'Введи высоты двух антенн.',
tip: '💡 До маяка ~25 миль · до другой яхты 7-10 миль · до корабля 25-30 миль.',
});
function recalcVhf() {
const h1 = parseFloat(vhf.querySelector('#vhfA1').value);
const h2 = parseFloat(vhf.querySelector('#vhfA2').value);
const out = vhf.querySelector('#vhfOut');
if (isNaN(h1) || isNaN(h2)) { setOut(out, 'Введи высоты двух антенн.', true); return; }
const nm = 2.2 * (Math.sqrt(h1) + Math.sqrt(h2));
setOut(out, 'Радиогоризонт: ' + nm.toFixed(1) + ' м.миль (' + (nm*1.852).toFixed(1) + ' км).');
}
vhf.querySelectorAll('input').forEach(i => i.addEventListener('input', recalcVhf));
// ---- 7. SST ----
const sst = makeCard({
icon: '📐',
title: 'Скорость / расстояние / время',
desc: 'Введи любые 2 — третий посчитается. D = S × T.',
fields: [
{ id:'sstS', label:'Скорость (уз)', step:0.1, placeholder:'6' },
{ id:'sstD', label:'Расстояние (миль)', step:0.1, placeholder:'—' },
{ id:'sstT', label:'Время (часы)', step:0.1, placeholder:'—' },
],
outId: 'sstOut',
placeholder: 'Введи 2 значения, оставь одно пустым.',
tip: '💡 Один час под мотором 6 узлов = 6 миль. ETA по пропорции.',
});
function recalcSst() {
const $ = s => sst.querySelector(s);
const S = parseFloat($('#sstS').value), D = parseFloat($('#sstD').value), T = parseFloat($('#sstT').value);
const out = $('#sstOut');
const filled = [!isNaN(S), !isNaN(D), !isNaN(T)].filter(Boolean).length;
if (filled < 2) { setOut(out, 'Введи любые 2 — третий посчитаю.', true); return; }
if (filled === 3) { setOut(out, 'Очисти одно поле.', true); return; }
if (isNaN(D)) { const v = S*T; $('#sstD').value = v.toFixed(2); setOut(out, 'D = S × T = ' + v.toFixed(2) + ' миль'); }
else if (isNaN(T)) { const v = D/S; $('#sstT').value = v.toFixed(2); setOut(out, 'T = D/S = ' + v.toFixed(2) + ' ч (' + Math.floor(v) + 'ч ' + Math.round((v-Math.floor(v))*60) + 'мин)'); }
else if (isNaN(S)) { const v = D/T; $('#sstS').value = v.toFixed(2); setOut(out, 'S = D/T = ' + v.toFixed(2) + ' уз'); }
}
sst.querySelectorAll('input').forEach(i => i.addEventListener('input', recalcSst));
// ---- 8. Fuel ----
const fuel = makeCard({
icon: '⛽',
title: 'Дальность под мотором',
desc: 'Сколько миль на полном баке с запасом 20%.',
fields: [
{ id:'fT', label:'Бак (л)', step:1, placeholder:'120' },
{ id:'fC', label:'Расход (л/ч)', step:0.5, placeholder:'3' },
{ id:'fS', label:'Скорость (уз)', step:0.1, placeholder:'5' },
],
outId: 'fuelOut',
placeholder: 'Введи бак, расход и скорость.',
tip: '💡 Дизель парусной обычно 2-4 л/ч. Береги последние 20% — на швартовку.',
});
function recalcFuel() {
const $ = s => fuel.querySelector(s);
const T = parseFloat($('#fT').value), C = parseFloat($('#fC').value), S = parseFloat($('#fS').value);
const out = $('#fuelOut');
if (isNaN(T) || isNaN(C) || isNaN(S) || C <= 0) { setOut(out, 'Введи бак, расход и скорость.', true); return; }
const h = T/C, m = h*S;
setOut(out, 'Часов на баке: ' + h.toFixed(1) + '. Дальность: ' + m.toFixed(0) + ' миль. С запасом 20%: ' + (m*0.8).toFixed(0) + ' миль.');
}
fuel.querySelectorAll('input').forEach(i => i.addEventListener('input', recalcFuel));
// ---- 9. Sun ----
const sun = makeCard({
icon: '🌅',
title: 'Восход / Закат',
desc: 'Когда стемнеет. Civil twilight даёт ещё 30 минут.',
fieldRows: [
[
{ id:'sLat', label:'Широта (°)', step:0.1, placeholder:'43.5' },
{ id:'sLon', label:'Долгота (°)', step:0.1, placeholder:'16.5' },
],
[
{ id:'sDate', label:'Дата', type:'date' },
],
],
actions: [
{ id:'sUseGps', label:'📍 Из GPS', cls:'subtle' },
{ id:'sToday', label:'📅 Сегодня', cls:'subtle' },
],
outId: 'sunOut',
placeholder: 'Введи координаты и дату.',
tip: '💡 Civil twilight — солнце −6°. После — ходовые огни обязательны.',
});
function recalcSun() {
const $ = s => sun.querySelector(s);
const lat = parseFloat($('#sLat').value), lon = parseFloat($('#sLon').value);
const date = $('#sDate').value;
const out = $('#sunOut');
if (isNaN(lat) || isNaN(lon) || !date) { setOut(out, 'Введи координаты и дату.', true); return; }
const d = new Date(date + 'T12:00:00Z');
const day = Math.floor((d - new Date(d.getFullYear(), 0, 0))/86400000);
const gamma = 2 * Math.PI / 365 * (day - 1);
const decl = 0.006918 - 0.399912*Math.cos(gamma) + 0.070257*Math.sin(gamma)
- 0.006758*Math.cos(2*gamma) + 0.000907*Math.sin(2*gamma)
- 0.002697*Math.cos(3*gamma) + 0.00148*Math.sin(3*gamma);
const latRad = lat * Math.PI / 180;
function solve(altDeg) {
const altRad = altDeg * Math.PI / 180;
const cosH = (Math.sin(altRad) - Math.sin(latRad)*Math.sin(decl)) / (Math.cos(latRad)*Math.cos(decl));
if (cosH > 1 || cosH < -1) return null;
return Math.acos(cosH) * 180 / Math.PI / 15;
}
const hSet = solve(-0.833), hCiv = solve(-6);
if (hSet == null) { setOut(out, 'Солнце не заходит/восходит в эти даты.', true); return; }
const noonUTC = 12 - lon/15;
function fmt(utcH) {
const baseMs = d.getTime() - 12*3600*1000;
const dt = new Date(baseMs + utcH * 3600 * 1000);
return String(dt.getHours()).padStart(2,'0') + ':' + String(dt.getMinutes()).padStart(2,'0');
}
setOut(out, '🌅 Восход ' + fmt(noonUTC - hSet) + ' · 🌇 Закат ' + fmt(noonUTC + hSet) + ' 🌆 Civil dawn ' + fmt(noonUTC - hCiv) + ' · 🌃 Civil dusk ' + fmt(noonUTC + hCiv) + '');
}
sun.querySelectorAll('input').forEach(i => i.addEventListener('input', recalcSun));
sun.querySelector('#sUseGps').addEventListener('click', () => {
if (!navigator.geolocation) return;
navigator.geolocation.getCurrentPosition(p => {
sun.querySelector('#sLat').value = p.coords.latitude.toFixed(2);
sun.querySelector('#sLon').value = p.coords.longitude.toFixed(2);
recalcSun();
});
});
sun.querySelector('#sToday').addEventListener('click', () => {
const d = new Date();
sun.querySelector('#sDate').value = d.getFullYear() + '-' + String(d.getMonth()+1).padStart(2,'0') + '-' + String(d.getDate()).padStart(2,'0');
recalcSun();
});
// ---- 10. CTS ----
const cts = makeCard({
icon: '🎯',
title: 'Course To Steer (CTS)',
desc: 'Какой курс держать при сносе течением.',
fieldRows: [
[
{ id:'cTrack', label:'Желаемый путь °', step:1, placeholder:'090' },
{ id:'cBs', label:'Скорость яхты (уз)', step:0.1, placeholder:'5' },
],
[
{ id:'cSet', label:'Set течения °', step:1, placeholder:'150' },
{ id:'cDrift', label:'Drift (уз)', step:0.1, placeholder:'1' },
],
],
outId: 'ctsOut',
placeholder: 'Введи все 4 значения.',
tip: '💡 Сносит ВПРАВО — целься ЛЕВЕЕ. Отклонение обычно 5-15°.',
});
function recalcCts() {
const $ = s => cts.querySelector(s);
const t = parseFloat($('#cTrack').value), bs = parseFloat($('#cBs').value);
const set = parseFloat($('#cSet').value), dr = parseFloat($('#cDrift').value);
const out = $('#ctsOut');
if ([t,bs,set,dr].some(isNaN) || bs <= 0) { setOut(out, 'Введи все 4 значения.', true); return; }
const dRad = (set - t) * Math.PI / 180;
const sinH = (dr * Math.sin(dRad)) / bs;
if (Math.abs(sinH) > 1) { setOut(out, 'Течение слишком сильное — путь невозможен.', false); return; }
const off = Math.asin(sinH) * 180 / Math.PI;
const hd = ((t - off) % 360 + 360) % 360;
const sog = bs * Math.cos(off * Math.PI / 180) + dr * Math.cos(dRad);
setOut(out, 'CTS: ' + hd.toFixed(1) + '° (отворот ' + (off >= 0 ? 'влево' : 'вправо') + ' на ' + Math.abs(off).toFixed(1) + '°) SOG: ' + sog.toFixed(2) + ' уз');
}
cts.querySelectorAll('input').forEach(i => i.addEventListener('input', recalcCts));
panel.dataset.calcInit = 'true';
}
/* ========================================================================
LOGBOOK — Судовой лог
======================================================================== */
const LOG_KEY_PREFIX = 'sailband.log.';
function logKeyFor(sessId) { return LOG_KEY_PREFIX + sessId; }
function getLog(sessId) {
try {
const raw = localStorage.getItem(logKeyFor(sessId || getActiveSessId()));
if (raw) return JSON.parse(raw);
} catch(e) {}
return [];
}
function appendLog(entry) {
const sid = getActiveSessId();
const log = getLog(sid);
log.unshift({ ts: Date.now(), ...entry });
// cap at 500 entries
if (log.length > 500) log.length = 500;
try { localStorage.setItem(logKeyFor(sid), JSON.stringify(log)); } catch(e) {}
}
// Hook: when user toggles a checklist item to "done", log it
(function hookChecklistLogging() {
// Wait one tick so this hook is added after renderLists exists
if (typeof state === 'undefined') return;
// We can monkey-patch the global click handler? No — easier to wrap save().
// Use a MutationObserver? Cleaner: emit a custom event from li toggle.
// Easiest approach: wrap save() and detect newly-done items
let prevDone = Object.assign({}, state.done);
const _origSave = save;
save = function() {
// diff against prev
for (const k of Object.keys(state.done)) {
if (state.done[k] && !prevDone[k]) {
// newly done — find sec/item by key
const [secId, gIdx, iIdx] = k.split('.');
let title = '';
try {
const sec = SECTIONS.find(s => s.id === secId);
if (sec) {
const grp = sec.groups[parseInt(gIdx,10)];
const item = grp.items[parseInt(iIdx,10)];
const text = (item && item.t || '').replace(/\[\[([^\]|]+)(?:\|([^\]]+))?\]\]/g, (_,a,b) => (b||a));
const assignees = (state.assign[k] || []).map(id => {
const c = (typeof CREW !== 'undefined') ? CREW.find(c => c.id === id) : null;
return c ? c.short : id;
}).join(', ');
title = '✓ ' + text.slice(0, 120);
appendLog({ type: 'check', sec: sec.title, item: text, assignees });
}
} catch(e) {}
}
}
prevDone = Object.assign({}, state.done);
return _origSave.apply(this, arguments);
};
})();
function renderLog() {
const panel = document.getElementById('mode-log');
if (!panel) return;
const log = getLog();
const session = (window.SailSessions && window.SailSessions.getActive()) || { name:'—' };
// Compute stats
const totalChecks = log.filter(e => e.type === 'check').length;
// Group by date
const byDay = {};
for (const e of log) {
const d = new Date(e.ts);
const key = `${d.getFullYear()}-${String(d.getMonth()+1).padStart(2,'0')}-${String(d.getDate()).padStart(2,'0')}`;
byDay[key] = byDay[key] || [];
byDay[key].push(e);
}
const days = Object.keys(byDay).sort().reverse();
let html = `
${totalChecks}пунктов выполнено
${days.length}дней с активностью
${escapeHtml(session.name)}текущая сессия
`;
if (log.length === 0) {
html += '
Лог пуст. Отмечай пункты в чеклистах — они автоматически попадают сюда.
';
} else {
for (const day of days) {
const d = new Date(day + 'T00:00:00');
const wk = ['Вс','Пн','Вт','Ср','Чт','Пт','Сб'][d.getDay()];
const mo = ['янв','фев','мар','апр','май','июн','июл','авг','сен','окт','ноя','дек'][d.getMonth()];
html += '
';
const entries = byDay[day].sort((a,b) => b.ts - a.ts);
for (const e of entries) {
const t = new Date(e.ts);
const tStr = `${String(t.getHours()).padStart(2,'0')}:${String(t.getMinutes()).padStart(2,'0')}`;
if (e.type === 'check') {
html += `
`).join("");
autoTermify($("#mode-radio"));
}
/* ============ KNOTS ============ */
const KNOT_SVG = {
bowline: ``,
figure8: ``,
cleat: ``,
reef: ``,
clove: ``,
sheetbend: ``,
roundturn: ``,
timber: ``,
};
const KNOTS = [
{ name:"Булинь", en:"Bowline", svg:"bowline", use:"Незатягивающаяся петля. САМЫЙ важный узел - для швартовки, крепления шкотов к парусу, спасения. Если учишь один узел - учи этот.", tip:"«Кролик выходит из норки, обегает дерево и прыгает обратно в норку». Сделай петлю (норка), конец идёт снизу вверх через петлю, обходит коренной конец сзади и возвращается в петлю сверху вниз.", critical:true },
{ name:"Восьмёрка", en:"Figure-8", svg:"figure8", use:"Стопорный узел на концах шкотов и фалов. Не даёт тросу проскочить через блок или стопор. Вяжется за 2 секунды.", tip:"Конец ходовой обводишь вокруг коренного снизу вверх, потом продеваешь в получившуюся петлю сверху. Получается форма 8.", critical:true },
{ name:"На утку", en:"Cleat hitch", svg:"cleat", use:"Крепление швартова или фала на утку (рогатку). Используется КАЖДЫЙ раз при швартовке. Должен быть автоматическим.", tip:"Один полный оборот вокруг основания утки. Потом восьмёрки через рога. Последний шлаг - с переворотом (петлёй), чтобы зафиксировать.", critical:true },
{ name:"Рифовый", en:"Reef knot", svg:"reef", use:"Связывание двух одинаковых по толщине концов. Для сезней при уборке грота и рифлении. ТОЛЬКО для одинаковых!", tip:"Правый поверх левого, завяжи. Потом левый поверх правого, завяжи. Концы лежат ПАРАЛЛЕЛЬНО, не торчат. Если торчат - это «бабий узел», развяжется." },
{ name:"Выбленочный", en:"Clove hitch", svg:"clove", use:"Быстрое временное крепление к стойке или рейлингу. Для кранцев на леере, временных креплений. НЕ для основной швартовки - может ползти!", tip:"Два шлага вокруг стойки, второй перекрещивает первый. Конец заводится под перекрестье. Для надёжности - добавь полуштык." },
{ name:"Шкотовый", en:"Sheet bend", svg:"sheetbend", use:"Связывание двух тросов РАЗНОЙ толщины. Для наращивания швартова или буксирного конца.", tip:"Толстый трос сложи петлёй. Тонкий - снизу вверх через петлю, обведи оба конца толстого, заведи под себя. Тонкий конец должен быть с той же стороны, что и его коренной." },
{ name:"Полуштык со шлагом", en:"Round turn & 2 half hitches", svg:"roundturn", use:"Надёжное крепление к кольцу, рыму или серьге. Для швартовки к причальному кольцу. Очень надёжен.", tip:"Полный оборот (шлаг) вокруг кольца/рыма. Потом два полуштыка на коренном конце. Второй полуштык в ту же сторону, что и первый." },
{ name:"Удавка", en:"Timber hitch", svg:"timber", use:"Крепление к бревну, свае, рейлингу для буксировки. Быстро вяжется, легко развязывается после снятия нагрузки.", tip:"Обнести конец вокруг предмета, потом ходовой обмотать 3-4 раза вокруг самого себя. Под нагрузкой - затягивается, без нагрузки - распускается." },
];
const KNOT_CHEAT = [
{ sit:"Швартов на утку причала", knot:"На утку" },
{ sit:"Швартов на кольцо/рым", knot:"Полуштык со шлагом" },
{ sit:"Петля на конце троса", knot:"Булинь" },
{ sit:"Стопор на шкоте/фале", knot:"Восьмёрка" },
{ sit:"Кранец на леере", knot:"Выбленочный" },
{ sit:"Связать два троса (одинаковых)", knot:"Рифовый" },
{ sit:"Связать два троса (разных)", knot:"Шкотовый" },
{ sit:"Сезень на грот/гик", knot:"Рифовый" },
{ sit:"Буксирный конец на сваю", knot:"Удавка" },
{ sit:"Спасательная петля на человека", knot:"Булинь" },
];
function renderKnots(){
const grid = $("#knotsGrid");
grid.innerHTML = KNOTS.map(k => `
`;
autoTermify($("#mode-knots"));
}
/* ============ SAFETY / MOB ============ */
const MOB_STEPS = [
{ n:"1", a:"Кричи «ЧЕЛОВЕК ЗА БОРТОМ!»", d:"Немедленно. Все на палубе должны услышать. Покажи рукой направление." },
{ n:"2", a:"Один человек ТОЛЬКО СМОТРИТ", d:"Назначь наблюдателя. Он показывает рукой и НЕ ОТВОДИТ ВЗГЛЯД. Потерять из вида на волне - потерять человека." },
{ n:"3", a:"Бросай спасательный круг", d:"Бросать ЗА человека по ветру, чтобы снесло к нему. Если есть огонь/дым - тем более." },
{ n:"4", a:"Нажми MOB на GPS", d:"Кнопка MOB на картплоттере фиксирует координаты. Если нет GPS - запомни ориентиры на берегу." },
{ n:"5", a:"Передай MAYDAY или PAN-PAN", d:"Канал 16: если угроза жизни - MAYDAY. Если контролируешь ситуацию - PAN-PAN. Координаты с GPS." },
{ n:"6", a:"Маневрируй для подхода", d:"Quick Stop: резкий разворот назад. Или круг Вильямсона: 60° в сторону, потом 180° обратно на обратный курс. Под мотором надёжнее." },
{ n:"7", a:"Подходи С ПОДВЕТРА", d:"Чтобы яхту НЕ несло на человека. Стоп машина ЗАРАНЕЕ - винт убьёт человека в воде." },
{ n:"8", a:"Поднимай на борт", d:"Через транец или фалом через лебёдку. Человек в воде быстро теряет силы - он может не помочь себе." },
];
const SAFETY_EQUIP = [
{ nm:"Спасательные жилеты", d:"По числу экипажа + запас. Надувные автоматические (>150N). ПРОВЕРИТЬ перед выходом: баллон на месте, таблетка не сработала, свисток и огонь в кармане." },
{ nm:"Страховочные пояса + линь", d:"Пристёгиваться к джекстею (трос вдоль палубы) ночью, в шторм, при работе на баке. Карабин должен открываться одной рукой." },
{ nm:"Спасательный круг / подкова", d:"Минимум 2 на корме. Один с автоматическим огнём и буйком, второй с линем 30м. Должны быть доступны МГНОВЕННО." },
{ nm:"Огнетушители", d:"Минимум 2: один в кокпите, один в каюте. Порошковые (ABC) или CO2. Проверить срок и давление на манометре." },
{ nm:"Фальшфейеры и ракеты", d:"Красные парашютные ракеты (видно 25+ миль), красные ручные фальшфейеры (ближний круг), оранжевый дым (днём для вертолёта). ПРОВЕРИТЬ СРОК." },
{ nm:"ЭПИРБ (EPIRB)", d:"Аварийный радиобуй. Передаёт координаты на спутник. Автоматический всплывает и включается сам при затоплении. Ручной - активировать и бросить в воду." },
{ nm:"Аптечка", d:"Морская аптечка: от морской болезни (ЗАРАНЕЕ), от ожогов, порезов, для иммобилизации. На длинный переход - антибиотики." },
{ nm:"Спасательный плот", d:"Надувной в контейнере на палубе. Раскрывается рывком линя. НЕ надувать на палубе - спускать в воду сначала. На экзамене спрашивают процедуру!" },
{ nm:"Нож и ведро", d:"Нож - перерезать запутавшийся трос. Ведро - для черпания воды при отказе помпы. Оба должны быть привязаны." },
{ nm:"Якорь с цепью и тросом", d:"Минимум 1 основной + 1 запасной. Якорная цепь - 3-5 длин глубины. Чтобы держал - травить больше цепи." },
];
const DISTRESS_SIGNALS = [
{ s:"MAYDAY по VHF (канал 16)", type:"radio" },
{ s:"DSC distress alert (канал 70)", type:"radio" },
{ s:"EPIRB - аварийный радиобуй", type:"radio" },
{ s:"SART - радарный транспондер", type:"radio" },
{ s:"Красные парашютные ракеты", type:"visual" },
{ s:"Красные ручные фальшфейеры", type:"visual" },
{ s:"Оранжевый дым (днём)", type:"visual" },
{ s:"Флаги N + C (November-Charlie)", type:"visual" },
{ s:"Квадрат + шар (фигуры на мачте)", type:"visual" },
{ s:"Медленный подъём/опускание рук", type:"visual" },
{ s:"SOS (... --- ...) свистком или светом", type:"signal" },
{ s:"Непрерывный звук туманного горна", type:"signal" },
{ s:"Выстрел каждую минуту", type:"signal" },
];
const FIRE_STEPS = [
{ t:"Определи тип: двигатель / камбуз (газ) / электрика", d:"От этого зависит чем тушить. Воду на электрику и масло НЕЛЬЗЯ." },
{ t:"Крикни «ПОЖАР!» + где именно", d:"Весь экипаж должен знать что горит и где." },
{ t:"Электрика - отключи главный рубильник", d:"Обесточь яхту. Рубильник обычно у входа в каюту." },
{ t:"Камбуз (газ) - перекрой газ на баллоне", d:"Кран на баллоне в рундуке кокпита, НЕ на плите." },
{ t:"Двигатель - закрой моторный отсек", d:"Перекрой доступ кислорода. Используй CO2 огнетушитель через лючок." },
{ t:"Туши к КОРНЮ огня, не к пламени", d:"Огнетушитель направляй на то, что горит, а не на верхушки пламени." },
{ t:"Не потушил за 2 мин - готовь эвакуацию", d:"Спасай экипаж. Жилеты, плот, ЭПИРБ, документы, воду." },
];
const BEAUFORT = [
{ n:0, kn:"< 1", name:"Штиль", sea:"Зеркальная поверхность", sail:"Мотор" },
{ n:1, kn:"1-3", name:"Тихий", sea:"Рябь", sail:"Мотор" },
{ n:2, kn:"4-6", name:"Лёгкий", sea:"Мелкие волны 0.1-0.3м", sail:"Полные паруса, лёгкий ход" },
{ n:3, kn:"7-10", name:"Слабый", sea:"Волны 0.6-1м, барашки", sail:"Хороший ход, все паруса" },
{ n:4, kn:"11-16", name:"Умеренный", sea:"Волны 1-1.5м, барашки", sail:"Полные паруса, крен 15-20°" },
{ n:5, kn:"17-21", name:"Свежий", sea:"Волны 2-2.5м, брызги", sail:"1-й риф, уменьшить стаксель" },
{ n:6, kn:"22-27", name:"Сильный", sea:"Волны 3-4м, пена", sail:"2-й риф, малый стаксель", warn:true },
{ n:7, kn:"28-33", name:"Крепкий", sea:"Волны 4-5.5м, полосы пены", sail:"3-й риф или штормовой стаксель", warn:true },
{ n:8, kn:"34-40", name:"Шторм", sea:"Волны 5.5-7.5м", sail:"Штормовые паруса / голый рангоут", warn:true },
{ n:9, kn:"41-47", name:"Сильный шторм", sea:"Волны 7-10м", sail:"Выживание", warn:true },
{ n:10, kn:"48-55", name:"Жестокий шторм", sea:"Волны 9-12.5м", sail:"Выживание", warn:true },
];
function renderSafety(){
const mobEl = $("#safetyMOB");
mobEl.innerHTML = `
`;
autoTermify($("#mode-safety"));
}
/* ============ BUOYAGE ============ */
const LATERAL = [
{ side:"port", name:"Левый (порт)", color:"#dc2626", shape:"Цилиндр (банка)", topmark:"Красный цилиндр", light:"Красный, любой ритм", rule:"При входе с моря - оставляй СЛЕВА", icon:"▮" },
{ side:"stbd", name:"Правый (штирборд)", color:"#16a34a", shape:"Конус", topmark:"Зелёный конус вершиной вверх", light:"Зелёный, любой ритм", rule:"При входе с моря - оставляй СПРАВА", icon:"▲" },
];
const CARDINAL = [
{ dir:"N", name:"Северный", topmark:"▲▲ оба вверх", colors:"Чёрный сверху, жёлтый снизу", pass:"Проходи к СЕВЕРУ от знака", light:"Q (непрерывный) или VQ", memo:"Стрелки вверх = проходи выше (севернее)" },
{ dir:"E", name:"Восточный", topmark:"▲▼ основаниями друг к другу", colors:"Чёрный-жёлтый-чёрный", pass:"Проходи к ВОСТОКУ от знака", light:"Q(3) каждые 10с или VQ(3) 5с", memo:"3 проблеска = 3 часа на циферблате = Восток" },
{ dir:"S", name:"Южный", topmark:"▼▼ оба вниз", colors:"Жёлтый сверху, чёрный снизу", pass:"Проходи к ЮГУ от знака", light:"Q(6)+LFl каждые 15с или VQ(6)+LFl 10с", memo:"Стрелки вниз = проходи ниже (южнее); 6 проблесков = 6 часов" },
{ dir:"W", name:"Западный", topmark:"▼▲ вершинами друг к другу", colors:"Жёлтый-чёрный-жёлтый", pass:"Проходи к ЗАПАДУ от знака", light:"Q(9) каждые 15с или VQ(9) 10с", memo:"9 проблесков = 9 часов на циферблате = Запад" },
];
const SPECIAL_BUOYS = [
{ name:"Отдельная опасность", colors:"Чёрный + красная горизонтальная полоса", topmark:"●● два чёрных шара", light:"Fl(2) белый", d:"Стоит ПРЯМО на опасности (мель, затонувшее). Обходить можно с любой стороны - вода вокруг безопасна." },
{ name:"Безопасная вода", colors:"Красно-белые вертикальные полосы", topmark:"● красный шар", light:"Iso белый или Мо(А)", d:"Глубоко со всех сторон. Ставится на осевой линии фарватера, у входа из моря. Можно подходить с любой стороны." },
{ name:"Специальный знак", colors:"Жёлтый целиком", topmark:"× жёлтый крест", light:"Жёлтый, любой ритм", d:"Зоны: гонки, военные, кабели, трубопроводы, водолазные работы. Подробности - в лоции." },
{ name:"Новая опасность", colors:"Сине-жёлтые полосы", topmark:"Вертикальный крест", light:"VQ или Q", d:"Ещё не нанесена на карту! Дублируется вторым знаком до нанесения. Слушай НАВТЕКС и VHF." },
];
function renderBuoyage(){
$("#buoyLateral").innerHTML = LATERAL.map(l => `
${l.icon}
${l.name}
Форма: ${l.shape}
Топовый знак: ${l.topmark}
Огонь: ${l.light}
${l.rule}
`).join("") + `
Мнемоника IALA Region A (Европа): При входе с моря в порт: красный слева, зелёный справа.
Запомни: «There is some RED PORT LEFT in the bottle» (красный - порт - лево).
Кардинальные знаки - как запомнить по часам:
Топовые знаки (конусы): стрелки показывают куда проходить. N ▲▲ - оба вверх = иди ВЫШЕ (к северу) S ▼▼ - оба вниз = иди НИЖЕ (к югу) E ▲▼ - основаниями друг к другу = 3 проблеска (3 часа = восток) W ▼▲ - вершинами друг к другу = 9 проблесков (9 часов = запад)
Окраска: чёрная полоса показывает направление прохода:
N - чёрный СВЕРХУ (иди к чёрному = на север)
S - чёрный СНИЗУ (иди к чёрному = на юг)
E - чёрный по краям, жёлтый в середине
W - жёлтый по краям, чёрный в середине
`;
autoTermify($("#mode-buoyage"));
}
/* ============ YACHT PARTS (for Rig panel) ============ */
const YACHT_PARTS = [
{ nm:"Бак (форпик)", en:"Bow / Forepeak", d:"Носовая часть палубы от мачты к носу. Внутри - форпиковая каюта и якорный ящик. Здесь работают с мурингами и якорем." },
{ nm:"Корма", en:"Stern", d:"Задняя часть яхты. Штурвал, кокпит, транец. Откидной транец - для купания и посадки в тендер." },
{ nm:"Кокпит", en:"Cockpit", d:"Открытая рабочая площадка на корме. Здесь штурвал, приборы, лебёдки, стопоры. Экипаж сидит тут." },
{ nm:"Рубка", en:"Coachroof / Cabin top", d:"Надстройка над каютой. На ней стопоры, люки, иногда лебёдки. Не путать с палубой." },
{ nm:"Камбуз", en:"Galley", d:"Кухня яхты. Плита (газ!), раковина, холодильник. Газовый баллон - отдельно, в вентилируемом рундуке." },
{ nm:"Гальюн", en:"Head", d:"Туалет + душ. Морской унитаз с ручной помпой. Важно: кран забортной воды закрыть после использования." },
{ nm:"Салон (кают-компания)", en:"Saloon", d:"Главное жилое помещение. Стол, диваны, навигационный стол. Под полом - трюмный колодец и доступ к двигателю." },
{ nm:"Каюта", en:"Cabin / Berth", d:"Спальное помещение. На круизной яхте 3-4 каюты. Двуспальные кровати, рундуки для вещей." },
{ nm:"Моторный отсек", en:"Engine compartment", d:"Под кокпитом или салоном. Дизельный двигатель, масляные фильтры, помпа охлаждения. Проверять масло ПЕРЕД запуском." },
{ nm:"Транец", en:"Transom", d:"Кормовая стенка корпуса. Откидной транец = купальная платформа. Через него садятся в тендер и в воду." },
{ nm:"Рундук", en:"Locker", d:"Ящик/отсек для хранения. Кокпитные рундуки - для спасательного оборудования, кабелей, шлангов. Каютные - для вещей." },
{ nm:"Киль", en:"Keel", d:"Подводный плавник с тяжёлым грузом (свинец/чугун). Не даёт перевернуться и сносить боком. На круизной яхте - фиксированный." },
{ nm:"Перо руля", en:"Rudder", d:"Подводная пластина за килем. Управляется штурвалом через систему тросов или тяг. Поворачивает яхту." },
{ nm:"Форпик", en:"Forepeak", d:"Самый носовой отсек. Обычно якорный ящик сверху, каюта или склад снизу. Тут хранят паруса и снасти." },
{ nm:"Палубный люк", en:"Deck hatch", d:"Открывающееся окно в палубе/рубке для вентиляции кают. ЗАКРЫВАТЬ перед выходом в море и при любой волне." },
];
function renderYachtParts(){
const card = (it) => `
${it.nm}
${it.en}
${it.d}
`;
$("#rigParts2").innerHTML = YACHT_PARTS.map(i=>card(i)).join("");
}
/* ============ TIDES (for Nav panel) ============ */
const TIDES_DATA = {
rule12: [
{ hr:"1-й час", frac:"1/12", pct:"~8%", cum:"8%" },
{ hr:"2-й час", frac:"2/12", pct:"~17%", cum:"25%" },
{ hr:"3-й час", frac:"3/12", pct:"~25%", cum:"50%" },
{ hr:"4-й час", frac:"3/12", pct:"~25%", cum:"75%" },
{ hr:"5-й час", frac:"2/12", pct:"~17%", cum:"92%" },
{ hr:"6-й час", frac:"1/12", pct:"~8%", cum:"100%" },
],
terms: [
{ nm:"Прилив (Flood)", d:"Вода поднимается. Течение идёт к берегу." },
{ nm:"Отлив (Ebb)", d:"Вода опускается. Течение идёт от берега." },
{ nm:"Полная вода (HW)", d:"High Water - максимальный уровень. После неё начинается отлив." },
{ nm:"Малая вода (LW)", d:"Low Water - минимальный уровень. После неё начинается прилив." },
{ nm:"Размах прилива (Range)", d:"Разница между HW и LW. В весенние приливы - максимальная, в квадратурные - минимальная." },
{ nm:"Весенний прилив (Springs)", d:"Максимальные приливы/отливы. Когда Солнце и Луна на одной линии (новолуние/полнолуние). Течения сильнее." },
{ nm:"Квадратурный прилив (Neaps)", d:"Минимальные приливы/отливы. Когда Луна под 90° к Солнцу (первая/третья четверть). Течения слабее." },
{ nm:"Течение (Current/Tidal stream)", d:"Горизонтальное движение воды. Приливное течение меняет направление ~каждые 6 часов. Влияет на курс яхты - её сносит." },
],
};
const CHART_SYMBOLS = [
{ nm:"Глубина (числа)", en:"Sounding", d:"Числа на карте - глубина в МЕТРАХ (или футах, смотри заголовок карты). Измерена от уровня наименьшего прилива (Chart Datum)." },
{ nm:"Изобата", en:"Depth contour", d:"Линия одинаковой глубины. 2м, 5м, 10м, 20м. Где линии густо - дно резко поднимается. Опасно!" },
{ nm:"Якорная стоянка ⚓", en:"Anchorage", d:"Знак якоря на карте - рекомендованное место для якорной стоянки. Хороший грунт, защита от ветра." },
{ nm:"Мель / осушка", en:"Drying height", d:"Подчёркнутые числа - высота осушки: сколько грунта обнажается при отливе. Опасно для киля!" },
{ nm:"Затонувшее ✕", en:"Wreck", d:"Крестик или + - затонувший объект. Может быть опасен для киля. Обходить с запасом." },
{ nm:"Скала ✳", en:"Rock", d:"Звёздочка - подводная скала. С числом - глубина над ней. Без числа - обнажается при отливе." },
{ nm:"Буй / знак", en:"Buoy", d:"Символ буя с описанием: цвет, топовый знак, характеристика огня. Маленький кружок с точкой - точное место." },
{ nm:"Магнитное склонение", en:"Variation", d:"Компасная роза на карте показывает склонение и год. Каждый год меняется - пересчитывать!" },
{ nm:"Запретная зона", en:"Prohibited area", d:"Косая штриховка - нельзя заходить. Военная, природоохранная, или другие ограничения." },
{ nm:"Течение →", en:"Tidal stream", d:"Стрелки с числами - направление и скорость приливного течения. Первое число - квадратура, второе - сизигия." },
];
function renderTides(){
const el = $("#navTides");
if (!el) return;
el.innerHTML = `
Правило двенадцатых (Rule of Twelfths)
За 6 часов от LW до HW (или обратно) вода поднимается/опускается неравномерно: медленно-быстро-быстро-медленно.
Самые быстрые часы - 3-й и 4-й (по 3/12 = 25% размаха каждый).
ЧасДоляНабрано от размаха
${TIDES_DATA.rule12.map(r => `
${r.hr}${r.frac}${r.pct} (итого ${r.cum})
`).join("")}
Пример: LW = 0.5м, HW = 3.5м, размах = 3.0м.
Через 3 часа после LW: 0.5 + 3.0 × 50% = 2.0м
Через 4 часа после LW: 0.5 + 3.0 × 75% = 2.75м
`).join("");
}
/* ============ CLOUDS & LOCAL WINDS (for Safety panel) ============ */
const CLOUDS = [
{ nm:"Перистые (Cirrus)", d:"Тонкие белые «волоски» высоко. Если появляются и сгущаются - через 12-24 часа возможен фронт. Если мало и не растут - хорошая погода." },
{ nm:"Кучевые (Cumulus)", d:"Белые «ватные» облака с плоским основанием. Признак хорошей погоды, если небольшие. Если растут вверх (башни) - к грозе." },
{ nm:"Кучево-дождевые (Cb)", d:"Огромные тёмные башни с наковальней наверху. ГРОЗА. Шквал, ливень, молнии. Если видишь Cb - готовь рифы, закрывай люки." },
{ nm:"Слоистые (Stratus)", d:"Серая пелена по всему небу. Мелкий дождь или морось. Плохая видимость. Не опасно, но неприятно." },
{ nm:"Высококучевые (Altocumulus)", d:"«Барашки» на среднем уровне. Если утром - к грозе после обеда. Если вечером - к хорошей погоде." },
{ nm:"Барическая тенденция", d:"Давление падает больше 3 мб за 3 часа - ВНИМАНИЕ, приближается шторм. Медленный рост давления - к стабильной погоде." },
];
const LOCAL_WINDS = [
{ nm:"Мельтеми (Этезии)", d:"Сильный северный ветер в Эгейском море, июль-август. 5-7 баллов, иногда до 8. Стабильный, предсказуемый. Стихает к ночи. Главный ветер для чартера в Греции." },
{ nm:"Бора", d:"Холодный сильный ветер с гор к морю. Хорватия, черногорское побережье. Зимой до 10 баллов. Шквалистый, опасный. Признак: ясное небо + резкое падение температуры." },
{ nm:"Мистраль", d:"Сильный холодный северо-западный ветер. Юг Франции, Лигурийское море. До 8-9 баллов. Разгоняет большую волну. Обычно 2-3 дня." },
{ nm:"Сирокко (Юго)", d:"Тёплый влажный южный ветер. Несёт пыль из Сахары. Плохая видимость. В Адриатике называется «юго» - приносит дождь и волну." },
{ nm:"Бриз (морской/береговой)", d:"Днём ветер с моря на берег (морской бриз, 10-15 узлов). Ночью наоборот - с берега в море (береговой бриз, слабее). Нормальное явление в хорошую погоду." },
{ nm:"Термический ветер", d:"Усиление ветра после обеда (13-16ч) из-за нагрева суши. К вечеру стихает. Учитывать при планировании переходов." },
];
function renderWeather(){
$("#safetyClouds").innerHTML = CLOUDS.map(c => `
`).join("");
}
/* ============ SIGNAL FLAGS (for COLREGS panel) ============ */
const SIGNAL_FLAGS = [
{ flag:"A", name:"Alfa", meaning:"У меня водолаз. Держитесь на расстоянии и на малом ходу.", colors:"Бело-синий (ласточкин хвост)", exam:true },
{ flag:"B", name:"Bravo", meaning:"Я принимаю/выгружаю/перевожу опасный груз.", colors:"Красный (треугольный хвост)", exam:true },
{ flag:"N", name:"November", meaning:"Нет (отрицание). Над флагом C = сигнал бедствия.", colors:"Сине-белая клетка", exam:true },
{ flag:"C", name:"Charlie", meaning:"Да (подтверждение). Под флагом N = сигнал бедствия.", colors:"Красно-бело-синие полосы", exam:true },
{ flag:"Q", name:"Quebec", meaning:"Моё судно чисто, прошу свободную практику (разрешение на вход в порт иностранного государства).", colors:"Жёлтый", exam:true },
{ flag:"O", name:"Oscar", meaning:"Человек за бортом!", colors:"Красно-жёлтый по диагонали", exam:true },
{ flag:"P", name:"Papa", meaning:"Все на борт, судно выходит в море. В порту: мне нужен лоцман.", colors:"Синий с белым прямоугольником", exam:false },
{ flag:"V", name:"Victor", meaning:"Мне нужна помощь.", colors:"Белый с красным крестом (Андреевский)", exam:false },
{ flag:"W", name:"Whiskey", meaning:"Мне нужна медицинская помощь.", colors:"Синий с белым крестом и красным квадратом", exam:false },
{ flag:"H", name:"Hotel", meaning:"У меня лоцман на борту.", colors:"Красно-белый вертикально", exam:false },
];
function renderFlags(){
const render = (container) => {
if (!container) return;
container.innerHTML = SIGNAL_FLAGS.map(f => `
${f.flag} - ${f.name} ${f.exam ? 'экзамен' : ''}
${f.colors}
${f.meaning}
`).join("");
};
render($("#colregsFlags"));
render($("#cmdFlags"));
}
/* ============ ANCHOR ============ */
const ANCHOR_TYPES = [
{ nm:"CQR (плуг)", en:"CQR / Plow", d:"Классический крейсерский якорь. Хорошо держит в песке, иле, глине. Плохо в камнях и водорослях. Часто стоит на круизных яхтах." },
{ nm:"Дельта / Delta", en:"Delta", d:"Усовершенствованный плуг с фиксированной рукояткой. Лучше забирает грунт, хорош в песке и иле. Стандарт на современных чартерных яхтах." },
{ nm:"Брюс / Bruce", en:"Bruce", d:"Три «лапки». Быстро забирает, хорош в песке. Хуже в твёрдой глине. Популярен на маленьких яхтах." },
{ nm:"Danforth", en:"Danforth / Fluke", d:"Плоский с двумя большими лапами. Отличный в песке и иле. Плохо в камнях. Часто используется как запасной - компактно складывается." },
{ nm:"Рокна / Rocna", en:"Rocna / New Generation", d:"Современный дизайн с рулём на лапе. Быстро забирает в любом грунте. Считается лучшим, но дорогой." },
];
const ANCHOR_PLACE = [
{ nm:"Защита от ветра", d:"Выбирай место, закрытое от предсказанного ветра. Посмотри прогноз: откуда будет дуть ночью? Берег должен закрывать от ветра." },
{ nm:"Глубина", d:"Идеально 3-8м. Мелко - сядешь на мель при отливе. Глубоко - не хватит цепи. На карте проверь глубины и тип дна." },
{ nm:"Грунт", d:"Лучше: песок, ил, глина. Хуже: камни, водоросли, ракушки. На карте: S = sand, M = mud, R = rock, Wd = weed." },
{ nm:"Пространство для разворота", d:"Яхта на якоре разворачивается на 360° при смене ветра/течения. Радиус = длина цепи + длина яхты. Не задень соседей!" },
{ nm:"Течения", d:"Сильное течение = больше нагрузка на якорь. В приливных районах цепи нужно больше. Следи за направлением течения." },
{ nm:"Пути отхода", d:"Если ночью усилится ветер - сможешь сняться? Не запирайся в тупике. Запомни пеленги на выход." },
];
const ANCHOR_WATCH = [
{ nm:"GPS-якорный круг", d:"Большинство картплоттеров умеют ставить anchor alarm. Если яхта выходит за круг - пищит. Настрой перед сном!" },
{ nm:"Пеленги на берег", d:"Запомни 2-3 ориентира на берегу и их пеленги. Если пеленг изменился - якорь ползёт." },
{ nm:"Провис цепи", d:"Потрогай цепь рукой (осторожно!). Если вибрирует/дрожит - якорь скребёт по дну. Если спокойно провисает - держит." },
{ nm:"Что делать если ползёт", d:"1) Травить больше цепи. 2) Если не помогает - завести двигатель и подтянуться к якорю. 3) Поднять и переставить в другом месте. Ночью - НЕ паниковать." },
];
function renderAnchor(){
$("#anchorTypes").innerHTML = ANCHOR_TYPES.map(a => `
${a.nm}
${a.en}
${a.d}
`).join("");
$("#anchorScope").innerHTML = `
Scope (отношение длины цепи к глубине):
Минимум: 3:1 - три длины глубины (только в тихую погоду, ненадолго) Норма: 5:1 - пять длин глубины (стандарт для ночёвки) Шторм: 7:1 и больше - семь длин (сильный ветер, плохой грунт)
Цепь vs трос: Цепь лучше (тяжёлая, лежит на дне, амортизирует). Трос легче, но нужен scope 7:1 минимум и обязательно 5-10м цепи у якоря.
`;
const procBlock = (title, steps, cls="") => `
${title}
${steps.map((s,i) => `
${i+1}
${s.t}
${s.d ? `
${s.d}
` : ""}
`).join("")}
`;
$("#anchorSet").innerHTML = procBlock("Постановка на якорь", [
{ t:"Подойти к месту ПРОТИВ ветра/течения", d:"Нос на ветер, малый ход. Остановиться там, где хочешь стоять." },
{ t:"Команда: «Приготовить якорь!»", d:"Снять крепление, проверить что цепь не запутана, подготовить стопор." },
{ t:"Стоп машина, дать яхте остановиться", d:"Яхта должна зависнуть без хода." },
{ t:"Команда: «Отдать якорь!»", d:"Якорь пошёл. НЕ бросать с грохотом - опускать контролируемо через брашпиль или руками." },
{ t:"Медленно назад - травить цепь", d:"Включить реверс на холостых. Цепь ложится на дно ровно, не кучей." },
{ t:"Вытравить расчётную длину цепи", d:"Scope 5:1 от глубины + высоты клюза. Пометки на цепи помогают считать." },
{ t:"Дать натяжение задним ходом", d:"Подгазовать на 1500-2000 об/мин назад на 30 секунд. Якорь должен забрать грунт." },
{ t:"Проверить: держит?", d:"GPS не двигается, пеленги на берег стабильны. Если ползёт - больше цепи или переставить." },
{ t:"Застопорить цепь, заглушить двигатель", d:"Поставить якорный стопор. Запомнить пеленги. Включить якорный огонь если темнеет." },
]);
$("#anchorWeigh").innerHTML = procBlock("Снятие с якоря", [
{ t:"Завести двигатель, прогреть", d:"Всегда под мотором. Под парусами с якоря - только для опытных." },
{ t:"Команда: «Выбираем якорь!»", d:"Человек на носу начинает подтягивать цепь (брашпиль или руками)." },
{ t:"Подходить вперёд к якорю", d:"Малый ход вперёд, пока нос на баке выбирает. Не тянуть цепь - подъезжать к ней." },
{ t:"Цепь вертикально - «Якорь на панер!»", d:"Цепь стоит вертикально. Якорь вот-вот оторвётся от дна." },
{ t:"Выдрать якорь: короткий рывок вперёд", d:"Подгазовать - якорь отрывается. Человек на носу: «Якорь чист!» или «Якорь нечист!»" },
{ t:"Поднять якорь полностью", d:"Закрепить в клюзе. Промыть водой от грязи если есть." },
{ t:"Осмотреть: чист?", d:"Нет ли чужих тросов, водорослей, камней на лапах. Если нечист - прочистить." },
], "is-info");
$("#anchorWatch").innerHTML = ANCHOR_WATCH.map(a => `