Программный продукт 'Графический редактор учебно-методических материалов'

  • Вид работы:
    Дипломная (ВКР)
  • Предмет:
    Информационное обеспечение, программирование
  • Язык:
    Русский
    ,
    Формат файла:
    MS Word
    583,01 kb
  • Опубликовано:
    2011-06-08
Вы можете узнать стоимость помощи в написании студенческой работы.
Помощь в написании работы, которую точно примут!

Программный продукт 'Графический редактор учебно-методических материалов'

Содержание

Введение

. Постановка задачи

.1 Общая постановка задачи

.2 Формальная постановка задачи

.3 Обзор аналогичных программных решений

.3.1 Растровые графические редакторы

.3.2 Векторные графические редакторы

.3.3 Выводы

. Обзор возможных методов решения поставленной задачи

.1 Виды графики

.1.1 Растровая графика

.1.2 Векторная графика

.1.3 Выбор: растровая или векторная графика

.2 Обзор основных графических форматов

.3 Вывод

. Описание программного решения

.1 Выбор инструментария и средств разработки

.2 Описание входной и выходной информации

.3 Разработка. Архитектура классов и модулей программного средства

.3.1 Иерархия и описание классов, реализующих графические примитивы

.3.1.1 Класс «Точка»

.3.1.2 Класс «Линия»

.3.1.3 Класс «Ломаная линия»

.3.1.4 Класс «Вектор»

.3.1.5 Класс «Безье»

.3.1.6 Класс «Окружность»

.3.1.7 Два множества

.3.1.8 Три множества

.3.2 Описание основных модулей программы

.3.2.1 Сохранение

.3.2.2 Преобразование форматов файлов

.3.2.3 Реализация механизма отмена/возврат

.3.2.4 Реализация сетки/привязка к сетке

.3.2.5 Вывод и построение графика

.3.2.6 Заливка примитивов

.3.2.7 Инструмент текст

.3.2.8 Автоматизация построения промежутков знакопостоянства

. Организационно - экономическое обоснование

. Безопасность жизнедеятельности

Заключение

Список литературы

Приложение А. Диаграмма последовательностей вызовов методов класса «Линия»

Приложение Б. Диаграмма последовательностей вызовов методов класса «Ломаная линия»

Приложение В. . Диаграмма последовательностей вызовов методов класса «Вектор»

Приложение Г. Синтаксис и примеры сохранения в файл *.vff

Приложение Д. Руководство пользователя

Введение


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

Специализированные программные продукты позволяют пользователю решать задачи, связанные с конкретной предметной областью. Создание графических иллюстраций по высшей математике выдвигает ряд требований к набору специализированных функций программного продукта, позволяющих работать с характерными для данной предметной области объектами: формулами, множествами и другими. При этом использование данных функциональных возможностей должно предоставлять средства автоматизации выполнения комплекса задач связанных с построением сложных объектов, например, диаграмм Эйлера-Венна или промежутков знакопостоянства функции.

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

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

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

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

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

1. Постановка задачи


1.1 Общая постановка задачи


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

Разрабатываемый программный продукт представляет собой графический редактор, и позволяет создавать графические иллюстрации на основе шаблонов:

-        график функции в декартовых системах координат,

-        промежутки знакопостоянства функции,

-        диаграммы Эйлера-Вена.

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

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

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

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

1.2 Формальная постановка задачи


Основанием для разработки программного продукта является постановка задачи на дипломное проектирование. Название разрабатываемого программного продукта «Графический редактор учебно-методических материалов»

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

а)     анализ и создание модуля распознавания вводимых математических выражений;

б)      создание модуля автоматизации построения графиков функций;

в)      создание интерфейса и модуля отображения графической информации;

г)       создание модуля загрузки и сохранения файлов;

д)      создание модуля для работы с графическими примитивами;

е)       создание модуля построения шаблонов файлов;

ж)      создание модуля автоматизации построения интервалов знакопостоянства функции;

з)       создание модуля автоматизации построения диаграмм Эйлера-Венна.

В процессе реализации некоторые из приведенных задач могут быть подвергнуты декомпозиции для выделения более мелких подзадач.

 

.3 Обзор аналогичных программных решений


В современном мире графические и математические пакеты считаются неотъемлемой частью мировой технологии, а, следовательно, и любого ПК. Самый примитивный графический редактор (Microsoft Paint) встроен в графическую оболочку Windows, а математический пакет (Excel) - в Office XP. Эти минимальные по требованиям к пользователю программные средства не достаточно пригодны для профессиональной работы, так как функционально ограничены. Поэтому появляется множество различных программ, у которых есть свои достоинства и недостатки.

Разрабатываемый программный продукт имеет возможности, как графических редакторов, так и возможность построения графиков функций заданных аналитически. Закономерно будет рассмотреть наиболее распространенные графические редакторы. На рынке представлены несколько основных типов программных продуктов ориентированных на редактирование растровой или векторной графики и программные средства, обладающие возможностями комбинирования как векторных, так и растровых иллюстраций. Рассмотрим некоторые и попытаемся объяснить неприменимость или основные трудности применения данных редакторов для решения задач связанных с созданием графических иллюстративных компонентов по высшей математике.

1.3.1 Растровые графические редакторы

Основными представителями растровых графических редакторов присутствуют такие широко известные пакеты как: Microsoft Paint, Adobe Photoshop CS2, Adobe Photoshop Elements 4.0, Corel Photo Paint, Corel Paint Shop Pro X, Graphy 2.7, Gimp 2.2.13, BetterJPEG 1.3.5.0. Проведем сравнительный анализ данных графических редакторов (таблица 1) в соответствии с нашими требованиями к построению графических иллюстраций по высшей математике и сделаем выводы по каждому из них.

Таблица 1. Сравнительный анализ растровых графических редакторов

 Наименование   ПП  Критерии сравнения

MS Paint

Adobe Photoshop CS2

Adobe Photoshop Elements 4.0.

Corel Photo- Paint

Corel Paint Shop Pro X

Graphy 2.7.

Gimp 2.2.13.

Ценовой класс («-» низкий, «- +» средний, «+» высокий )

-

+

- +

+

+

-

-

Кроссплатформенность

-

+

-

-

-

-

+

Цветовые модели

RGB

CMYK, RGB

CMYK, RGB

RGB

RGB

RGB

CMYK, RGB

Мастер обучения

-

-

-

+

-

-

-

Использование шаблонов

-

+

+

+

+

-

+

Средства технического черчения

-

-

-

-

-

+

-

Растровые изображения импорт (bmp, jpeg)

+ +

+ +

+ +

+ -

+ +

- +

+ +

Растровые изображения экспорт (bmp, jpeg)

+ +

+ +

+ +

+ -

+ +

- +

+ +

Векторные изображения импорт/экспорт

- -

+ +

+ +

- -

- -

+ +

+ +

Привязка объектов к сетке

-

-

-

-

-

-

-

Построение изображений по аналитическому выражению

-

-

-

-

-

-

-


Перечисленные в таблице 1 свойства являются не всеми возможностями рассматриваемых программных продуктов. Выделены только те, что необходимы для построения графических иллюстраций в нашей предметной области. Можно сделать вывод, что ни один программный продукт не подходит для разработки иллюстраций по высшей математике:

а)       Microsoft Paint

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

б)      Adobe Photoshop CS2

Основным достоинством данного продукта для использования в рассматриваемой нами задаче является возможность импорта и экспорта изображений в различные форматы файлов. Но ценовая категория не позволяет использовать приложение большой группе пользователей.

в)      Adobe Photoshop Elements 4.0

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

г)       Corel Photo-Paint

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

д)      Corel Paint Shop Pro X

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

е)       Graphy 2.7

В целом, программный продукт предоставляет возможности создания графических примитивов, однако, как и MS Paint не предоставляет возможностей выделения одного объекта и редактирования его свойств после создания. Это делает его не применимым для исследуемой предметной области, так как поддержка редактирования должна осуществляться родным форматом файла, как с начала создания изображения, так и при последующем его редактировании при открытии файла.

ж)      Gimp 2.2.13

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

и)      BetterJPEG 1.7.0.0

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

1.3.2 Векторные графические редакторы

Разнообразие векторных графических редакторов достаточно велико. Рассмотрим основные наиболее распространенные программные средства. К ним относятся: Corel Draw, Adobe Illustrator, Micrografx Designer, Macromedia FreeHand, CADE Pro. Проведем сравнительный анализ данных графических редакторов (таблица 2) в соответствии с требованиями к построению графических иллюстраций по высшей математике и сделаем выводы по каждому.

Таблица 2. Сравнительный анализ векторных графических редакторов

 Наименование   ПП Критерии сравнения

Corel Draw 10

Adobe Illustrator CS

Micrografx Designer 7

Macromedia FreeHand 10

CADE Pro

Ценовой класс («-» низкий, «- +» средний, «+» высокий )

+

+

+

+

- +

Кроссплатформенность

-

+

-

-

-

Цветовые модели

CMYK,RGB

CMYK

CMYK, RGB

CMYK, RGB

RGB

Мастер обучения

-

-

-

-

-

Использование шаблонов

+

+

+

+

+

Средства технического черчения

-

-

-

-

+

Растровые изображения импорт (bmp, jpeg)

+ +

- -

+ +

+ +

- +

Растровые изображения экспорт (bmp, jpeg)

+ +

- -

+ +

+ +

- +

Векторные изображения импорт/экспорт

+ +

+ +

+ +

+ +

+ +

Привязка объектов к узлам сетки

+

+

+

+

-

Построение изображений по аналитическому выражению

-

-

-

-

-


Перечисленные в таблице 2 свойства являются не всеми возможностями рассматриваемых программных продуктов. Выделены только те, что необходимы для построения графических иллюстраций в нашей предметной области. Можно сделать вывод, что ни один программный продукт не подходит для разработки иллюстраций по высшей математике:

а)       Corel Draw 10

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

б)      Adobe Illustrator CS

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

в)      Micrografx Designer 7

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

г)       Macromedia FreeHand 10

Программный продукт применим для создания графических примитивов и применяемых к ним различных типов заливки. Однако для автоматизации создания и рисования иллюстраций по вводимому аналитическому выражению данный пакет не предназначен.

д)      CADE Pro

Пакет специализируется на создании блок-схем алгоритмов и не позволяет создавать различные иллюстраций. Ограниченность возможностей по созданию и заливке диаграмм Эйлера-Венна и автоматизации построения графиков функции делает программный продукт неприменимым для рассматриваемой области.

1.3.3 Выводы

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

Как отмечалось выше, ни один программный продукт не предоставляет возможностей для автоматического построения графиков функции или специализированных инструментов для их рисования. Также отсутствуют удобные шаблоны для построения диаграмм Эйлера-Венна, поэтому для их изображения требуется выполнять ряд шагов: создание окружностей и многоэтапные действия по заливке пересекающихся областей. Ещё одной трудоемкой задачей является задача построения промежутков знакопостоянства функции одной переменной. Для реализации в рамках использования средств, предоставляемых такими векторными графическими редакторами как Corel, потребуется необходимость создания нескольких кривых линий, примыкающих к оси, вычисление по формуле знаков в промежутках, рисование данных знаков прямыми линиями, и установка подписей к каждой из точек, являющихся корнями функции.

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

2. Обзор возможных методов решения поставленной задачи


2.1 Виды графики


Существует специальная область информатики, изучающая методы и средства создания и обработки изображений с помощью программно-аппаратных вычислительных комплексов, - компьютерная графика[27]. Она охватывает все виды и формы представления изображений, доступных для восприятия человеком либо на экране монитора, либо в виде копии на внешнем носителе (бумага, кинопленка, ткань и прочее).

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

2.1.1 Растровая графика

Растр, или растровый массив (bitmap), представляет совокупность битов, расположенных на сетчатом поле-канве. Бит может быть включен (единичное состояние) или выключен (нулевое состояние). Состояния битов можно использовать для представления черного или белого цветов, так что, соединив на канве несколько битов, можно создать изображение из черных и белых точек.

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

Рис. 2.1. Растровое изображение.

Основным элементом растрового изображения является пиксель (pixel) [28]. Под этим термином часто понимают несколько различных понятий: отдельный элемент растрового изображения; отдельная точка на экране монитора или отдельная точка на изображении, напечатанном принтером.

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

Другим недостатком растрового представления изображений является снижение качества изображений при масштабировании. При изменении размеров растрового изображения выполняется одно из следующих действий: одновременное изменение размеров всех пикселей (в большую или меньшую сторону) или добавление или убавление пикселей из рисунка для отражения производимых в нем изменений, называемых выборкой пикселей в изображении.

2.1.2 Векторная графика

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

Ключевым моментом векторной графики является то, что она использует комбинацию компьютерных команд и математических формул для объекта [33]. Это позволяет компьютерным устройствам вычислять и помещать в нужном месте реальные точки при рисовании этих объектов. Такая особенность векторной графики дает ей ряд преимуществ перед растровой графикой, но в тоже время является причиной ее недостатков. Векторную графику часто называют объектно-ориентированной графикой или чертежной графикой.

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

Рассмотрим подробнее способы представления различных объектов в векторной графике.

точка. Этот объект на плоскости представляется двумя числами (х, у), указывающими его положение относительно начала координат.

прямая линия. Соответствует уравнению «y=kx+b». Указав параметры «k» и «b», всегда можно отобразить бесконечную прямую линию в известной системе координат, то есть для задания прямой достаточно двух параметров.

отрезок прямой. Отличается тем, что требуется описание еще двух

параметров - например, координат «x1» и «х2» начала и конца отрезка.

кривая второго порядка. К этому классу кривых относятся параболы,

гиперболы, эллипсы, окружности, то есть все линии, уравнения которых содержат степени не выше второй. Кривая второго порядка не имеет точек перегиба. Прямые линии являются всего лишь частным случаем кривых второго порядка. Формула кривой второго порядка в общем виде может выглядеть, например, так:

x2+a1y2+a2xy+a3x+a4y+a5=0.                                                       (1)

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

кривая третьего порядка. Отличие этих кривых от кривых второго порядка состоит в возможном наличии точки перегиба (рис. 2.2, слева). Все кривые второго порядка, как и прямые, являются частными случаями кривых третьего порядка. В общем случае уравнение кривой третьего порядка можно записать так:

x3+a1y3+a2x2y+a3xy2+a4x2+a5y2+a6xy+a7x+a8y+a9=0.      (2)

Таким образом, кривая третьего порядка описывается девятью параметрами.

Рисунок 2.2. Кривая третьего порядка (слева) и кривая Безье (справа)

кривые Безье. Это особый, упрощенный вид кривых третьего порядка

(рис. 2.2., справа). Метод построения кривой Безье (Bezier) основан на использовании пары касательных, проведенных к отрезку линии в ее окончаниях. Отрезки кривых Безье описываются восемью параметрами, поэтому работать с ними удобнее. На форму линии влияет угол наклона

касательной и длина ее отрезка.

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

2.1.3 Выбор: растровая или векторная графика

Выбор растрового или векторного формата зависит от целей и задач работы с изображением. Если нужна фотографическая точность цветопередачи, то предпочтительнее растр. Логотипы, схемы, элементы оформления удобнее представлять в векторном формате.

В разрабатываемом программном продукте будем реализовывать поддержку обоих форматов. Дело в том, что создание иллюстраций предполагает их последующее редактирование и оформление в текстовый редактор. Тут и возникает главная проблема по выбору графического формата: текстовый редактор, например, такой как MS Word фирмы Microsoft поддерживает вставку только растровых иллюстраций; а студент-практикант (на кого и ориентирована разработка) может допустить при создании ошибку, исправить которую в изображении представленном в растровом формате будет достаточно сложно. Корректировка изображения может привести к созданию иллюстрации заново. Если для корректировки использовать изображение представленное не в растровом формате, а в векторном - то можно легко решить последнюю часть проблемы. Так как редактирование векторного изображения сводится к редактированию отдельных элементов - графических примитивов, что повысит эффективность формирования графических иллюстраций учебно-методических ресурсов по высшей математике.

Так же в создаваемом графическом редакторе предусмотрим использование комбинирования растровой и векторной графики. Комбинирование достигается за счет использования в рамках создаваемой иллюстрации, как элементов изображения, представляющего собой растр, так и векторных объектов, состоящих из набора опорных точек. Например, можно произвести редактирование растрового изображения с помощью применения векторных элементов, а также импортировать растровые изображения, используя их в качестве подложки для рисования векторных объектов. Это позволяет ускорить и упростить процесс создания и редактирования иллюстраций.

2.2 Обзор основных графических форматов


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

Растровый файл представляет собой прямоугольную матрицу (bitmap), разделенную на маленькие квадратики - пиксели (pixel - picture element). Чем больше пикселей в каждом квадратном дюйме на матрице, тем выше разрешение файла. Данная структура характерна для всех растровых форматов. Различаются они способностью нести какую-либо дополнительную информацию, количеством информации о цвете, которую можно определить для каждого пикселя, способом архивации и другими особенностями.

В соответствии с вышеуказанным разделением в компьютерной графике применяют, по меньшей мере, три десятка форматов файлов для хранения изображений. Но лишь часть из них стала стандартом и применяется в подавляющем большинстве программ. Как правило, растровые и векторные форматы имеют несовместимые файлы, хотя существуют форматы, позволяющие хранить данные разных классов. Многие приложения ориентированы на собственные “специфические” форматы, перенос их файлов в другие программы вынуждает использовать специальные фильтры или экспортировать изображения в “стандартный” формат.

Следовательно, при разработке нового графического редактора встает вопрос о выборе графического формата: использовать стандартные широко используемые (краткая информация о файлах приведена в таблице 3) или разрабатывать собственный формат.

Таблица 3.Форматы файлов

Название

Тип

Использование

Фирма

Расши-рение

BMP (Windows BitMap)

растровый

Хранение и отображение информации в среде Windows

Microsoft

bmp

GIF (Grafics Inter-change Format)

растровый

Передача данных в сети

Compuserve Inc.

gif

JPEG  (Joint Photographic Experts Group)

растровый

Для фотографической информации

Joint Photografic Experts Group

jpg

TIFF (Tagged Image File Format)

растровый

Хранения растровых изображе-ний высокого качества

Aldus Corp.

tif

PSD (PhotoShop Document)

растровый

Для фотографической инфор-мации

Eastman Kodak

pcd

SVG (Scalable Vector Graphics)

векторный

Описание двухмерной векторной графики (декларативной и скриптовой).

Рис. 3.1. Типы стрелок для вектора

Для подкласса BitMap-примитивы характерны свойства: тип, размер и цвет шрифта.

К скрытым свойствам классов относятся такие как координаты на экране (X и Y), наборы точек примитивов, имя объекта, выделение. Наличие таких свойств позволяет пользователю позиционировать и обращаться к выделенным примитивам, а также выделять примитивы в случае, когда они были предварительно скрыты пользователем, т.е. невидимы на рисунке.

Для удобства программирования и доступа к свойствам и методам определенного класса, реализующего тот или иной примитив, необходимо предусмотреть такой класс который позволит обращаться к свойствам любого из примитивов посредством единого набора методов. Данный класс позволит также объединить характерные для всех классов общие свойства, такие как видимость, цвет линии или текста, имя примитива, выделение. Класс будет являться родительским по отношении к каждому из классов реализующих примитивы, условно назовем данный класс «Примитив».

Кроме организации такого класса необходимо предусмотреть способ хранения набора примитивов. В качестве способов реализации можно воспользоваться либо массивом с типом класс «Примитив», либо динамической структурой типа стек или очередь.

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

К преимуществам использования стека относятся возможности хорошей структуризации набора записей, а также в каждый момент времени для хранения всех нарисованных примитивов используется только тот объем системной памяти, который необходим для их хранения. Однако такой поход связан с реализацией дополнительных функций, таких как организация структуры стека, функциями добавления, прохода по стеку (просмотра), удаления верхнего элемента. Также данный подход затрудняет обращение к тем элементам стека, которые находятся ниже верхнего, а, следовательно, затрудняется и алгоритм, реализующий изменение свойств примитивов.

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

Структурная диаграмма классов, реализующая в программном средстве набор примитивов, их свойства и методы приведены в Приложении Б.

Рассмотрим свойства и методы базового абстрактного класса «Примитив».

Открытые свойства.

_NamePrim - имя примитива, используется для доступа к некоторому примитиву, уникально для каждого примитива.

_selected - признак того, что примитив является выбранным или не выбранным.

_visible - признак того, что примитив видим или не видим на экране.

_fillcolor - цвет заполнения примитива.

Закрытые свойства.

_color , _size - цвет и толщина линии примитива.,G,B - цветовые составляющие цвета линии примитива., GFill, BFill - цветовые составляющие цвета заливки примитива.- признак того, что примитив является замкнутой фигурой.- тип линии примитива (сплошная, пунктирная, штрих пунктирная, точечная).

Открытые методы класса.

setColor(),getColor() - устанавливает и возвращает цвет линии примитива соответственно. В качестве параметра подается значение устанавливаемого цвета.

setSize(int sz) - установка толщины линии примитива. В качестве параметра данной функции передается значение устанавливаемой толщины.

getSize() - возвращает толщину линии выбранного примитива.

setFillColor() - устанавливает значение цвета заливки замкнутого примитива. В качестве параметра передается значение устанавливаемого цвета заливки.

GetR(), GetG(),GetB() - получение цветовых составляющих исходного цвета. В качестве параметров данные функции принимают целочисленное значение цвета, из которого производится выделение компонент красного,

зеленого и голубого цвета.

setName(),getName() -устанавливает и возвращает имя примитива.

setFinished() - устанавливает значение окончания добавления точек к примитиву.

setClosed(),getClosed() - устанавливает и возвращает значение признака указывающего на то, что примитив является замкнутой фигурой.(),getLineType() - устанавливает и возвращает значение типа начертания линии. В качестве параметра принимает целое значение, характеризующее тип начертания.

3.3.1 Иерархия и описание классов, реализующих графические примитивы


3.3.1.1 Класс «Точка»

Класс определяет основные методы работы с точкой. Основные атрибуты данного класса это координаты точки на экране «X» и «Y», и признак наведения мыши на точку. Кроме того, он наследует класс «Примитив», а, следовательно, все его свойства и методы.

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

Открытые свойства:

_X, _Y - позиция точки на экране по вертикали и горизонтали.

_mover - признак наведения мыши на точку, а точнее на область в

которой находится точка. Область характеризуется квадратом размерами 5x5 пикселей.

Открытые методы:

Draw() - метод рисования точки на экране. В качестве параметров принимает контекст устройства воспроизведения и контекст окна Open GL. Данный метод также реализует подсветку точки, на которую указывает курсор пользователя путем отрисовки прямоугольника, в центре которого и находится выбранная точка.

onMouseOver() - производит проверку: является ли текущая точка такой, на которую наведен курсор мыши. В качестве параметров принимает значения координат указателя мыши.

onMouseDown() - позволяет присвоить координаты указывающие позицию точки на экране. В качестве параметров принимает значения текущего положения курсора на экране.

onRemove() -метод призван организовать перемещение точки с целью изменения её позиции на экране.() - возвращает значение признака: выбрана или нет точка.() - присваивает значение признака того, что точка выбрана.() - пересчитывает координаты точки при изменении размера экрана отображения. В качестве параметров принимает предыдущие значения ширины и высоты и новые ширину и высоту экрана.

3.3.1.2 Класс «Линия»

Класс «Линия» - данный класс позволяет производить рисование и работу

с прямой линией. Линия задается как две точки: начальная и конечная, поэтому одним из его членов является объект класса точка и представляет собой массив из двух значений. Данный класс наследуется от класса «Примитив». Опишем основные свойства и методы класса «Линия».

Открытые свойства:[2] - массив значений типа, определенного классом «точка». Свойство необходимо для хранения информации о точках (начальной и конечной). Обращение к членам класса точка позволяет производить большинство функций необходимых при работе с опорными точками линии, например, таких как наведение на точку, её перемещение.- количество текущих заданных точек. Данный атрибут класса позволяет узнать завершено ли рисование линии. Рисование линии считается завершенным, если количество точек примитива становиться равным двум.

Закрытые свойства., oldMPY - атрибуты позволяют узнать, в какой позиции при наведении на объект «линия», находится мышь. Необходимость использования таких атрибутов состоит в том, что при их отсутствии позиция мыши перехватывается только в тот момент, когда объект выделяется. Таким образом, перемещение будет производиться относительно точки отловленной в данный момент, что приводит к некорректному перемещению примитива по экрану. Именно для избегания такого эффекта необходимо знать позицию курсора на экране в любой момент при условии выделенного объекта.

Открытые методы.

Так как программный продукт реализован на основе разбиения на классы, то виртуальные методы, наследуемые от класса «Примитив», и переопределенные в дочерних классах реализуют одинаковый функционал, с тем отличием, что применяется к характерным для заданного класса свойствам. Таким образом, описанное в классе «Точка» назначение одноименных методов в данном классе не будет рассматриваться, если изменения функциональности не значительны.() - возвращает количество точек заданных в текущий момент. Также данный метод используется для сохранения информации о линии в файл. Так как для сохранения линии функции сохранения необходимо получить информацию для сохранения точек.(int i), GetY(int i) - возвращает значение координаты i-ой точки по горизонтали и по вертикали на экране соответственно.() - позволяет узнать является ли примитив замкнутым. Данная функция возвращает в любой момент значение «ЛОЖЬ». Однако его определение необходимо, т.к. в противном случае класс будет не доопределен,() - производит отмену последней созданной точки. Реализация отмены может быть произведена в двух случаях: отмена второй созданной точки, отмена первой созданной точки. Причем второй вариант влечет за собой и уничтожение объекта «Линия».

Закрытые методы(), FindMin() - функции в качестве результатов возвращают максимальные и минимальные позиции точек линии на экране. Работа по поиску таких точек производится последовательным обходом всех точек (двух) линии, заданных свойством linePoints.(int n) - производит проверку выделения точек и позволяет блокировать множественный выбор точек, за счет того, что возвращает логическое значение. Если точек не выделено проверка приводит к перемещению линии, или другим операциям работы с линией. В случаях, когда одна из точек выбрана, данный метод не позволяет производить выделение других точек. Актуальность такой процедуры возникла при перемещении точек линии, так как в определенные моменты при перемещении одной из точек и наведении на другую производилось выделение последней и дальнейшее её перемещение с первой.() , offTypeLine() - методы вызываются методом Draw() и позволяют включить или отключить режим начертания линии (пунктир, штриховая и т.д.). Так как работы по подготовке к рисованию примитива не относятся непосредственно к отрисовке линии, то для облегчения понимания исходных кодов, данные методы были вынесены отдельно.() - вызывается методом onMouseDown() и производит работу по присвоению координат начальной и конечной точки линии. Выделение такого метода обусловлено необходимостью создания более наглядного кода, для дальнейшего сопровождения программы.

Для моделирования динамических аспектов работы класса в рамках языка UML применяются диаграммы последовательностей. Данные диаграммы позволяют более подробно увидеть процессы взаимодействия методов описанного класса. В Приложении Б «Диаграмма последовательностей вызовов методов класса «Линия»» составлена схема взаимодействия различных методов, начиная с отправки сообщений от программы к классу, и заканчивая взаимодействием отдельных методов и свойств, оказывающих влияние друг на друга.

3.3.1.3 Класс «Ломаная линия»

Класс позволяет нарисовать несколько отрезков. Причем для рисования первого отрезка необходимо задания двух точек, а для всех последующих - только одной. Основная функциональная возможность данного класса, в отличие от класса «Линия», заключается в том, что при работе с данным примитивом возможно рисование различных фигур состоящих из множества отрезков, например, рисования прямоугольников, ромбов и т.д. Также класс позволяет реализовать возможность рисования замкнутых фигур, состоящих из прямых отрезков, и в последующем применять к ним заливки различных цветов.

Наличие класса «Линия» и класса «Ломаная линия», столь похожих друг на друга, определяется, прежде всего, потребностью пользователя. Так как создание примитива «Линия» по сравнению с заданием примитива «Ломаная линия» требует меньшее количество операций мыши, задействует меньшее количество её кнопок, что несколько упрощает работу с примитивом «Линия».

Класс является наследником класса «Примитив», а, следовательно, кроме своих свойств и методов в нем доступны открытые свойства и методы класса «Примитив». Рассмотрим основные методы и свойства, кроме тех, что реализуют одинаковый функционал.

Открытые свойства.

PLPoints [1000] - массив элементов типа «Точка». Позволяет хранить информацию о точках, задающих ломаную линию. Максимальное количество точек в примитиве «Ломаная линия» ограничено 1000. Такое количество точек позволяет пользователю нарисовать окружность, переломы на которой будут не отличимыми для глаза.

Numpoints - свойство характеризует количество заданных точек. Задание примитива считается законченным, когда пользователь нажимает правую кнопку мыши или замыкает примитив. При этом в родительском классе «Примитив» устанавливается значение _closed и/или _finished.

Открытые методы.

Draw() - метод рисования ломаной линии на экране, как в момент задания линии пользователем, так и в процессе работы с другими примитивами при изменении содержания OpenGL сцены. В качестве параметров принимает контекст устройства воспроизведения и контекст окна Open GL. Данный метод также реализует подсветку линии, если в текущий момент времени пользователем выделен данный объект. Подсветка реализуется как задание прямоугольника, координаты которого определяются закрытыми методами FindMax() и FindMin(). При рисовании незаконченной фигуры производится отрисовка той части примитива, которая закончена, а после, добавляется сегмент, который пользователь в текущий момент перемещает для выбора точки. Данный метод вызывает и заливку заданной фигуры.

onMouseOver() - особенностью данного метода является тот факт, что массив точек задающих примитив по сравнению с классом линия расширен и может иметь большее количество точек, чем член класса linePoints. Метод класса «Ломаная линия» в качестве параметров принимает значения координат указателя мыши.() - является наследуемым от класса «Примитив» и позволяет узнать принадлежит ли точка, указываемая пользователем, примитиву. При этом если точка принадлежит примитиву, производится переприсвоение значения цвета заливки примитива. В противном случае изменение цвета заливки не будет применено и цвет останется прежним.

Закрытые методы.() - особенностью данного метода от метода, определенного в классе «Линия», является необходимость проверки номера точки, так как для задания первого отрезка ломаной линии необходимо задавать две точки, а каждый следующий отрезок требует ввода только одной точки. При этом храниться только необходимое количество точек для ломаной линии, т.е. N+1 точек, где N- число отрезков ломаной линии. Выделение такого метода обусловлено необходимостью создания более наглядного кода, для

дальнейшего сопровождения программы.

Для более подробного описания процессов взаимодействия членов данного класса в Приложении В приводится «Диаграмма последовательностей вызовов методов класса «Ломаная линия».

3.3.1.4 Класс «Вектор»

Класс «Вектор» - позволяет построить на основе ломаной линии совокупность векторов. Основными членами данного класса являются ломаная линия, и массив точек для рисования стрелки вектора. Данный класс является наследником класса «Примитив», а также в качестве своих членов использует классы «Ломаная линия» и «Точка». В целом для данного класса характерны большинство методов описанных ранее, однако некоторые из них имеют характерные для данного класса отличия. Рассмотрим более подробно свойства и метода данного класса.

Открытые свойства.

vector: Polyline - член класса является экземпляром класса «Ломаная линия». И позволяет не останавливаться подробно на создании и рисовании ломаной линии, лежащей в основе вектора. Отличие вектора от ломаной линии в том, что необходимо рисовать стрелки для указания направления вектора.

Arrow[4]: Point - временное хранилище точек для каждой стрелки вектора. Далее будет описана процедура заполнения точками данного массива, а также процедура отрисовки стрелки.

typeArrow: byte - хранит значение типа стрелки. В рамках проекта было реализовано два вида: в качестве двух линий и в качестве треугольника (см. рис. 3.2.).

Рисунок 3.2. Допустимые типы стрелок вектора.

Открытые методы

Draw() - позволяет нарисовать вектор на экране. В ходе рисования выполняется рад действий: установка параметров рисования (цвета и толщины); передача параметров выделения через член класса vector в класс «Ломаная линия»; отрисовка ломаной линии через член класса vector; цикл для рисования стрелки в конце каждого отрезка. В данном цикле выполняется пересчет значений массива Arrow, т.к. в зависимости от начальной и конечной точки изменяется позиция точек стрелки, приводя при этом к изменению наклона стрелки. Без этой процедуры корректная отрисовка точек стрелки не будет производиться. После вычисления значений точек стрелки производится её рисование в соответствии с установленным типом стрелки.

onMouseOver(), onMouseMove(), onMouseDown(), onRemove(), isPointInPoligon() - выполняют тот же набор действий что и одноименные методы других классов. Однако отличие данных методов состоит в более простом обработке, т.к. большинство методов вызывается членом vector класса «Вектор». Так, например, для перемещения вектора на экране необходимо изменить позицию заданной ломаной линии путем вызова функции onRemove() к открытому свойству vector;

recalcPoints() - позволяет изменить положение точек вектора на экране

при изменении размеров сцены. Особенностью данного метода также является необходимость вызова функции recalcPoints() класса «Ломаная линия» для члена класса vector;

changeTypeArrow() - метод принимает в качестве параметра целочисленное значение. Если целое значение равно 1, то свойству typeArrow присваивается значение константы GL_LINES, позволяющее рисовать стрелку в виде двух линий. В противном случае устанавливается значение константы GL_TRIANGLES из библиотеки OpenGL, позволяющее нарисовать стрелку вектора в виде треугольника;

getTypeArrow() - возвращает целочисленное значение 1 или 2, характеризующее установленный тип стрелки вектора. Данная информация в дальнейшем используется для сохранения параметров вектора в файл.

Закрытые методы. () - позволяет просчитать наклон стрелки и установить значения её точек в массив Arrow. Вычисление значений точек производится исходя из формул поворота и начального состояния стрелки. Данная функция учитывает и пограничные случаи, например, рисование стрелки в вертикальной (сверху вниз, снизу вверх) или горизонтальной позиции (слева направо, справа налево).

Формула поворота, используемая для вычисления значений точки, в случаях отличных от описанного выше, имеет вид:

,   (3)

где X,Y - новые координаты точки, Xc, Yc -центр вращения точки, X1, Y1 - старые координаты точки, j - угол поворота точки, который рассчитывается предварительно, используя координаты начала и конца отрезка вектора по формуле:

,        (4)

где i- номер точки конца вектора. Формула применяется для всех точек кроме первой.

Для более полного понимания процессов, происходящих при обращении основной программы к данному классу, построим диаграмму последовательностей вызовов функций характерных для данного класса (Приложение Г).

3.3.1.5 Класс «Безье»

Класс «Кривая Безье» - позволяет рисовать совокупность сплайнов третьего порядка. Задание первой кривой производится посредством ввода четырех точек: двух опорных и двух управляющих. Каждый последующий сплайн задается только тремя точками. Для задания возможности редактирования кривой Безье, опорные и управляющие точки заданы массивом, для подсчета количества заданных точек используется специальный член класса. Рассмотрим основные функции и свойства, определенные в данном классе.

Открытые свойства.[1000]:Point - массив экземпляров класса «Точка» позволяет хранить информацию о точках кривой третьего порядка. Отличительной особенностью данного массива от других классов состоит в том, что каждая вторая и четвертая точка является управляющей и позволяет изменять изгиб данного примитива;: int - позволяет сохранить количество точек линии третьего порядка. В общем случае количество точек кратно четырем.

Открытые методы.

Draw() - отличается от одноименного метода, описанного выше, тем, что для рисования каждой отдельной кривой Безье выделяются четыре точки. По данным точкам, используя стандартные функции создания сложных объектов, так называемых итераторов, производится вычисление промежуточных точек линии Безье. Полученные в результате вычисления точки сохраняются в специальном объекте «карта точек», являющимся массивом, определенным в библиотеке OpenGL. Используя стандартные процедуры графической библиотеки, можно произвести рисование сегментов кривой Безье, по полученным точкам используя функцию glEvalCoord1f. В качестве значений функция принимает значение элемента массива, в котором хранятся промежуточные точки.

Таким образом, последовательное обращение к четверкам точек можно произвести рисование всех линий Безье, из которых состоит кривая третьего порядка.

onMouseOver(), onMouseMove(), onMouseDown(), onRemove(), isPointInPoligon(), isSelected(), recalcPoints(), getNumPoint(), isClosedPrim(), GetX(int i), GetY(int i), UndoPoint() - выполняют тот же набор действий, что и одноименные методы других классов (кроме класса «Ломаная линия»). Особенностью метода isPointInPoligon является необходимость проверки попадания точки в полигон. Сложность данной процедуры состоит в том, что объект является достаточно сложным и невозможно узнать положение промежуточных точек, так как библиотека OpenGL не предоставляет средств доступа к данному массиву. По этой причине для реализации в дальнейшем заливки принято решение о том, что если пользователь нажимает кнопку мыши в области, характеризующей выделение, то заливка будет применяться, в противном случае заливка области не будет осуществляться. Как и для остальных примитивов, заливка области применима только для замкнутых фигур.

Закрытые методы.

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

соответствии с объявленными членами класса.

Особенностью закрытого метода setCoordPoint() состоит в том, что для задания первой части кривой третьего порядка необходимо задание четырех точек, а каждой последующей только трех. Кроме того метод позволяет переносить значения еще не заданных точек в соответствии с последней заданной. Так, например, если пользователь задал одну контрольную и одну управляющую точку и ищет позицию для задания второй контрольной точки, то значения курсора при перемещении изменяется, и данные значения устанавливаются в те точки, которые ещё не заданы. Такой подход позволяет рисовать линию третьего порядка достаточно наглядно, так как пользователь, перемещая указатель мыши, видит, к каким изменениям кривой приводят данные перемещения.

В целом данная характеристика характерна для создания любых объектов на основе точек и позволяет достигать большей производительности при использовании программного продукта в целом.

3.3.1.6 Класс «Окружность»

Класс предназначен для рисования окружностей различных радиусов. Пользователь при выборе инструмента «Окружность» должен задать пару точек: центр окружности и радиус. Центр окружности и её радиус вводится при помощи нажатия левой кнопки мыши. Данный инструмент позволяет создавать выколотые точки с различной заливкой, а также является общим классом, для описанных далее классов «Два множества» и «Три множества». Данный класс наследуется от класса «Примитив», что позволяет определить абстрактные методы и хранить экземпляры класса в одном массиве, наряду с другими классами описанными выше.

Рассмотрим основные свойства и методы данного класса.

Открытые свойства.: POINT - является постоянным и не может быть изменено только программно. Так как в библиотеке OpenGL не существует возможностей создания окружностей, то для её реализации необходимо просчитать точки расположенные на окружности, и соединить их используя ломаную линию. Данное свойство позволяет сохранить информацию о точках данной ломаной линии.

centerP: Point - хранит информацию о центре окружности, задается пользователем путем нажатия мыши в начале создания данного графического примитива.

pointR: Point - хранит информацию о точке которую пользователь

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

,      (5)

где Xc, Yc - координаты центра окружности, Xm, Ym - текущие координаты мыши.

Информации о данной точке, пользователю в дальнейшем позволяет изменить радиус окружности, при этом используются методы определенные в классе точка.

radius: real - хранит информацию о текущем радиусе окружности, необходим для сокращения вычислений при рисовании и вычисляется при изменении координат предыдущего члена.

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

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

Закрытые свойства.: int {frozen} - свойство позволяет установить значение количества точек располагаемых на окружности для её построения ломаными линиями. Данный член класса не изменяется и является постоянным числом, определяемым при создании экземпляра класса.

Открытые свойства.

onResize() - позволяет отработать событие изменения размера сцены, так как при её изменении изменяется как позиция центральной точки окружности, так и точки используемой для вычисления радиуса.

Draw() - позволяет нарисовать окружность, используя ряд след. шагов: проверка выделения объекта и при условии выделения рисование прямоугольника подсветки; установка цвета и толщины линии рисовании окружности; вычисление точек окружности и их рисование соединяя точки ломаной замкнутой линией с использованием константы OpenGL GL_LINE_LOOP. Вычисление точек окружности производится по формуле:

,          (6)

где Xc, Yc - центр окружности, numLines - значение одноименного свойства класса, i - номер точки для расчета.

getRegion() - позволяет создавать регион из точек окружности. Строится по промежуточным точкам, и позволяет при использовании в наследуемых классах производить заливку сложных регионов, путем выполнения пересечения данных регионов.

Закрытые методы.

setCoordPoint() - позволяет задать координаты центра или точки, характеризующей радиус окружности. Для определения характеристики: какая из точек задается в текущие момент - используется член класса numPoint.

3.3.1.7 Два множества

Класс «Два множества » предназначен для реализации функциональной возможности рисования диаграмм Эйлера-Венна. Суть данного класса состоит в том, что, используя базовый класс «Примитив», позволяющий хранить экземпляры данного класса, как и остальные примитивы, создать совокупность двух окружностей, изображающих два пресекающихся множества. Такое изображение двух окружностей позволит применять заливку к трем отдельным областям, и тем самым реализовывать различные логические операции над множествами: пересечение, объединение, разность и другие.

 

Рисунок 3.3. Изображение двух пересекающихся множеств при помощи окружностей.

Для реализации данного класса потребовалось задание новых свойств и некоторых методов, описанных далее.

Открытые свойства.

FCircle: Circle, SCircle: Circle - члены класса «Два множества» обеспечивают храние информации об окружностях, изображающих множества и являются экземплярами класса «Окружность».

SPoint: Point - предназначен для хранения информации о том, где располагается центр первой (левой) окружности. Данное свойство позволит в дальнейшем изменять местоположение примитива на экране, используя описанные выше процедуры.

Закрытые свойства.: real, oldMPY: real - назначение данных двух свойств аналогично назначению одноименных свойств других классов, описанных выше.: bool, fill2: bool,fill3: bool - при пересечении двух окружностей можно получить три отдельных сектора заливки: левый, центральный и правый. Свойства позволяют определить: была ли присвоена заливка каждой из заданных областей. В дальнейшем они применяются как для снятия, так и наложения цветовой однотонной заливки._B: HRGN - свойство описывает регион, позволяющий производить заливку крайней левой области, обозначенной на Рис. 3.3. цифрой 1, и реализующей логическую функцию _A: HRGN - свойство описывает регион, позволяющий производить заливку крайней правой области, обозначенной на Рис.3.3. цифрой 3, и реализующей логическую функцию ._AND_B: HRNG - свойство описывает регион, позволяющий производить заливку центральной области, обозначенной на Рис.3.3. цифрой 2, и реализующей логическую функцию .

Открытые методы.

В целом основные свойства, наследуемые от базового класса, используются для тех же целей, что и в других примитивах с некоторыми отличиями.() - метод позволяет рисовать множества и реализовать заливку, используя следующие этапы: вычисление регионов окружностей, составляющих экземпляр класса «Два множества»; рисование прямоугольника выделения для подсветки выделенного объекта; выбор цвета заливки каждой из областей; рисование областей с заливкой; рисование окружностей, составляющих множества.() - позволяет производить создание областей для заливки. При вычислении области заливки используются значения, получаемые в результате применения функции getRegion класса «Окружность» применяя данный метод к свойствам FCircle и SCircle класса «Два множества». Вычисление заливаемой области производится стандартной функцией WinAPI CombineRegion. Для вычисления логической функции используются различные параметры: порядок задания исходных регионов, результирующий регион и выполняемая логическая операция. Для выполнения операции вычитания одного множества из другого используется константа RGN_DIFF, а для вычисления пересечения - RGN_AND. После проверки попадания курсора в область, принадлежащую одному из вычисленных регионов и нажатии левой кнопки мыши производится установка свойств Fill1, fill2, fill3. В качестве результата функция возвращает основной программе логическое значение показывающее была или нет применена заливка.() - отличие метода от объявленных ранее объясняется тем, что перемещение возможно только для объекта в целом, изменение радиуса окружностей в данном случае заблокировано, так как оно может привести к некорректному пересечению окружностей или отсутствию пересечения.

3.3.1.8 Три множества

Класс «Три множества » предназначен для реализации функциональной возможности рисования диаграмм Эйлера-Венна на случай пересечения трех множеств. Используя базовый класс «Примитив», позволяющий хранить экземпляры данного класса, как и остальные примитивы, описываемый класса позволяет создать совокупность трех окружностей. Такое изображение окружностей позволит применять заливку к семи отдельным областям, показанных на рисунке 3.4.

Рисунок 3.4. Изображение трех пересекающихся множеств

Для реализации класса потребовалось задние новых свойств и некоторых методов, описанных ниже.

Открытые свойства.

FCircle: Circle, SCircle: Circle, TCircle - члены класса «Два множества» обеспечивают хранение информации об окружностях, изображающих множества и являются экземплярами класса «Окружность».

SPoint: Point - предназначен для хранения информации о том где располагается центр первой (левой) окружности, данное свойство позволит в дальнейшем изменять местоположение данного примитива на экране, используя описанные выше процедуры.

Закрытые свойства.: real, oldMPY: real - назначение данных двух свойств аналогично назначению одноименных свойств других классов, описанных выше.: bool, fill2: bool,fill3: bool, fill4: bool, fill5: bool, fill6: bool, fill7: bool - при пересечении трех окружностей можно получить семь отдельных секторов заливки, обозначенных на рис. 3.4. цифрами. Данные свойства позволяют, определить: была ли присвоена заливка каждой из заданных областей. В дальнейшем свойства применяются как для снятия, так и наложения цветовой однотонной заливки.

Таблица 5. Сектора заливки

Свойство

Формула региона заливки

№ области на рисунке 3.4.

AB_C: HRGN

4


AC_B: HRGN

6


BC_A: HRGN

5


B_AvC: HRGN

2


A_BvC: HRGN

1


C_AvB: HRGN

3


ABC: HRGN

7



Открытые методы.

В целом основные свойства, наследуемые от базового класса, используются для тех же целей, что и в других примитивах с некоторыми отличиями. Например, метод Draw() позволяет рисовать множества и реализовать заливку аналогично одноименному методу, описанному в классе «два множества», только уже для трех множеств; а метод onRemove() - при перемещении целой фигуры перемещает вместо двух окружностей - три.

Данный класс завершается описанием основных используемых классов в создаваемом проекте примитивов. Совокупность данных классов позволяет пользователям создавать и в дальнейшем редактировать созданные примитивы, в рамках одного запуска программы. В дальнейшем рассмотрим основные функции по сохранению и импортированию созданных с помощью программы изображений, а также рассмотрим методы автоматизации заполнения шаблонов связанных с построением графиков функций, промежутков знакопостоянства функции и диаграмм Эйлера-Венна, а также другие возможности построения изображений.

3.3.2 Описание основных модулей программы

Раздел посвящен основным модулям, реализованным в программе. Созданная структура классов позволяет пользователю только создавать примитивы и осуществлять механизмы работы с ними, описывает основные методы, используемые для хранения информации о параметрах примитива: цвете, толщине линии, цвете заливки, типе линии и другие. Рассмотрим другие возможности программы, которые сопровождают процесс создания и редактирования иллюстраций по высшей математике.

3.3.2.1 Сохранение

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

При сохранении в файлы присутствуют следующие возможности:

-        сохранение в собственный формат файла для последующего редактирования,

-       сохранение созданного изображения в растровый файл для последующей печати,

-       сохранение файла в векторные открытые форматы для последующего импорта в сторонние графические растровые редакторы.

Таким образом, программный продукт для сохранения используется следующие модули: сохранение в собственный формат vff (vector file format); сохранение в растровый формат; импорт в открытые векторные форматы. Рассмотрим данные функции подробнее.

Сохранение в формат *.vff.

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

Разработанный векторный формат предполагает задание для каждого из примитивов своего обозначения или тега, его свойств и наименование свойств характерных для данного тега. Таким образом, для сохранения информации о примитивах опишем XML подмножество. В таблице 6 приведен список возможных тегов.

Таблица 6. Список возможных тегов

Тег

Примитив/элемент изображения

<line></line>

линия

<polyline></polyline>

ломаная линия

<bezier></bezier>

кривая третьего порядка

<vector></vector>

вектор

<graphic></graphic>

график функции

<rpoint/>

стертая точка графика

<point/>

точка примитива

<circle/>

окружность

<twosets/>

два множества

<treesets/>

три множества

<text/>

надпись

Служебное слово point обозначает название тега, после которого следуют свойства, указывающие на позицию точки на экране («X» и «Y»). Значения свойств следуют после знака равно и взяты в одинарные кавычки. Для позиционирования точки на экране используются целочисленные значения пикселей, причем центр координат экрана располагается в его нижнем левом углу. Сохранение точки в данном формате рассмотрено в Приложении Д.

Сохранение линии предполагает использование пары тегов line. В открывающем теге указываются основные свойства сохраняемой линии, а закрывающий тег указывает на тот факт, что определение точек примитива было завершено. Необходимость использования закрывающего тега необходимо, так как заранее программа не знает информации о количестве заданных точек, а прямое указание количества точек в рамках открывающего тега нецелесообразно с той точки зрения, что обработка данного атрибута потребует создания дополнительных процедур для выявления и распознавания параметра указывающего на их количество. Основными свойствами данного тега являются: Name - уникальное имя линии; Size - толщина линии; Color - цвет линии; typeLine - тип начертания линии. Целочисленное значение от 1 до 3. При этом значение 1 указывает на рисование сплошной линии, значение 2 - на штриховую линию, а значение 3 - на создание штрих пунктирной линии.

Для сохранения информации о начальной и конечной точках линии используется тег point. Пример сохранения представлен в Приложении Д.

Для сохранения ломаной линии используется специализированный тег

polyline. Основные атрибуты данного тега соответствуют атрибутам тега line. Однако для сохранения информации о замкнутости линии и цвете заливки примитива используются следующие имена атрибутов:

fcolor - для обозначения цвета заливки. В качестве параметров принимает целочисленное значение от 0 до 4261543935. Для определения и задания собственного цвета при использовании текстового редактора можно воспользоваться следующей формулой:

,(7)

где R, G, B - цветовые составляющие модели RGB и характеризуют значения красного, зеленого и синего тонов в результирующем цвете.- для указания признака замкнутости фигуры. Значения характерные для данного атрибута представляют собой целочисленные значение ноль или единица. Значение единица указывает на то, что фигура является замкнутой.

Для сохранения информации о количестве и координатах заданных точек между открывающим и закрывающим тегом используется тег point. Код для создания ломаной линии представлен в Приложении Д.

Для сохранения векторов используется пара тегов vector. Закрывающий тег позволяет определиться с окончанием задания точек примитива, а к свойствам используемым для сохранения кроме описанных для ломаной линии добавлено свойство, указывающее на тип используемой для отображения стрелки. Данный атрибут носит название typearrow. Так как для отображения стрелок вектора в программном продукте присутствует два их возможных типа, то параметры, принимаемые данным тегом, являются целочисленными значениями 1 и 2. Для указания стрелки состоящей двух линий используется значение 2. Пример сохранения вектора представлен в Приложении Д.

Сохранение в векторный файл информации о кривой третьего порядка используется пара тегов <bezier>. Открывающий тег также содержит рад атрибутов характерных для всех примитивов и указывает на имя примитива, толщину линии, цвет линии, цвет заливки, замкнутость фигуры, тип линии. Как и в случае основных примитивов для сохранения информации о точках используется тег point.

Примером сохранения кривой третьего порядка может служить код, показывающий использование данного тега для сохранения информации о кривой третьего порядка, состоящей из 10 точек (рисунок 3.5.).

<bezier name='Безье 0' size='2' color='32896' fcolor='65280' closed='1' ='1' >   

<point X='104' Y='435'>

         <point X='204' Y='535'>

         <point X='344' Y='415'>

         <point X='204' Y='175'>

         <point X='104' Y='435'>

         <point X='24' Y='355'>

<\bezier>

Рисунок 3.5. Пример созданной кривой третьего порядка

Для сохранения информации о подписях добавленных на иллюстрацию используется одинарный тег text. Перечислим основные атрибуты данного тега.

Атрибуты тега текст: name - уникальное имя текста для дальнейшего обращения к его свойствам при использовании программы; size - размер текста в пикселях; color - цвет отображаемой надписи; caption - выводимый текст; X, Y - позиция в пикселях расположения текста на экране.

Пример сохранения надписи представлен в Приложении Д. Инструмент и класс, позволяющий производить работу с текстом, будет описан далее.

Следующим элементом необходимым для сохранения является элементы позволяющие редактировать информацию о графике функции. С целью сокращения размера файлов для сохранения информации о построенном графике будем использовать только информацию о формуле, участках, которые были стерты пользователем, а также информацию о цвете отображения графика функции. В общем случае для сохранения информации о построенном графике будем использовать пару тегов graphic. Синтаксис сохранения представлен в Приложении Д.

Для сохранения и редактирования информации о созданных при редактировании диаграммах Эйлера-Венна служат следующие теги:

-        Twosets - для сохранения информации о двух множествах,

-       Treesets - для сохранения информации о трех множествах.

Основанные атрибуты данных тегов характеризуют информацию о залитых областях с помощью имен атрибутов одноименных со свойствами данных классов, для сохранения информации о цвете заливки используется атрибут color.

 

.3.2.2 Преобразование форматов файлов

Создание возможностей по реализации сохранения в растровые форматы и возможностей сохранения и загрузки в векторные форматы файлов сторонних программ требует определения новых классов и процедур для выполнения для загрузки.

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

Однако так как OpenGL не позволяет производить непосредственного снятия копии созданного изображения, для дальнейшего сохранения, потребуется написание одного из классов позволяющих производить сохранение в файл типа *.bmp. Данный растровый формат был рассмотрен нами ранее. Информация хранится в файле данного типа в бинарном виде, при этом присутствуют служебные поля, характеризующие тип файла, размер изображения по вертикали и горизонтали, и другие, а также информация о каждом пикселе изображения. С точки зрения реализации наиболее простым растровым форматом данного файла является bmp изображение с использованием 24-битного значения для сохранения информации о каждом пикселе.

Для реализации возможностей работы с растровыми изображениями и сохранения информации в файл *.bmp были разработаны следующие классы.

Класс RGBpixel.

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

Рассмотрим основные свойства и методы данного класса.

Открытые свойства.

R,G,B - позволяют указать и хранить значения каждого из оттенков исходного цвета пикселя.

Открытые методы.setColor(int Color) - позволяет установить цвет пикселя, в качестве параметра принимает целочисленное значение цвета.

void setColor(uint R, uint G, uint B) - является перегруженным по параметрам методом и позволяет устанавливать цвет пикселя на основании составляющих компонент цвета.

int getColor() - возвращает значение текущего цвета пикселя.

uint getR(), uint getG(), uint getB() - позволят узнать красную, зеленую и синюю составляющие основного цвета соответственно.

Класс clBitMap.

Класс предоставляет методы и свойства для реализации возможностей по сохранению и загрузке растровых изображений формата *.bmp для дальнейшего использования в качестве подложки рисования. Также данный метод позволяет производить выделение загруженных изображений и перемещать их по экрану редактирования. Рассмотрим свойства класса.

Открытые свойства

int nRow, nCol - размеры пиксельной карты, т.е количество элементов массива для хранения пикселей.

RGBpixel *pixels - массив. Используется для хранения пикселей и представляет собой элемент класса RGBpixel.

int x,y,z - позиция загруженного изображения на экране.

bool mOver - признак выделения пиксельной карты.

Закрытые свойтва:oldMPX,oldMPY - хранят информацию о позиции курсора на экране при условии выделения пиксельной карты.

К основным методам данного класса относятся как закрытые методы,

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

Открытые методы.и clBitMap(int cols, int rows) - конструкторы класса,

позволяющие создавать экземпляр данного класса. Первый конструктор подразумевает создание экземпляра класса с параметрами по умолчанию, а второй - позволяет сразу задать размер пиксельной карты, за счет передачи параметров cols и rows.

setPixel(int X, int Y, int Color) - позволяет задать точку на экране в определенной позиции и с определенным цветом.

getPixel(int X, int Y) - метод позволяет получить значении цвета пикселя находящегося в позиции указываемой передаваемыми параметрами X и Y.

DrawBitMapAtPos(HDC hdc, HGLRC hglrc) - предназначен для рисования пиксельной карты в позиции экрана определяемой свойствами x,y,z.

ReadBitMapInMem(HDC hdc, HGLRC hglrc,int X, int Y, int Width, int Height) -позволяет считать область экрана прямоугольную в пиксельную карту.

LoadBitMap(AnsiString fname) - производит загрузку *.bmp файла в пиксельную карту.

SaveBitMap(AnsiString fname) - производит сохранение пиксельной карты в bmp файл.

MouseOver(int X, int Y) - метод позволяет производить выделение пиксельной карты, для её дальнейшего перемещения.

Drag(int X, int Y) - отображает пиксельную карту в поле редактирования.

Закрытые методы.

getShort(),getLong() - используются для загрузки информации о значениях служебных полей из файла bmp. Методы позволяют получить из файла набор байт и представить его в виде целочисленного 16-битного и 32-битного значения соответственно.

writeShort(ushort val), writeLong(ulong val) - методы позволяют сохранить 16-битное и 32-битное соответственно беззнаковое целое число в виде последовательности байт от старшего к младшему. Используется для сохранения служебной информации bmp файла.

Таким образом, данный класс позволяет производить «снимок» экрана OpenGL и сохранять его в файл соответствующий формату bmp. Для реализации сохранения полученного рисунка в другие растровые форматы можно воспользоваться следующей последовательностью шагов:

а)       осуществление сохранения в файл bmp,

б)      загрузка файла в специализированные структуры или классы открытых библиотек предназначенных для конвертирования файлов,

в)      Сохранение рисунка в требуемый формат,

г)       Удаление созданного временного файла bmp.

3.3.2.3 Реализация механизма отмена/возврат

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

В данном проекте реализована полная поддержка механизма отмена/возврат для созданных примитивов, при использовании операции «отмена» примитив удаляется с экрана и не рисуется, а при выполнении операции «возврат» последний удаленный примитив должен снова быть отображен на редактируемой иллюстрации. Дополнительно возможностью реализован механизм отмены последней созданной точки незавершенного примитива. Рассмотрим эти возможности более подробно.

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

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

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

Для избегания ситуаций выполнения действия «Возврат» в случаях, когда массив отмененных примитивов пуст кнопка, предназначенная для выполнения данного действия, блокируется.

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

Для реализации полного механизма «отмена/возврат» при удалении точек необходимо сохранять отмененные точки в некоторый массив. Однако организация такого массива нецелесообразна с той точки зрения, что вызывает дополнительное использование оперативной памяти. При этом эффективность метода возврата точки вызывает сомнения с точки зрения его использования, так как пользователю гораздо проще выполнить указание новой точки для примитива, используя только мышь, чем нажать комбинацию клавиш на клавиатуре.

3.3.2.4 Реализация сетки/привязка к сетке

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

Реализация привязки к сетке осуществляется за счет использования специализированного класса clGrid. Рассмотрим основные свойства и методы данного класса.

Открытые свойства.visible - позволяет применить функцию отображения скрытия сетки. При скрытой сетке привязка к узлам при рисовании не осуществляется.

Закрытые свойства.

short int R,G,B - цветовые составляющие используемого для отображения сетки цвета.

int step - шаг сетки. Задается в пикселях каждый узел сетки расположен от другого на количество пикселей которое характеризуется данным свойством.

int color - используется для определения цветовых составляющих.

int height, int width - свойство позволяет внутри класса определить значение высоты и ширины сцены OpenGL соответственно.CAxesX, int CAxesY - позволяет хранить центр экрана по горизонтали и вертикали соответственно. В данном случае под центром экрана подразумевается цент заданной декартовой системы координат.

Открытые методы.

void setStep(int st) - позволяет установить шаг сетки за счет использования передаваемого в процедуру параметра st.

int getStep() - возвращает целочисленное значение шага сетки.

void setColor(int clr) - реализует алгоритм присвоения цвета используемого при рисовании сетки на экране.

int getColor() - получаем используемый для отображения цвет сетки.

void Resize(int W, int H, int CX, int CY) - метод позволяет произвести пересчет шага сетки и её линий при изменении размера OpenGL окна.

void Draw(float zoom, HDC hdc, HGLRC hglrc) - осуществляет рисование

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

Закрытые методы.

short int GetR(), GetG(), GetB() - методы предназначены для вычисления цветовых составляющих из общего цвета, хранящегося в члене класса color.

Данный класс позволяет задать и хранить информацию о шаге сетке и производить её рисование в соответствии с заданными параметрами. Однако он не позволяет передавать параметры в экземпляры классов используемых для создания и рисования примитивов. Данные действия могут осуществляться окном, в котором производится рисование с использованием некоторых свойств и методов данного класса.

Таким образом, для осуществления привязки к сетке используется процедура позиционирования координат курсора за счет использования следующих формул преобразования:

 (8)

где Xn,Yn - новые координаты точки соответствующие узлу сетки; CAxesX, CAxesY - центр заданной декартовой системы координат; zoom - коэффициент увеличения/уменьшения масштаба; GridStep - шаг сетки; mod -выполнение целочисленного деления (деления без остатка).

Новые координаты, полученные путем такого преобразования, подаются в экземпляр примитива в качестве параметров функции onMouseDown, onMouseMove и onRemove.

3.3.2.5 Вывод и построение графика

Автоматизации построения графика функции позволяет пользователю, используя функции, операции, переменные и константы осуществлять ввод функций одной переменной . Для задания функциональной зависимости могут быть использованы переменные и операции, приведенные в таблице 7.

Таблица 7.Список функций и операций

Операция/ функция

Назначение

+

Бинарная операция «сложение»

-

Бинарная операция «вычитание»

*

Бинарная операция «умножение»

/

Бинарная операция «деление»

^

Бинарная операция «возведение в степень»

sin

Тригонометрическая функция «синус»

cos

Тригонометрическая функция «косинус»

tg

Тригонометрическая функция «тангенс»

asin

Обратная тригонометрическая функция «синус»

acos

Обратная тригонометрическая функция «косинус»

atan

Обратная тригонометрическая функция «тангенс»

ln

Логарифмическая функция «натуральный логарифм»


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

При вычислении значений точек графика по вводимому выражению функции одной переменной строится бинарное дерево, позволяющее используя процедуру рекурсивного обхода вычислить значение функции при заданном аргументе. Бинарное дерево представляет собой совокупность вершин и связей между ними. При этом вершины дерева хранят информацию об операциях, функция, переменной «x» и различных констант. Для построения такого бинарного дерева можно использовать сторонние открытые библиотеки CxImage, ImageStone. При этом на вход функций данных модулей подается значение строки содержащей формулу, а на выходе получаем бинарное дерево, полученное в ходе лексико-грамматического анализа и процедур построения бинарных деревьев.

Вычисление значения в каждой точке графика производится исходя из значения аргумента функции, следовательно, для получения всех значений функции на заданном пользователем интервале необходимо произвести последовательное вычисление в циклической структуре значений введенной функции, от постепенно наращиваемого аргумента. В качестве начального значения аргумента принимается значение минимума аргумента функции заданного пользователем. Однако при рисовании функций необходимо учитывать, что их точки, принимающие небольшие значения будут невидны на иллюстрации. По этой причине необходимо осуществлять преобразование, как подаваемого аргумента, так и вычисленного значения функции к значениям пикселей экрана. А, следовательно, задача сводится к построению графика функции одной переменной по пикселям экрана. Решение данной проблемы состоит в использовании следующих функций преобразования значений функции из одной системы координат в другую:

,       (9)

где X, Y - координаты точки графика функции в системе экранной системе координат, CX, CY - координаты центра экранной системы координат, X1, Y1 - координаты точки графика в исходной системе координат заданной пользователем, deltaX, deltaY - коэффициенты сжатия/растяжения исходной системы координат.

Коэффициенты сжатия/растяжения вычисляются по следующим формулам:

,         (10)

где Xmax, Xmin - максимальное и минимальное значения интервала рассмотрения функции; Ymax, Ymin - максимальное и минимальное значение интервала отрисовки по оси ординат; W, H - ширина и высота экрана соответственно.

Для хранения полученных точек используется специализированный динамический массив длинной равной значению количества пикселей OpenGL сцены, в который помещаются, по мере вычисления, значения преобразованных координат. Если в ходе вычисления значения функции происходит переполнение, например при делении на ноль, то в качестве значения функции и её аргумента ставиться точка со значениями (-100000, -100000). Такая точка при рисовании не будет учитываться.

Процедура рисования состоит из цикла, позволяющего пройти по всем значениям вычисленных ранее точек. Рисование только точки не позволяет добиться непрерывной функции, что связано с неточностью округления значений, поэтому для рисования используется константа OpenGL с именем GL_LINES, при этом на каждом этапе строится прямая соединяющая две соседние точки массива. Такой подход позволяет создавать видимость непрерывного графика функции.

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


На данной блок схеме в начале вычисления производится инициализация переменных используемых в дальнейшем при вычислении, так устанавливается начальное значение curX, хранящее значение текущего для вычисления аргумента, а также вычисляются ранее описанные переменные CX, CY, deltaX, deltaY. Следующим этапом является организация цикла по всем элементами массива, количество значений в котором характеризуется ранее описанной переменной W. В цикле для вычисления значения функции fvalue используется специальная процедура, в которую подается вершина бинарного дерева, текущее значение аргумента curX и флаг, указывающий на возможные ошибки вычисления. Далее если значение флага после вычисление истина, значит, в ходе вычисления произошла ошибка переполнения, в противном случае процедура возвращает значение введенной функции от заданного аргумента. В случае отсутствия ошибки вычисления полученное значение функции и аргумента преобразовывается в экранные координаты и заносится в массив, в противном случае устанавливаются значения, указывающие на точку разрыва первого или второго рода. Следующий блок позволяет изменить значение текущего аргумента на шаг, и если не достигнуто вычисление массива, то процедура продолжает вычислять значения функции на интервале. В конце вычислительной процедуры получаем массив, заполненный значениями функции, при этом каждому значению функции соответствует некоторое значение аргумента. Данный массив подается в функцию рисования, где, проходя последовательно каждый его элемент, производится рисование полученных точек, соединенных линиями на экране.

3.3.2.6 Заливка примитивов

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

Суть метода состоит в следующем: экземпляр класса вызывает метод pointInPoligon, с указанием точки, которую выбрал пользователь для установки заливки. Процедура создает специализированный регион типа HRGN и при помощи стандартных средств проверяет, попадает ли данная точка в регион заданный точками многоугольника. В случае, когда точка принадлежит замкнутому региону, производится установка свойства fcolor, хранящего значение цвета для заполнения.

При вызове метода Draw для реализации заливки по точкам строится с помощью использования константы GL_POLYGON заданной в библиотеке OpenGL замкнутый многоугольник, с применением цвета заливки fcolor. Так как при отображении в сцене объекты могут перекрывать друг друга, то после построения залитого многоугольника необходимо построить замкнутую линию для отображения границы замкнутого многоугольника. Таким образом, основным методом в реализации заливки является метод проверки попадания точки в замкнутый регион.

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

Построение региона реализуется в цикле путем создания массива точек типа POINT библиотек Windows GDI. Реализация массива с данным типом необходима для использования процедуры CreatePolygonRgn, которая в качестве параметров принимает массив точек типа POINT, количество точек в массиве, а также константу для метода построения региона. В качестве результата данная функция возвращает либо созданный регион, либо значение NULL, указывающее на тот факт, что при построении региона завершено с ошибками или не может быть построено.

Следующим этапом является проверка попадания точки в построенный регион с помощью использования стандартной функции PtInRegion библиотеки Windows GDI. В качестве параметров в данную функцию подается предварительно созданный регион и координаты точки, а возвращается значение «ИСТИНА» или «ЛОЖЬ», указывающее на принадлежность точки региону.

В случае попадания точки в регион, заданный точками рисуемого многоугольника, исходная функция pointInPoligon возвращает в основную программу значение «ИСТИНА», а основная программа в свою очередь производит вызов процедуры установки цвета заполнения и выполняет перерисовку сцены.

3.3.2.7 Инструмент текст

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

В библиотеке OpenGL отсутствуют специализированные средства вывод текста. Однако есть возможность реализации вывода текста, путем создания растровых изображений для каждого символа алфавита (русского и английского). При этом текст побуквенно, как набор картинок.

Для реализации возможностей вывода, задания надписей, их цвета размера и шрифта был создан специальный класса «Текст». Данный класс является наследником класса «Примитив» что позволяет переопределять виртуальные метода класса «Примитив», а также позволяет хранить экземпляры класса «Текст» методами сходными с методами хранения примитивов.

Рассмотрим структуру созданного класса. В приложении Б изображены все свойства и методы данного класса. Рассмотрим основные члены класса и особенности реализации методов более подробно.

Закрытые свойства.text - строка, содержащая текст надписи.X,Y - позиция текста на экране.

AnsiString typeFont - название шрифта отображения.

int oldMPX, oldMPY - позиция текущего положения курсора при выделенном объекте.base - база отображения текста для реализации функций вывода средствами OpenGL.

Открытые методы.

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

setTextField(AnsiString txt) - позволяет из основной программы передать и установить свойство text,

getTextField() - метод позволяет считать свойство text и передать для дальнейшей работы в основную программу,

setTypeFont(AnsiString txt) - позволяет установить свойство typeFont для дальнейшего рисования надписи данным шрифтом,

getTypeFont() - позволяет вернуть значение свойства typeFont в основную программу,

getCoordText(int &x, int &y) - позволяет через использование метода onRemove или onMouseDown установить позицию отображения текста на экране.

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

3.3.2.8 Автоматизация построения промежутков знакопостоянства

Модуль призван обеспечить функциональные возможности автоматического построения промежутков знакопостоянства. Удобство использования данного функционала состоит в том, что пользователю для решения данной задачи необходимо выполнить только ввод функции одной переменной; далее программа производит самостоятельное нахождение точек пересечения функции с осью «оХ», выводит значения данных точек, рисует окружности на оси абсцисс, а также автоматически строит дуги интервалов и расставляет знаки характерные для данных интервалов. Таким образом, для решения поставленной задачи необходимо произвести определение знака на рассматриваемом интервале, использовать функции приближенного нахождения значения корня функции, а также реализовать возможность вывода дуг.

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

Для реализации нахождения корня функции используется метод хорд для локализации корня. Условием для начала работы метода хорд является условие смены знака на соседних точках общего интервала рассмотрения. Работа метода хорд выполняется последовательным приближением к значению корня по формуле:

,      (11)

где x1, x2 - интервал изоляции корня,  - значения функции на концах интервала изоляции.

Метод последовательного приближения позволяет сократить интервал изоляции за счет нахождения точки пересечения хорды с осью «Ox». Сокращение интервала производится путем сравнения значений функции получаемых на концах нового интервала изоляции. В случае, когда абсолютное значение функции левой точки интервала меньше абсолютного значения функции правой точки интервала, то производится сдвиг левой границы интервала изоляции, в противном случае - правой. Условием прекращения работы метода является малое отклонение значений функции, либо точное попадание в корень функции, либо ошибка вычисления значения в данной точке (точка разрыва). Блок-схема алгоритма работы данного метода представлена на рисунке 3.7.


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

4. Организационно - экономическое обоснование


Программный продукт предназначен для внедрения в учебный процесс Мурманского Государственного Технического Университета для студентов первого курса технической специальности 230105 «Программное обеспечение вычислительной техники и автоматизированных систем». Приложение рекомендуется при прохождении студентами производственно - технологической практики и не является коммерческим, т.е. не стоит задача получения прибыли, а ставится цель повышения качества отчетности.

Разработка задачи была инициирована заказчиком в лице кафедры высшей математики и программного обеспечения ЭВМ Мурманского Государственного Технического университета. Руководитель (аналитик) стоит во главе проекта. Он осуществляет постановку задачи, связь с заказчиком, а также распределяет время. Программист выполняет поставленные задачи, используя наиболее эффективные алгоритмы и вычислительные модели, вносит дополнения и корректировки в поставленные задачи.

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

-        этап работы над программным продуктом составил 6 месяцев;

-       этап введения программного продукта;

-       этап зрелости: полный переход к автоматизированной системе;

-       этап упадка: появление новых технологий и моральное устаревание программного продукта.

На рисунке 4.1. представлен календарный план разработки программного продукта.

1.                                                               Предпроектное исследование,

2.                                                               Техническое задание,

3.         Разработка и отладка программного продукта,

4.         Тестирование,

5.         Техническая отчетность,

6.         Сдача темы.

Произведем оценку стоимости программного продукта.

Основными источниками затрат при разработке данного программного комплекса являются капитальные предпроизводственные затраты (Таблица 8), которые в некоторых рамках могут быть учтены и минимизированы. Расчет осуществляется по статьям расходов. Данные по окладам работающего персонала и процентные составляющие (Таблица 9), используемые в этой части, были взяты исходя из рыночной конъюнктуры.

Таблица 8. Затраты на расходные материалы.

Наименование материала

расход,шт.

цена, руб./шт.

сумма, руб.

1

Аппаратное обеспечение

1

26 850

26 850

2

операционная система Windows XP SP2

1

3 780

3 780

3

среда разработки Builder C++ v.6.0.

1

10 653,8

10 653,8

4

Office 2003 Box For teache and Student

1

3 010

3 010

5

Internet, dialup

3

150

450

6

Прочее(бумага, диски, катриджи)

--

--

790

Итого

45 533,8

Таблица 9. Основная заработная плата разработчиков ПО.

наименование этапа

исполнитель

трудоемкость, чел. дн.

трудоемкость, чел. мес.

оклад, руб.

затраты

1

подготовительный

программист

15

0,723

3800

6 318,07

2

техническое задание

руководитель

8

0,386

5200

4 611,08

3

основной

программист

45

2,169

3800

18 954,21

4

тестирование

программист

15

0,723

3800

6 318,07

5

технический отчет

программист

23

1,108

3800

9 687,71

6

сдача темы

руководитель

8

0,386

5200

4 611,08



программист

8

0,386

3800

3 369,63

Итого

53 869,88


Дополнительная заработная плата разработчиков программного продукта составляет 20 % от основной заработной платы:

,2 ´ 53 869,88 = 10 773,98 руб.

Фонд заработной платы представляет собой сумму основной и дополнительной заработной платы:

869,88 + 10 773,98 = 64 643,86 руб.

Отчисления на единый социальный налог составляет 26 % от фонда оплаты труда. Тут же учтем еще и страхование от несчастных случаев    1%:

,27 ´ 64 643,86 = 17453,84 руб.

Организации, занимающиеся разработкой и внедрением программного обеспечения, имеют коэффициент накладных расходов, равным 1,2. Поэтому накладные расходы составляют 120 % от величины основной заработной платы:

,2 ´ 53 869,88= 64 643,86 руб.

Прочие расходы включают расходы на машинное время (порядка 4-ёх месяцев на разработку, отладку и тестирование программного продукта: 480 часов стоимостью 10 руб./час):

´ 10 = 4800 руб.

Таблица 10. Итоговые затраты.

наименование статей расхода

затраты, руб.

1

расходные материалы

45 533,80

2

основная заработная плата разработчиков

53 869,88

3

дополнительная заработная плата разработчиков

10 773,97

4

отчисления на единый соц. Налог, 26%

17 453,84

5

накладные расходы

64 643,86

6

прочие расходы

4 800,00

Итого

197 075,35


Рассчитаем предполагаемую прибыль.

Заработная плата преподавателя составляет 6 000 рублей в месяц. Соответственно, за семестр преподаватель заработает:

000 ´ 6 ´ 2,3 = 82 800 рублей.

Тогда экономическая эффективность и срок окупаемости разработанного программного продукта вычисляется следующим образом:

Эффективность =

        (12)

Таким образом, разработанный программный продукт позволит:

-   студенту сэкономить время и средства на создание иллюстраций во время прохождения производственной практики,

-       сэкономить время преподавателя на проверку и исправление ошибок в созданных студентами иллюстрациях,

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

5. Безопасность жизнедеятельности


В соответствии с ГОСТ 12.0.003-74 вредными и опасными для здоровья факторами при использовании ПЭВМ являются: повышенная или пониженная температура воздуха рабочей зоны; повышенные уровни шума, повышенные уровни тепловых излучений, повышенные уровни электромагнитных излучений; недостаточная освещенность рабочих мест; повышенная яркость света.

К психофизиологическим опасным и вредным производственным факторам при использовании ПЭВМ относятся: физические перегрузки (положение и рабочая поза оператора); нервно-психические перегрузки (умственное перенапряжение, перенапряжение анализаторов слуха, зрения, монотонность труда).

В соответствии с СанПиН 2.2.2.542-96 «Гигиенические требования к видеодисплейным терминалам, персональным электронно-вычислительным машинам и организации работы» приведем основные гигиенические требования при установке и эксплуатации ВДТ и ПЭВМ.

Яркость свечения экрана - не менее 100 кд/м². Распределение яркости экрана видеотерминала к яркости окружающих его поверхностей не должно превышать в рабочей зоне 3:1. Частота регенерации изображения при работе с позитивным контрастом в режиме обработки текста - не менее 72 Гц. Экран должен иметь антибликовое покрытие. Размер экрана дисплея должен быть не менее 31 см по диагонали, а высота символов на экране - не менее 3.8 мм. Расстояние от глаз оператора до экрана дисплея должно быть в пределах 40-80 см. Уровень глаз при вертикально расположенном экране ВДТ должен приходиться на центр или 2/3 высоты экрана. Линия взора должна быть перпендикулярна к центру экрана и оптимальное ее отклонение от перпендикуляра не должно превышать ±10°.

Оптимальные параметры микроклимата для помещений в зависимости от категорий работ составляют: температура 21-25 °С, относительная влажность воздуха 40-60%, скорость движения воздуха 0,1-0,2 м/с.

Рабочий стол: его высота должна составлять 720 мм, оптимальные размеры рабочей поверхности столешницы - 1600х900 мм. Под столешницей рабочего стола должно быть свободное пространство для ног с размерами: по высоте - не менее 600 мм, по ширине - 500 мм. Рабочий стул: высота должна составлять 400-500 мм, ширина - не менее 400 мм, глубина - не менее 380 мм.

Освещенность на поверхности стола в зоне размещения рабочего документа должна быть 300-500 лк. При использовании местного освещения оно не должно создавать бликов на поверхности экрана и увеличивать освещенность экрана более 300 лк. Естественное освещение должно обеспечить коэффициент естественной освещенности (КЕО) не ниже 1,2 %.

Использование программного средства «Графический редактор учебно-методических материалов по высшей математике» соответствует группе В (творческая работа в режиме диалога с ЭВМ), т.е. длительность работы до 6-х часов, при 8-ой рабочей смене суммарное время регламентированных перерывов не менее 70 минут и не менее 120 минут при 12-часовой смене.

Продолжительность непрерывной работы с ВДТ без регламентированного перерыва не должна превышать 2 часов. Профессиональные пользователи ВДТ и ПЭВМ должны проходить обязательные предварительные и периодические медицинские осмотры не менее 1 раза в год.

 

Заключение


В рамках дипломной работы была выполнена разработка первой версии программного продукта «Графический редактор учебно-методических материалов» (GRUMM). Программный продукт позволит повысить эффективность создания графических иллюстраций по высшей математике за счет использования специализированного инструментария. Такой инструментарий избавит пользователя от необходимости одновременного использования математических и графических пакетов.

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

-        создание иллюстраций с использованием примитивов (точка, линия, вектор, ломанная, кривая Безье);

-       построение графика функции, заданной в аналитическом виде;

-       оперирование с объектами: перемещение, изменение формы, применение цветовой палитры;

-       осуществление масштабирования и перемещения по изображению;

-       cохранение и загрузка файлов в собственном формате (vff - vector file format);

-       импорт и экспорт файлов в общедоступные форматы bmp и jpeg;

-       построение диаграммы Эйлера-Венна;

-       автоматическое построение промежутков знакопостоянства по вводимому математическому выражению.

В процессе разработки можно выделить несколько основных этапов:

-        исследование,

-       проектирование,

-       разработка,

-       опытная эксплуатация,

-       внедрение.

На этапе исследования рассмотрены:

-     наиболее известные графические пакеты для создания иллюстраций;

-       основные графические форматы файлов для хранения графической информации.

А также проведен сравнительный анализ:

-     возможностей графических пакетов для создания иллюстраций по высшей математике;

-       видов графики и их возможностей;

-       форматов файлов для хранения различных видов графической информации (растровой и векторной).

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

В итоге исследования и анализа приняты следующие решения:

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

-       создание нового векторного формата и поддержка таких общедоступных форматов, как bmp и jpeg.

На этапе проектирования:

-     исследована постановка задачи и составлено техническое задание на разработку;

-       в соответствии с техническим заданием на разработку выделены основные функциональные возможности;

-       спроектирован интерфейс пользователя;

-       построена функциональная схема программного продукта;

-       спроектирована структура классов, их свойства и методы, необходимые для задания заявленного функционала;

-       определены основные методы работы пользователя с программным продуктом по вводу информации и определены основные виды выходной информации;

-       построены диаграммы последовательностей и методы обращения основной программы к классам.

-       спроектированы алгоритмы и структура сохранения в векторный формат файла;

-       созданы классы для сохранения в растровый формат файла;

-       смоделирована система реализации механизма «отмена/возврат»;

-       выделены механизмы работы с выделением объектов и их редактированием.

Этап разработки позволил:

-   осуществить выбор среды разработки;

-       уточнить структуру классов;

-       разработать интерфейс приложения;

-       реализовать основные механизмы работы с программным средством.

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

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

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

Разработанный программный продукт рекомендуется как программное средство для создания графических иллюстраций по высшей математике в рамках прохождения производственно- технологической практики (часть 1) на специальности 230105 «Программное обеспечение вычислительной техники и автоматизированных систем» МГТУ.

Список литературы


3. PC Magazine (Russian Edition) от 22.04.97, р.185. «Пакеты иллюстративной графики»

4. Базылев Геннадий Викторович. Adobe Photoshop CS. Самоучитель. - М.: Диалектика, 2005. - 608 стр., с ил.

5. Безопасность жизнедеятельности: Общие вопросы БЖД. БЖД в условиях производства и природные аспекты БЖД: Курс лекций / В.И. Дьяков; Иван. гос. энерг. ун-т. - Иваново, 2000. - 88 с.

6. Биндер К. Абсолютно ясно о Adobe Photoshop Elements. - М.: изд."Триумф", 2005. - 240с.

7. Бойер Питер. Использование Adobe Photoshop и Illustrator. Специальное издание. - М.: Вильямс, 2006. - 1312 стр., с ил.

Вереск Н. Рисуйте в CADE на web. <#"540556.files/image034.gif">

) Перемещение примитива «Линия»


3) Перемещение точки «Линии»

Приложение Б. Диаграмма последовательностей вызовов методов класса «Ломаная линия»


1)      Создание примитива «Ломаная линия»


2)      Перемещение примитива «Ломаная линия»


Приложение В. Диаграмма последовательностей вызовов методов класса «Вектор»


Приложение Г. Синтаксис и примеры сохранения в файл *.vff


. Сохранение точки в формате .vff

<point X='значение_по_горизонтали' Y='_значение_по_вертикали'>

2. Пример сохранения линии

<line name='Линия 0' size='2' color='0' typeline='1'>

                   <point X='104' Y='435'>

                   <point X='424' Y='475'>

<\line>

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

<polyline name='Ломаная 0' size='2' color='0' fcolor='16777215' closed='0' typeline='3'>

         <point X='104' Y='255'>

          … … … … … … … …

         <point X='144' Y='215'>

<\polyline>

. Пример сохранения вектора со сплошной линией, треугольным типом стрелки, и красным цветом, замкнутый и залитый синим цветом:

<vector name='Вектор 0' size='2' color='255' fcolor='16711680' closed='1' typeline='0' typearrow=’1’>

         <point X='104' Y='355'>

          … … … … … … … …

         <point X='104' Y='355'>

<\vector>

. Пример сохранения кривой третьего порядка, состоящей из 10 точек:

<bezier name='Безье 0' size='2' color='32896' fcolor='65280' closed='1' typeline='1' >

                   <point X='104' Y='435'>

                   <point X='204' Y='535'>

                    … … … … … … … …

                   <point X='104' Y='435'>

                   <point X='24' Y='355'>

<\bezier>

. Пример сохранения надписи:

<text name='Текст 0' size='11' color='0' caption='y=F(x)' X='144' Y='435'\>

7. Синтаксис сохранения информации о построенном графике:

<graphic formula='функция_одной_переменной' lowLim='минимум_оси_абцисс' upLim='максимум_оси_абсцисс' dX='шаг' upLimY='максимум_оси_ординат' lowLimY='мимнимум_оси_ординат'>

. Синтаксис сохранения информации о стертых точках (используется тег rpoint):

<rpoint i='номер_элемента_массива_точек_графика' />

. Пример сохранения графика функции с несколькими стертыми точками:

<graphic formula='y=(x+1)*(x-5)' lowLim='-10,0000' upLim='10,0000' dX='0,0100' upLimY='100,0000' lowLimY='-100,0000'>

                   <rpoint i='260' />

                    … … … … … … … …

                   <rpoint i='264' />

</graphic>

Приложение Д. Руководство пользователя

программный графический редактор математика

Программный продукт «Графический редактор учебно-методических материалов» представляет собой Win-ориентированное приложение.

Системные требования:

-       процессор Pentium III 1000 МГц (или выше);

-       оперативная память: 128 МB (рекомендуется 512);

-       дисковое пространство: 2 МB;

-       SVGA-монитор (1024x748);

-       мышь;

-       операционная система Microsoft Windows 98, ME, XP, 2000;

-       видео: 32 MB c поддержкой OpenGL;

-       установленные драйвера производителя видеокарты.

Дистрибутив программного продукта представлен исполняемым файлом grumm.exe. Исполняемый файл необходимо поместить в пользовательский директорий и запустить для начала работы с программным средством.

Программный продукт предоставляет возможность создания иллюстраций по следующим шаблонам:

-   график функции;

-       промежуток знакопостоянства функции;

-       построение диаграмм Эйлера-Венна.

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

Выбор шаблона.

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

Рисунок 1. Выбор шаблона иллюстрации.

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

 

Создание графиков функций

Для задания возможностей редактирования графиков функций предусмотрен специализированный интерфейс окна редактирования.

Главная панель предоставляет возможности по созданию нового файла (1), открытию файла (2), сохранению в файл (3) . На главной панели присутствует группа действий отмена (4) и возврат (5). За группой отмена/возврат следует группа кнопок переключателей, позволяющих отобразить или спрятать сетку рисования (6), а также возможность


Рисунок 2. №.Иллюстрация работы с  шаблоном «График функции» отображения/скрытия осей ординат (7).

Панель инструментов находящаяся слева от рабочей области (21) состоит из кнопок переключателей позволяющих выбрать инструмент рисования или манипуляции с элементами изображения. Панель инструментов в режиме редактирования шаблона «График функции» предоставляет возможности:

-       выделения объектов посредством использования инструмента «Выделение/перетаскивание» (10);

-       возможности стирания частей графика функции ластиком (11);

-       перемещение по рабочей области в режиме приближения (12),

-       создание линии по двум точкам (13);

-       рисование кривой третьего порядка (14);

-       создания ломаной линии (15) и вектора (16);

-       вывод подписей инструментом «Текст» (17);

задание заливки для выпуклых многоугольников и примитивов (18)

-        задание функции одной переменной при помощи инструмента «Функция» (19);

-       выбора цвета заливки замкнутого элемента изображения (20).

Работа выбранным инструментом осуществляется с помощью мыши. Установка точек примитива на рабочей области осуществляется левой кнопкой мыши, установка завершающей точки для незамкнутых фигур (без применения заливки) осуществляется правой кнопкой мыши. Рисование замкнутой фигуры осуществляется при наведении очередной задаваемой точки на позицию первой, при этом курсор мыши меняется указывая, что фигура будет завершена.

Процедура задания графика функции сопровождается вызовом окна «Ввод функции».

Рисунок 3. Использование окна «Ввод функции».

Поле ввода функции (1) предназначено для задания аналитического вида графика рисуемого в рабочей области. Значение по умолчанию позволяет ознакомиться с правилами ввода функции. Для задания функциональной зависимости могут быть использованы переменные и операции, приведенные в таблице 1.

Таблица 1. Список функций и операций

Операция /функция

Назначение

+

Бинарная операция «сложение»

-

Бинарная операция «вычитание»

*

Бинарная операция «умножение»

/

Бинарная операция «деление»

^

Бинарная операция «возведение в степень»

sin

Тригонометрическая функция «синус»

cos

Тригонометрическая функция «косинус»

tg

Тригонометрическая функция «тангенс»

asin

Обратная тригонометрическая функция «синус»

acos

Обратная тригонометрическая функция «косинус»

atan

Обратная тригонометрическая функция «тангенс»

ln

Логарифмическая функция «натуральный логарифм»


В качестве аргумента может использоваться только буква «x» латинского алфавита, а в качестве значения функции только переменная «y».

В качестве констант могут быть заданы, как целы числа, так и действительные без использования мантиссы. В качестве разделителя целой и дробной части допустимо использование знаков «.» или «,».

Для скрытия/отображения полученного графика используется элемент управления «галочка»: «Показать/спрятать» (2).

Следующий элемент формы позволяет установить интервал рассмотрения функции (5) и максимальное/минимальное значение функции (6), отображаемое на иллюстрации.

Применение параметров осуществляет кнопкой «Ок», отмена внесенных изменений - кнопкой «Отмена».

Изменение свойств примитивов

Созданные примитивы могут быть изменены двумя способами:

-     изменение свойств;

-       перемещение по экрану точек и всего примитива.

Изменение свойств предполагает изменение таких атрибутов примитива как толщина линии, тип начертания линии, цвет линии, размер шрифта и другие. Изменение свойств производится за счет использования панели свойств, расположенной в правой части экрана (рисунок 4).

Рисунок 4. «Панель свойств примитива»

Для выполнения работы по изменению свойств осуществляется следующим образом:

-   выделение примитива инструментом «Выделение/перетаскивание», выделение примитива посредством выбора в ниспадающем списке имени объекта (например «Ломаная 0»).

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

Для перемещения объекта или его точек необходимо выбрать инструмент «Выделение/перетаскивание», выделить требуемый объект мышью однократным нажатием левой кнопки мыши. Перетаскивание объекта производится наведением курсора на подсвеченную область нажатием левой кнопки мыши и перемещением курсора, не отпуская кнопки мыши. Перемещение точек при выделенной фигуре осуществляется за счет выполнения двух шагов:

-        выделение точки нажатием левой кнопки мыши при выбранном инструменте «Выделение/перетаскивание»;

-       перемещение точки при зажатой левой кнопке мыши.

Для выделения объектов может быть использована комбинация нажатой кнопки клавиатуры «Ctrl» и перемещения указателя по экрану. Перемещение при нажатой кнопке «Ctrl» осуществляется за счет зажатия левой кнопки мыши.

Создание промежутков знакопостоянства функции

При создании промежутков знакопостоянства функции из инструментов доступен только инструмент функция.

Ввод функции производится с использованием аналогичных операторов и функций представленных в таблице 1 «Список функций и операций». Для задания точных корней при неизвестной функции необходимо использовать следующий вид функции одной переменной.


Где x1, x2 … - корни функции одной переменной.

После нажатия кнопки «Ок» в окне, приведенном на рисунке 5, программа автоматически построит промежутки знакопостоянства.


Создание диаграмм Эйлера-Венна

При выборе шаблона создания диаграмм Эйлера-Венна пользователю предлагается набор инструментов с возможностью создания двух множеств (1), трех множеств (2) и инструмент заливка(4). Также реализация перемещения и выделения примитива присутствует инструмент «Выделение».


Рисунок 6 «Инструменты шаблона Диаграммы Эйлера-Венна.

Для задания одного множества пользователю необходимо выбрать инструмент и щелкнуть по рабочей области экрана. Заливка осуществляется путем выбора инструмента «Заливка» (4) и щелчком мыши на заливаемой области. К заливке можно применять различные цвета, за счет использования палитры цветов обозначенной на рисунке 6 (20).

Сохранение/загрузка файлов

Нарисованная иллюстрация может быть сохранена в файл. Для сохранения предлагается стандартное окно сохранения.


Пользователю необходимо выбрать тип сохраняемого файла:

-       vff - векторный формат с возможностью дальнейшего редактирования;

-       jpg - растровый формат jpeg, без возможности загрузки;

-       bmp - растровый формат bmp с возможностью загрузки в качестве подложки.

Указать имя файла, и нажать кнопку сохранить.

Для загрузки используется аналогичные принципы, с тем отличием, что для загрузки доступны только два типа файлов: vff и bmp.

Похожие работы на - Программный продукт 'Графический редактор учебно-методических материалов'

 

Не нашли материал для своей работы?
Поможем написать уникальную работу
Без плагиата!