From 03c110363859c325250ccd4155244ee279453cb0 Mon Sep 17 00:00:00 2001 From: Arity-T Date: Sun, 30 Nov 2025 18:34:17 +0300 Subject: [PATCH] =?UTF-8?q?=D0=95=D1=89=D1=91=20=D0=BA=D0=B0=D0=BA=D0=B8?= =?UTF-8?q?=D0=B5-=D1=82=D0=BE=20=D0=BF=D1=80=D0=B0=D0=B2=D0=BA=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lab1/report/graph.dot | 93 ++++------- lab1/report/img/graph.png | Bin 0 -> 34010 bytes lab1/report/report.tex | 328 +++++++++++++------------------------- 3 files changed, 147 insertions(+), 274 deletions(-) create mode 100644 lab1/report/img/graph.png diff --git a/lab1/report/graph.dot b/lab1/report/graph.dot index ed45167..140fa29 100644 --- a/lab1/report/graph.dot +++ b/lab1/report/graph.dot @@ -1,69 +1,46 @@ digraph MushroomHikeApp { - rankdir=LR; - fontsize=10; - node [shape=rectangle, style=rounded, fontsize=10]; + rankdir=TB; + fontsize=12; + node [shape=rectangle, style=rounded, fontsize=11, margin="0.2,0.1"]; + edge [fontsize=9]; - // --- Основные состояния участников похода (a–m) --- - a [label="a) Начальное состояние\n(главный экран)"]; - b [label="b) Планирование похода\n(маршрут, точки, погода, офлайн-карты)"]; - c [label="c) Управление участниками\n(приглашения, роли, доверенные контакты)"]; - d [label="d) Чек-лист снаряжения\n(шаблон, распределение, контроль сборов)"]; - e [label="e) Активная навигация\n(карта, GPS, режимы отображения)"]; - f [label="f) Фиксация находки\n(фото, координаты, заметки)"]; - g [label="g) Семейная корзина\n(все находки группы)"]; - h [label="h) Семейный чат\n(сообщения, фото, геолокация)"]; - i [label="i) Справочник грибов\n(виды, съедобность, двойники)"]; - k [label="k) Панель организатора\n(мониторинг, управление маршрутом)"]; - l [label="l) Архив походов\n(список завершённых походов)"]; - m [label="m) Детальный просмотр похода\n(трек, события, статистика)"]; + // --- Основные состояния (соответствуют пунктам меню и задачам) --- + main [label="Главная\n(выбор похода, архив)"]; + route [label="Маршрут\n(планирование, навигация)"]; + basket [label="Корзина\n(находки группы)"]; + chat [label="Чат\n(координация)"]; + guide [label="Справочник\n(виды грибов)"]; + // --- SOS (красный, доступен отовсюду) --- + sos [label="SOS\n(экстренный вызов)", color="red", fontcolor="red", style="rounded,bold", penwidth=2]; - // --- SOS (красный, отдельный) --- - j [label="j) Экстренный режим (SOS)", color="red", fontcolor="red", style="rounded,bold", penwidth=2]; + // --- Невидимая точка для SOS --- + anyToSOS [shape=point, width=0, height=0, style=invis]; + anyToSOS -> sos [label="из любого\nсостояния", style=dashed, color="red", fontcolor="red"]; - // --- Технические невидимые точки для "стрелок из ниоткуда" --- - fromAnywhereToA [shape=point, width=0, height=0, style=invis]; - fromAnywhereToSOS [shape=point, width=0, height=0, style=invis]; + // --- Переходы между основными состояниями --- + main -> route [label="создать/\nначать поход"]; + route -> main [label="завершить\nпоход"]; - // Стрелки "из ниоткуда" - fromAnywhereToA -> a [label="25. Переход\nна главный экран", style=dashed]; - fromAnywhereToSOS -> j [label="24. SOS\n(из любого состояния)", style=dashed, color="red", fontcolor="red"]; + // Нижняя навигация (доступна из активного похода) + route -> basket [label=""]; + basket -> route [label=""]; + + route -> chat [label=""]; + chat -> route [label=""]; + + route -> guide [label=""]; + guide -> route [label=""]; - // --- Переходы (кроме SOS и возврата на главный) --- + basket -> chat [label=""]; + chat -> basket [label=""]; - a -> b [label="1. Создать поход"]; + basket -> guide [label=""]; + guide -> basket [label=""]; - a -> e [label="2. Присоединиться (день похода)"]; - a -> d [label="3. Присоединиться (подготовка)"]; - - b -> c [label="4. Управление\nучастниками"]; - - c -> d [label="5. Чек-лист"]; - b -> d [label="6. Чек-лист"]; - - d -> e [label="7. Начать поход"]; - b -> e [label="8. Начать поход"]; - - e -> f [label="9. Фиксировать\nнаходку"]; - f -> e [label="10. Сохранить\nи вернуться"]; - - e -> g [label="11. Открыть корзину"]; - g -> e [label="12. Назад к\nнавигации"]; - - e -> h [label="13. Открыть чат"]; - h -> e [label="14. Назад к\nнавигации"]; - - f -> i [label="15. Открыть\nсправочник"]; - g -> i [label="16. Открыть\nсправочник"]; - i -> f [label="17. Назад\nк фиксации"]; - i -> g [label="18. Назад\nк корзине"]; - - e -> k [label="19. Панель\nорганизатора"]; - k -> e [label="20. Назад к\nнавигации"]; - - e -> l [label="21. Завершить\nпоход"]; - - a -> l [label="22. Открыть\nархив"]; - l -> m [label="23. Открыть\nпоход"]; + chat -> guide [label=""]; + guide -> chat [label=""]; + // Фиксация находки (внутри маршрута) + route -> basket [label="добавить\nнаходку", style=dashed]; } diff --git a/lab1/report/img/graph.png b/lab1/report/img/graph.png new file mode 100644 index 0000000000000000000000000000000000000000..54c116df942676db47c5903ce16b5da06715e5df GIT binary patch literal 34010 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 шириной 200-300 метров. При выходе за пределы коридора срабатывает голосовое предупреждение: <<Вы отклонились от маршрута на 250 метров>> и отображается стрелка направления возврата. Все остальные участники получают уведомления. Для детей можно установить более строгие ограничения. + \textit{Метод обработки:} Приложение непрерывно отслеживает положение относительно маршрута и устанавливает <<коридор безопасности>> с дифференцированной шириной в зависимости от возраста участника: для детей — 150 метров, для взрослых — 250 метров, для пожилых участников — 200 метров. При выходе за пределы коридора срабатывает голосовое предупреждение: <<Вы отклонились от маршрута на 150 метров>> и отображается стрелка направления возврата. Организатор и все остальные участники получают уведомления. \section{Описание дизайна экранной формы} @@ -818,7 +727,7 @@ \item \textbf{Молния} --- уровень заряда батареи. \item \textbf{Антенна с волнами} --- уровень сигнала связи. \item \textbf{Фотоаппарат} --- сделать фото гриба. - \item \textbf{Тревожный треугольник/круг SOS} --- экстренная кнопка. + \item \textbf{Тревожный круг SOS} --- экстренная кнопка. \end{itemize} \textbf{Цвет иконок:} по умолчанию тёмно-серый (\#2C3E50) для нейтральных элементов, окрашиваются в акцентные цвета при активации или для семантического значения (красная иконка низкого заряда, зелёная галочка выполнения). @@ -854,32 +763,6 @@ \textbf{Индикация выбора:} для элементов списка, переключателей, чекбоксов используется изменение цвета фона (светло-зелёный \#E8F5E9 для выбранного), появление галочки-иконки, увеличение высоты элемента на 2--4pt. - \subsection{Анимация и обратная связь} - - Анимации используются для улучшения понимания системы и подтверждения действий, но не должны замедлять работу. - - \textbf{Длительность анимаций:} - \begin{itemize} - \item Быстрые переходы (смена состояний кнопок): 100--150ms. - \item Средние переходы (открытие модальных окон, карточек): 200--300ms. - \item Длинные анимации (переход между экранами): 300--400ms. - \end{itemize} - - \textbf{Тактильная обратная связь (вибрация):} - \begin{itemize} - \item Лёгкая вибрация (10ms) при нажатии кнопок для подтверждения касания. - \item Средняя вибрация (50ms) при достижении контрольной точки. - \item Сильная вибрация (200ms, паттерн) при предупреждениях и активации SOS. - \end{itemize} - - \textbf{Звуковые сигналы:} - \begin{itemize} - \item Лёгкий щелчок при обычных действиях (опционально, можно отключить). - \item Мелодичный сигнал при успешных действиях (отметка на точке, добавление гриба). - \item Настойчивый звук при критических уведомлениях (низкий заряд, отклонение от маршрута). - \item Тревожный сигнал при активации SOS (можно отключить, если нужна скрытность). - \end{itemize} - \newpage \section{Шаблон экранной формы} @@ -1132,7 +1015,20 @@ \label{fig:chat-screens} \end{figure} - % \section{Выводы} - % Описан интерфейс приложения для семейного похода за грибами: выделены заинтересованные лица, их ожидания, требования к платформе, модели пользователей и сценарии. Рассмотрены функции, диалоговые структуры, методы снижения ошибок и особенности дизайна. Подготовленный материал служит основой для создания макета экранов и дальнейшего прототипирования. + \newpage + \section*{Заключение} + \addcontentsline{toc}{section}{Заключение} + + В ходе работы выполнено проектирование интерфейса приложения для организации семейных походов за грибами. Описана предметная область и сформулированы цели приложения. Определены заинтересованные лица и их ожидания. Сформулированы требования к системе. Построена модель пользователей с описанием персонажей и их квалификации. Определены задачи приложения и описаны основные процессы. Перечислены функции приложения. Разработана структура диалога в виде графа состояний. Описаны технологии ввода данных и типичные ошибки пользователей. Разработан дизайн экранных форм: определены цветовая схема, типографика, иконки и элементы управления. Создан шаблон экранной формы и эскизы основных экранов приложения. + \newpage + \section*{Список литературы} + \addcontentsline{toc}{section}{Список литературы} + + \vspace{-1.5cm} + \begin{thebibliography}{0} + \bibitem{novikov} + Алан Купер. Об интерфейсе. Основы проектирования взаимодействия ИМВ, 2-е изд. + Пер. с англ. — 2009. — 688 с. + \end{thebibliography} \end{document}