# ТЗ: интерфейс экрана портативного ADS-B/FLARM предупреждения

Документ фиксирует текущие требования и решения по прототипу интерфейса прибора. Его можно использовать как самостоятельное задание для другого агента или разработчика.

## 1. Назначение прибора

Портативное устройство должно:

- слушать эфир ADS-B/авиатрафика;
- отслеживать собственную высоту, локацию, курс и скорость;
- рассчитывать сближение с воздушными судами по их положению, высоте, вертикальной скорости, горизонтальной скорости и курсу;
- предупреждать о потенциально опасном сближении;
- показывать на экране схему движения целей и численные параметры сближения.

Основной сценарий: пользователь летит на параплане/дельтаплане, крутит термик, получает предупреждение о скоростной цели и уходит от точки максимального сближения.

## 2. Текущий выбранный экран

Остановились на одном варианте дисплея:

- `Transflective TFT 3.5"` в альбомной ориентации;
- разрешение: `800×480`;
- физический размер: `76.2×45.7 мм`;
- симулятор должен отображать экран с учетом реального физического размера, разрешения экрана компьютера, `devicePixelRatio` и заданной диагонали монитора;
- по умолчанию внешний масштаб просмотра симуляции: `2:1`;
- значение масштаба просмотра должно отображаться корректно, например `200% · 2:1 · масштаб просмотра`.

Остальные ранее рассматривавшиеся экраны нужно убрать из активного интерфейса, но можно сохранять старые наработки в коде/истории, если они не мешают.

## 3. Общий стиль интерфейса прибора

- Интерфейс монохромный.
- Графика должна быть читаемой на маленьком экране и имитировать приборную индикацию.
- Не использовать цвет как носитель смысла.
- Важные элементы должны отличаться формой, толщиной, заливкой, миганием и расположением.
- Линии карты/траекторий должны быть тонкими, но различимыми.
- Текст и цифры должны быть крупными, особенно в правой части с тревожными параметрами.
- Нужно использовать все рабочее поле дисплея, без лишних рамок вокруг графического модуля.

## 4. Основная компоновка экрана

Экран разделен на две зоны:

- слева большая графическая схема;
- справа узкая числовая панель.

Правая панель должна быть настолько узкой, насколько позволяет читаемость, чтобы максимум места отдать графике.

На графической схеме:

- пользователь находится в центре и отображается маленькой точкой;
- изображение ориентировано по текущему курсу пользователя;
- отдельное численное указание собственного курса на экране не нужно;
- в левом верхнем углу находится маленький компас в виде ромба;
- у компаса северная часть закрашена;
- букву `N` и дополнительные треугольники у компаса не показывать;
- направление на север читается только по закрашенной части ромба.

## 5. Графическая схема целей

На схеме должны отображаться:

- собственное положение маленькой точкой в центре;
- опасная цель;
- неопасные цели;
- пройденные траектории целей;
- расчетные траектории целей;
- окружности дистанции;
- масштаб;
- точка/зона максимального сближения только там, где это действительно полезно и не ухудшает читаемость.

Текущие требования к символам:

- опасная цель отображается заполненной стрелкой;
- у опасной цели мигает только заливка стрелки;
- контур опасной стрелки всегда видим;
- неопасные цели отображаются меньшими незаполненными стрелками;
- неопасные цели не должны иметь точку максимального сближения;
- символ пользователя должен быть маленькой точкой, не крупным кругом.

Траектории:

- уже пройденный путь цели: тонкая сплошная линия;
- расчетная траектория цели: тонкая пунктирная линия, но толще окружностей радиуса;
- расчетная траектория должна быть продолжением текущего курса цели;
- если цель меняет курс, история должна показывать изменение курса, а расчетная линия должна начинаться от текущего положения и идти по текущему вектору движения.

Окружности дистанции:

- окружности должны быть очень тонкими;
- текущий стиль: тонкий пунктир;
- подписи окружностей маленькие;
- в подписях не писать `км`, только число;
- подписи радиусов нужно размещать так, чтобы они не засоряли центр схемы;
- в левом нижнем углу дополнительно показывать масштаб как диаметр, например `D 50 км`.

## 6. Масштабы схемы

Должна быть сетка фиксированных масштабов:

- очень мелкий: радиус `100 км`, окружности `50` и `100`;
- мелкий: радиус `50 км`, окружности `25` и `50`;
- средний: радиус `20 км`, окружности `10` и `20`;
- крупный: радиус `10 км`, окружности `5` и `10`;
- самый крупный: радиус `5 км`, окружности `2` и `3`.

Автомасштаб:

- прибор должен выбирать максимально доступное увеличение, при котором опасная цель гарантированно помещается в максимальный радиус масштаба;
- масштаб не должен перескакивать из-за поворота изображения по курсу пользователя;
- расчет автоподбора масштаба должен учитывать радиальную дистанцию до опасной цели, точку CPA и расчетную траекторию, а не только экранные координаты после поворота;
- при опасной скоростной цели за несколько минут до сближения масштаб может быть мелким, чтобы цель помещалась на схеме.

Ручное управление масштабом:

- кнопка `+` увеличивает масштаб, то есть выбирает более крупное приближение;
- кнопка `-` уменьшает масштаб, то есть выбирает более дальний обзор;
- `SET` при однократном нажатии сбрасывает масштаб в автоматический режим.

## 7. Правая числовая панель

В правой части экрана должны быть все числовые параметры.

Верхняя часть:

- не писать слово `ALARM`;
- вместо него показывать треугольник с восклицательным знаком, название цели, например `T1`, и скорость цели;
- ниже показывать высоту цели и вертикальную скорость цели;
- для параметров цели обязательно указывать единицы измерения: `км/ч`, `м`, `м/с`;
- единицы измерения параметров цели должны быть справа от цифр;
- цифры скорости, высоты и вертикальной скорости цели должны быть крупными и читаемыми;
- значения параметров цели должны быть выровнены по вертикали по середине своей строки/ячейки.

Нижние строки параметров сближения:

- `TCPA`: время до точки минимального сближения;
- `3D CPA` или эквивалентный векторный параметр: дистанция до точки минимального сближения, справа от числа должна быть единица `м`;
- `V CPA`: вертикальное расхождение именно в точке максимального сближения;
- `H CPA`: горизонтальное расхождение именно в точке максимального сближения.

Выравнивание:

- цифры параметров расхождения должны быть крупными;
- цифры должны быть выровнены по правому краю в одной вертикальной линии;
- нижние числовые ячейки нужно мысленно делить на три зоны:
  - самая широкая левая зона: число, выровненное вправо;
  - средняя зона: единицы измерения, если они нужны;
  - правая узкая зона: направление для горизонтального или вертикального расхождения;
- для `V CPA` вместо `UP/DN` использовать жирные треугольники вверх/вниз;
- в вертикальном расхождении не показывать символ метров;
- для горизонтального расхождения не показывать метры в самой строке, если это ломает выравнивание;
- отдельный указатель направления на точку максимального сближения должен быть справа от горизонтальной дистанции в таблице, но не должен ухудшать выравнивание цифр.

## 8. Поведение тревоги

Тревога должна срабатывать, если:

- курс цели пересекает защитную сферу радиусом `1 км` менее чем через `5 мин`;
- или цель входит в сферу `3 км` менее чем через `10 мин`.

Текущее поведение для панели:

- при активной тревоге правая числовая часть экрана мигает инверсией;
- мигание продолжается до тех пор, пока пользователь не нажмет `SET`, или пока точка максимального сближения не выйдет за пределы безопасного радиуса;
- после подтверждения `SET` панель перестает мигать, но данные продолжают обновляться;
- если тревога ушла и снова возникла новая опасная ситуация, подтверждение должно сбрасываться.

Важно: значения `TCPA`, горизонтального расхождения и вертикального расхождения должны считаться для одной и той же точки максимального сближения.

## 9. Расчет CPA

CPA должен рассчитываться по фактическим векторным данным:

- собственная позиция;
- собственная скорость;
- собственная вертикальная скорость;
- позиция цели;
- скорость цели;
- вертикальная скорость цели;
- курс цели.

Нужно считать:

- время до CPA;
- 3D-дистанцию в CPA;
- горизонтальную дистанцию в CPA;
- вертикальное расхождение в CPA;
- направление на горизонтальную точку CPA относительно ориентации экрана/курса пользователя.

Если пользователь начинает маневр уклонения, численные параметры должны меняться физически корректно:

- при уходе от точки сближения горизонтальная дистанция CPA должна увеличиваться;
- при снижении вертикальное расхождение должно увеличиваться, если цель проходит выше;
- время до CPA и дистанции должны пересчитываться непрерывно.

## 10. Модель симуляции

Симуляция должна показывать такой сценарий:

1. Пользователь около `10 с` крутит термик.
2. Затем получает тревогу.
3. Пользователь плавно перестает крутить спираль.
4. Пользователь начинает улетать по прямой от точки максимального сближения.
5. Маневр: аксель со сложенными ушами.

Параметры пользователя:

- скорость в термике около `30 км/ч`;
- радиус спирали около `40 м`;
- набор в термике около `1.2 м/с`;
- один оборот примерно за `7-10 с` в целевом поведении;
- турбулентность должна быть слабой, без резких дерганий;
- после тревоги скорость ухода около `50 км/ч`;
- вертикальная скорость ухода около `-2.5 м/с`;
- переход из спирали в прямолинейный уход должен быть плавным.

Параметры опасной цели:

- цель `T1`;
- типовая скоростная коммерческая/турбопроп/вертолетная цель;
- для основного опасного сценария скорость около `820 км/ч`;
- цель движется в наборе высоты;
- вертикальная скорость цели около `+6 м/с`;
- цель должна быть показана уже с длинной историей трека и изменениями курса;
- опасная цель может изменить курс и стать угрожающей.

Неопасная цель:

- должна присутствовать как вторая цель;
- не должна создавать опасного пересечения;
- отображается меньшей незаполненной стрелкой;
- для нее не рисовать точку максимального сближения.

Частота отрисовки:

- симуляция должна обновлять изображение `4 раза в секунду`.

## 11. Физические кнопки прибора

В интерфейсе симулятора должны быть показаны физические кнопки управления прибором:

- `+`;
- `SET`;
- `-`.

Поведение:

- `+`: увеличить масштаб прибора;
- `-`: уменьшить масштаб прибора;
- `SET`, однократное нажатие: сброс масштаба в автоматический режим и подтверждение тревоги;
- `SET`, двойное нажатие: переключение экранов;
- `SET`, долгое нажатие: открытие меню.

Эти кнопки относятся к прибору, а не к масштабу просмотра симуляции на компьютере.

## 12. Внешние кнопки масштаба симуляции

Отдельно от кнопок прибора должны быть кнопки управления масштабом отображения симулятора на экране компьютера:

- уменьшить масштаб просмотра;
- сбросить в `1:1`;
- увеличить масштаб просмотра.

По умолчанию:

- масштаб просмотра `2:1`;
- отображаемый текст масштаба должен соответствовать фактическому CSS-размеру симулируемого экрана.

## 13. Карта и рельеф

Функция карты сейчас отключена, но наработки нужно сохранить.

Что было запрошено и должно быть сохранено как будущая возможность:

- реальная перерисованная карта на приборе, адаптированная под монохромный экран;
- примерная локация для тестов: Чамели, Турция;
- нижняя карта в симуляторе нужна не как часть прибора, а как инструмент выбора собственной локации;
- пользователь должен иметь возможность переместить свою точку на нижней карте;
- управление нижней картой должно менять отображение на симуляции прибора;
- слои карты:
  - топография;
  - дороги;
  - населенные пункты;
- тип карты и детализация должны управляться снаружи прибора;
- карта на приборе должна быть тонкой, монохромной, без цвета;
- топографические/дорожные линии не должны забивать авиационную информацию.

Текущий статус:

- функцию карты нужно считать отключенной;
- код и наработки по карте сохранять;
- в активном интерфейсе чекбоксы и нижняя карта могут быть скрыты;
- при возврате к карте нужно адаптировать ее под ЧБ-дисплей, а не показывать цветные тайлы как есть.

## 14. Файлы текущего прототипа

Основные файлы прототипа:

- `heading-demo.html` — активная страница демо;
- `heading-demo.css` — стили активного демо;
- `heading-demo.js` — симуляция, отрисовка экрана, логика кнопок, CPA, масштабирование;
- `docs/algorithm.md` — отдельные заметки по алгоритму;
- `docs/display-interface-requirements.md` — этот документ с требованиями.

В текущем коде карта сохранена, но должна оставаться выключенной, пока явно не будет принято решение вернуть ее в интерфейс.

## 15. Критерии проверки

Перед сдачей изменений нужно проверить:

- экран один: `Transflective TFT 3.5" · 800×480 · 76.2×45.7 мм`;
- экран в альбомной ориентации;
- симуляция по умолчанию открывается в масштабе просмотра `2:1`;
- числовая панель справа читаема;
- цифры CPA выровнены по правому краю;
- параметры цели имеют единицы измерения справа от цифр;
- правая панель мигает инверсией при тревоге;
- `SET` подтверждает тревогу и сбрасывает автомасштаб;
- `+` и `-` меняют масштаб прибора;
- опасная цель мигает только заливкой, контур остается видимым;
- неопасная цель меньше и незаполненная;
- окружности масштаба подписаны числами без `км`;
- расчетная траектория идет от текущего положения цели по текущему курсу;
- пройденная траектория тонкая сплошная;
- расчетная траектория тонкая пунктирная;
- пользователь отображается маленькой точкой;
- карта отключена, но код/наработки по карте не удалены.
