Пояснительная записка (1226228), страница 4
Текст из файла (страница 4)
– формулировка задания, входной чертеж, ход решения;
– вариант задания;
– класс действий;
Для описания перечисленных объектов используется объектно-ориентированный подход: выделяются объекты предметной области, создаются классы, определяется взаимодействия между ними.
Был выделен интерфейс GraphicsObject для описания единого набора операций над графическими объектами, присущими данным геометрическим задачам.
Класс Axis отвечает за построение осей координат. Реализует один метод интерфейса GraphicsObject для построения осей координат, остальные методы не использует.
Класс Point описывает точку. Содержит методы построения исходных точек и нахождения точек решения по полученным координатам, (используемых в заданиях) полученных из задания. Реализует методы интерфейса GraphicsObject для построения точек имея координаты x, y, z, название и их цвет.
Класс Lines описывающий линии построения по координатам. Используемые для решения задачи и построения исходного чертежа. Реализует методы интерфейса GraphicsObject для отображения линий построения имея начальные и конечные точки, цвет линий.
Класс Exercise описывает название задания и его формулировку, а также методы для пошагового решения задачи. Реализует методы получить/передать формулировку и номер задания. Добавление объектов, рисование анимации, текущий, следующий и предыдущий шаги.
Класс DrawAction содержит методы реализации пошагового решения задач.
Входными данными для описываемого приложения являются координаты объектов (точек или линий), значения которых определены в соответствии с заданием (рисунок1). Указанные координаты записаны в файлы формата XML. Для каждого задания создается свой отдельный файл.
При запуске приложения пользователем загружается XML файл, соответствующий выбранному заданию. Синтаксический анализатор обрабатывает загруженные файлы, выдавая на выходе числовые данные – координаты объектов.
2.1.2 Структура файла для хранения
XML (Extensible Markup Language) — расширяемый язык разметки, применяется для создания баз данных, веб-страниц, используется для обмена информацией между программами. Применяется в таких технологиях, как Ajax, SOAP, а так же является основой языка XAML. [9]
XML является языком свободного описания структур документов. То есть, если необходимо, чтобы в документе присутствовал какой-либо элемент, то для его описания определется некоторый тег. Например, для описания элемента «текстовая строка» можно условиться использовать тег <string> </string>, где первая метка указывает начало описания элемента, а вторая (со знаком /) - конец описания. Между парой тегов помещается сам элемент.
Для каждого элемента применяется своя пара тегов, при этом однотипные элементы описываются одинаковой парой тегов. Таким образом, для описания двух строк нужны две пары тегов:
<string>это первая строка</string>
<string>это вторая строка</string>
В открывающем теге можно поместить атрибуты описываемого элемента, такие как цвет, размер, начертание, выравнивание и т.п., то есть описать особенности формируемого элемента.
Атрибут – это свойство описываемого элемента. При этом у однотипных элементов полный набор атрибутов будет совпадать, но в описании можно использовать не все свойства. Каждому имени атрибута присваивается значение, записанное в виде текстовой строки, то есть заключенное в кавычки. Разделяются свойства пробелом либо переносом строки.
Строка
<string color = “red” align = “center”>это первая строка</string>
описывает текстовую строку, написанную красным шрифтом (начертание и размер установлены по умолчанию, поскольку эти свойства не указаны при описании) с выравниванием в центре страницы.
Каким бы свободным не был стиль XML-документа, все-таки существуют правила его формирования.
Существует набор правил для формирования XML-документов.
В языке XML все теги парные. Это значит, что у каждого открывающего тега обязательно должен присутствовать закрывающий тег. Это правило позволяет описывать вложенные экземпляры, то есть помещать внутри одного элемента другие. Если тело тега пусто, то два тега записываются в один, который завершается косой чертой:
< string color = “red” align = “center”/>.
Документ должен содержать строку заголовка, в которой указывается версия языка и используемая текстовая кодировка:
<?xml version="1.0" encoding="utf8"?>
Имена тегов должны начинаться с буквы или символа «_» с соблюдением регистра, поскольку XML различает регистры.
Для реализации возможности одинаковых имен элементов для различающихся структур используют понятие пространства имен. Чтобы различать схемы документов, для каждой из них ставится в соответствие специальный уникальный идентификатор ресурса или URI.
В результате схемы будут считаться тождественными только в том случае, если уникальные идентификаторы будут совпадать. В связи с этим в качестве идентификатора чаще всего используется адрес своего (возможно, несуществующего) ресурса. [5] Пространство имен определяется благодаря атрибуту xmlns в начальном теге элемента:
< string xmlns:string="http://my_strings/styles/new" ... > ... </string>.
В XML-тексте комментарии выделяются тегами <!-- и --> :
<!-- текст, не читаемый анализатором документа --> .
Задание будет храниться в файле с расширением XML. Все элементы которые нужны для построения и решения задачи поместим в отдельные тэги. Главные тэг:
<points> …. </points>
в нем храниться вся информация о задании. Тэг для хранения точек:
<point
x = "10"
y = "10"
z = "10"
name = "F"
color = "0"
/>
будет содержать координаты точек, название и цвет. Для хранения линий построения тэг:
<edge>
<startPt
StartPt = "x,y"
/>
<endPt
EndPt = "x1,y1"
/>
<color> color = "2" </color>
в него будет передаваться координаты точек начала и конца линии и цвет линии.
Пример хранения первого задания решаемого приложением:
<?xml version = "1.0" encoding = "UTF-8"?>
<points>
<point
x = "45"
y = "-70"
z = "40"
name = "A"
color = "1"
/>
<point
x = "30"
y = "25"
z = "60"
name = "B"
color = "2"
/>
<point
x = "25"
y = "-60"
z = "-10"
name = "C"
color = "3"
/>
<point
x = "40"
y = "40"
z = "0"
name = "D"
color = "4"
/>
<point
x = "60"
y = "0"
z = "60"
name = "E"
color = "5"
/>
<edge>
<startPt
StartPt = "x,y"
/>
<endPt
EndPt = "x1,y1"
/>
<color> color = "6" </color>
</edge>
</points>
2.2 Интерфейс пользователя и функционал приложения
Данная разрабатываемая система будет обладать следующе функционалом:
– просмотр списка заданий задач;
– просмотр задачи;
– просмотр решения задачи;
– перейти следующему шагу;
– перейти к предыдущему шагу;
– просмотр всех шагов подряд;
– перейти к первому шагу;
– обновить задачи.
Material Design дизайн-система позволяющая создавать консистентный пользовательский опыт на всех экранах: десктоп, смартфон, планшеты, часы, телевизоры, машины. Для Android-приложений Material Design представляет собой эволюцию визуального языка Holo и дизайн-гайдлайнов. Во многих смыслах это более гибкая система, которая создавалась с учетом того, что пользоваться ей будут другие дизайнеры — Google был лишь первым пользователем.
Material Design позволяет более объективно подходить к принятию дизайн-решений: как что-то выглядит, как что-то работает, как осуществляется анимация и так далее. Она задает разумные рамки, но не излишние ограничения.
4 принципа Material Design:
Тактильные поверхности. В Material Design интерфейс складывается из осязаемых слоёв так называемой «цифровой бумаги». Эти слои расположены на разной высоте и отбрасывают тени друг на друга, что помогает пользователям лучше понимать анатомию интерфейса и принцип взаимодействия с ним.
Полиграфический дизайн. Если считать слои кусками «цифровой бумаги», то в том, что касается «цифровых чернил» (всего того, что изображается на «цифровой бумаге»), используется подход из традиционного графического дизайна: например, журнального и плакатного.
Осмысленная анимация. В реальном мире предметы не возникают из ниоткуда и не исчезают в никуда — такое бывает только в кино. Поэтому в Material Design мы всё время думаем о том, как с помощью анимации в слоях и в «цифровых чернилах» давать пользователям подсказки о работе интерфейса.
Адаптивный дизайн. Речь идет о том, как мы применяем предыдущие три концепции на разных устройствах с разными разрешениями и размерами экранов. [10]
Ниже приведем пример интерфейс приложения пользователя, разрабатываемого приложения. На рисунке 2 изображено главное окна программы.
Рисунок 2 – Главное окно приложения
Пользователь с помощью жеста руки может выбрать необходимую задачу. После чего пользователь переходит к тесту задачи (рисунок 3), которой необходимо решить, после чего пользователь прокручивая жестом руки вниз может увидеть рисунок задачи
Рисунок 3 – Окно с описанием задания
Рисунок 4 – Окно с описанием.
На данном изображении (рисунок 4) представлена информация о курсе, семестре и о группах студентов которым предназначено данное приложение.
3 Разработка
В данном разделе рассмотрена реализация всех типовых задач для спроектированной системы. Это задачи: построения графического изображения решения, анализа и конвертация во внутреннее представление исходных данных обучающих задач, построение интерфейса пользователя.
3.1 Реализация внутренней структуры данных
Основной проблемой, которую необходимо решить при реализации структуры внутренних данных – это построение изображения. Для построения изображений на платформе Android существует две технологии. Исходя из общего решения, следует выбрать работу с OpenGL. Рассмотрим подробнее используемую технологию.
OpenGL (Open Graphics Library) – спецификация, определяющая независимый от языка программирования платформонезависимый программный интерфейс для написания приложений, использующих двумерную и трёхмерную компьютерную графику.
Библиотека OpenGL разработана как обобщенный, независимый интерфейс, который может быть реализован для различного аппаратного обеспечения. По этой причине сама OpenGL не включает функций для создания окон или для захвата пользовательского ввода; для этих операций вы должны использовать средства той операционной системы, в которой вы работаете. По тем же причинам в OpenGL нет высокоуровневых функций для описания моделей трехмерных объектов. Такие команды позволили бы вам описывать относительно сложные фигуры, такие как автомобили, части человеческого тела или молекулы. При использовании библиотеки OpenGL можно строить необходимые модели при помощи небольшого набора геометрических примитивов – точек, линий и многоугольников (полигонов). [7]
Тем не менее, библиотека, предоставляющая описанные возможности может быть построена поверх OpenGL. Библиотека утилит OpenGL (OpenGL Utility Library – GLU) предоставляет множество средств для моделирования, например, квадрические поверхности, кривые и поверхности типа NURBS. GLU – стандартная часть любой реализации OpenGL. Существуют также и более высокоуровневые библиотеки, например, Fahrenheit Scene Graph (FSG), которые построены с использованием OpenGL и распространяются отдельно для многих ее реализаций. Основные графические операции, которые выполняет OpenGL для вывода изображения на экран коротко описаны в следующем списке:
– конструирует фигуры из геометрических примитивов, создавая математическое описание объектов (примитивами в OpenGL считаются точки, линии, полигоны, битовые карты и изображения);
– позиционирует объекты в трехмерном пространстве и выбирает точку наблюдения для осмотра полученной композиции;
– вычисляет цвета для всех объектов. Цвета могут быть определены приложением, получены из расчета условий освещенности, вычислены при помощи текстур, наложенных на объекты или из любой комбинации этих факторов;
– преобразует математическое описание объектов и ассоциированной с ними цветовой информации в пиксели на экране. Этот процесс называется растеризацией (или растровой разверткой).
В течение всех этих этапов OpenGL может производить и другие операции, например, удаление частей объектов, скрытых другими объектами. В дополнение к этому, после того, как сцена растеризована, но до того, как она выводится на экран, вы можете производить некоторые операции с пиксельными данными, если это необходимо. [6]
Подмножество графического интерфейса OpenGL, разработанное специально для встраиваемых систем – мобильных телефонов, карманных компьютеров, игровых консолей, – получило название OpenGL ES (OpenGL for Embedded Systems – OpenGL для встраиваемых систем). OpenGL ES определяется и продвигается консорциумом Khronos Group, в который входят производители программного и аппаратного обеспечения, заинтересованные в открытом API для графики и мультимедиа. [8]
В операционной системе Android поддерживается несколько версий OpenGL ES API:
– OpenGL ES 1.0 и 1.1 – поддерживается в Android версии 1.0 и выше;















