Научная статья на тему 'Воспроизведение и интерактивное редактирование графа в проекте visual C#'

Воспроизведение и интерактивное редактирование графа в проекте visual C# Текст научной статьи по специальности «Экономика и бизнес»

CC BY
147
17
i Надоели баннеры? Вы всегда можете отключить рекламу.
Ключевые слова
РИСУНОК / FIGURE / ДВОЙНАЯ БУФЕРИЗАЦИЯ / DOUBLE BUFFERING / ГРАФ / GRAPH / СПИСОК СВЯЗНОСТИ / CONNECTIVITY LIST / КОМПАКТНОЕ ПРЕДСТАВЛЕНИЕ / COMPACT REPRESENTATION

Аннотация научной статьи по экономике и бизнесу, автор научной работы — Магомедов А.М.

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

i Надоели баннеры? Вы всегда можете отключить рекламу.

Похожие темы научных работ по экономике и бизнесу , автор научной работы — Магомедов А.М.

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

PLAYBACK AND INTERACTIVE EDIT OF THE CURVE IN VISUAL C # PROJECT

The article presents a compact format of the initial data for graph construction. The paper contains the analysis and interactive analysis of oriented and unoriented graphs, which allow achieving good polygraph quality of graphs figures, accompanying articles and textbooks on graph theory and is offered in the game form. The presented method includes visual change of the vertex coordinates in the figure with actual correction of changes and unlimited depth, scaling of the whole figure and its individual elements (keeping the protocol of changes in rtf-format). The results can be applied in the creation of polygraphic documents with graphs.

Текст научной работы на тему «Воспроизведение и интерактивное редактирование графа в проекте visual C#»

DOI: https://doi.org/10.23670/IRJ.2017.60.049 Магомедов А. М.

Доктор физико-математических наук, профессор, Дагестанский государственный университет ВОСПРОИЗВЕДЕНИЕ И ИНТЕРАКТИВНОЕ РЕДАКТИРОВАНИЕ ГРАФА В ПРОЕКТЕ VISUAL C#

Аннотация

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

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

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

Magomedov A.M.

PhD in Physics and Mathematics, Professor, Dagestan State University PLAYBACK AND INTERACTIVE EDIT OF THE CURVE IN VISUAL C # PROJECT

Abstract

The article presents a compact format of the initial data for graph construction. The paper contains the analysis and interactive analysis of oriented and unoriented graphs, which allow achieving good polygraph quality of graphs figures, accompanying articles and textbooks on graph theory and is offered in the game form. The presented method includes visual change of the vertex coordinates in the figure with actual correction of changes and unlimited depth, scaling of the whole figure and its individual elements (keeping the protocol of changes in rtf-format).

The results can be applied in the creation of polygraphic documents with graphs.

Keywords: figure, double buffering, graph, connectivity list, compact representation.

1. Введение

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

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

Работа выполнена при поддержке Отдела математики и информатики ДНЦ РАН

2. Компактная структура исходного файла

Для текстового файла с информацией о неориентированном графе G = (V,E),где V = { v0,..,,vn_- множество из п вершин, E - множество ребер, предлагается следующая структура: в i-й строке файла с n строками (i=0, 1, ..., n-1) располагается список тех вершин, смежных вершине vh номера которых больше i; если номера всех вершин, смежных вершине г^, меньше i, то i-я строка содержит единственный символ "-".

Текстовому файлу, приведенному на рис. 1 (слева), соответствует неориентированный граф из семи вершин (см. на рис. 1 справа). Очевидно, что последняя строка файла всегда содержит знак минуса.

1,2,3,4 2,4

5,6

5

6

Рис. 1 - Пример представления неориентированного графа

Признаком ориентированного графа является замена в последней строке файла знака "-" на знак "+"; при этом строка, состоящая из единственного знака "-", имеет смысл, аналогичный приведенному выше; элементами каждой i-й строки, отличной от "-" и "+", могут быть как положительные, так и отрицательные числа/, \]\ > ¿:/>0 - признак дуги /<0 - признак дуги /). Текстовому файлу, приведенному на рис. 2 (слева), соответствует ориентированный граф из семи вершин (см. на рис. 2 справа).

1,2,-3,4 2,-4

5,6

5

6 +

Рис. 2 - Пример представления ориентированного графа

Не вдаваясь в подробное изложение вопросов распределения памяти, отметим, что объем требуемой памяти при описанном способе задания графа «приближенно» равен \Е\, тогда как, например, все описанные в [1, С. 203] способы потребуют (для неориентированных графов) «приближенно» 2\Е\ памяти.

Набор исходных файлов, используемых в нашем C#-проекте: 1) текстовый файл "name.txt" со структурой описанного выше типа; 2) файл "name.bmp" с растровым рисунком для изображения вершин; 3) необязательный файл "coo.txt", содержащий координаты вершин в последовательных строках. Если файл "coo.txt" существует, то координаты вершин загружаются из него, в противном случае координаты вершин графа генерируются автоматически, после чего вызывается функция (обозначим ее Dr) рисования графа.

Распространенной ошибкой при наборе чисел с разделительным знаком «запятая» является вставка избыточного знака пробела после запятой. Покажем, как средствами языка C# достигается устойчивость к ошибкам такого рода (предполагается, что строковый массив t, массив p с элементами класса Point и двумерный «зубчатый» целочисленный массив а, соответствующий описанной выше структуре входного текстового файла, уже объявлены ранее):

t = File.ReadAllLines("name.txt"); n = t.Length; p = new Point[n]; a = new int[n][];

for (int i = 0; i < n; i++) {

if ((t[i] == "-") || (t[i] == "+")) continue;

a[i] = t[i].Split(',').Select(q => q.Trim()).Select(int.Parse).ToArray();

}

Отметим здесь же, что на стадии инициализации рисунок из файла "name.bmp" вводится в объект b класса Bitmap, затем масштабируется (величина d, указанная ниже, может быть изменена интерактивным способом), его краям придается свойство прозрачности:

Bitmap b = new Bitmap("name.bmp"); b = new Bitmap(b, d, d); b .MakeTransparent(). 3. Редактирование рисунка графа

Как правило, следствием автоматической генерации координат вершин графаp[i] - объектов класса Point (i=0, ..., n-1) является рисунок, не вполне соответствующий целям автора. Поэтому в проекте необходимо предусмотреть визуальное перемещение вершин графа с помощью мышки:

1. В обработчике события

pictureBox1_MouseDown(object sender, MouseEventArgs e) вычисляется индекс I вершины, ближайшей к точке (e.X, e.Y) нажатия кнопки мыши и устанавливается флажок нажатия - некоторой глобальной логической переменной присваивается значение True (опускание флажка выполняется в обработчике события pictureBox1_MouseUp);

2. В обработчике события перемещения мыши:

pictureBox1_MouseMove(object sender, MouseEventArgs e) проверяется факт установки флажка нажатия и, если флажок установлен, точка p[I] воссоздается с текущими координатами курсора мыши: p[I] = new Point(e.X, e.Y), после чего вызывается функция Dr для прорисовки графа.

Отметим две коллизии, возникающие при этом. Если фрагменты рисунка выводятся непосредственно на «холст» видимого окна (в нашем случае - окна графического контейнера pictureBox1), то в промежутках между выводом этих фрагментов экран успевает обновиться, вследствие чего рисунок претерпевает искажения. Искажения такого рода в компьютерной терминологии называются артефактами. Для исключения появления артефактов рекомендуется использовать метод двойной буферизации [2, С. 264]. Для этих целей на стадии инициализации нашего проекта создается объект b0 класса Bitmap, размеры которого совпадают с размерами графического контейнера pictureBox1: Bitmap b0= new Bitmap (pictureBox1.Width, pictureBox1.Height);

затем создаются два «холста» - объекты класса Graphics - g0 и g1, соответствующие объектам b0 и pictureBox1: g0 = Graphics.FromImage(b0); g1 = pictureBox1.CreateGraphics().

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

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

В конце функции Dr, после завершения формирования рисунка графа на холсте g0 объекта b0, выполняется вывод b0 на холст g1 графического контейнера pictureBoxl. Как известно, здесь возможны два варианта: 1) вызов метода DrawImage:

g1.DrawImage(b0, 0,0)

холста g1 графического контейнера pictureBox1 или

2) присвоение b0 свойству Image этого контейнера: pictureBoxUmage = b0.

Мы рекомендуем второй вариант. Практика показывает неустойчивость вывода при первом варианте. Причины этой коллизии автору неизвестны.

Замечание. Специальные классы C#, предназначенные для реализации метода двойной буферизации, подробно рассмотрены в статье [3].

На рис. 3: слева - граф с вершинами, координаты которых сгенерированы программой (при отсутствии файла "coo.txt"), справа - граф, преобразованный пользователем в интерактивном режиме; сохранение преобразованных координат вершин с целью выбора их из файла при очередном запуске программы не представляет труда.

Рис. 3 - Пример визуальной перестройки графа

Замечание. Масштабирование рисунка в целом или отдельных его элементов - радиуса фигуры, изображающей вершину, толщину линий (ребер, дуг), надписей (с сохранением координат вершин) - достигается привязкой параметров этих элементов к свойству Value визуальной компоненты trackBar. На рис. 4 показан результат использования такой привязки.

Рис. 4 - Визуальные элементы графа, изображенного слева, масштабированы за исключением координат вершин

(результат см. справа)

4. Заключение

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

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

1. Новиков Ф.А. Дискретная математика для программистов. - СПб.: Питер, 2000. - 304 с.

2. Порев В.Н. Компьютерная графика. - СПб.: БХВ-Петербург, 2004. - 432 с.

3. Гуков Д. Детали реализации двойной буферизации в Windows Forms: [Электронный ресурс]. URL: https://habrahabr.ru/post/144294/ (дата обращения: 11.05.2017).

Список литературы на английском языке / References in English

1. Novikov F.A. Diskretnaja matematika dlja programmistov [Discrete mathematics for programmers]. - SPb.: Piter, 2000. - 304 P. [in Russian]

2. Porev V.N. Komp'juternaja grafika [Computer graphics]. - SPb.: BHV-Peterburg, 2004. - 432 P. [in Russian]

3. Gukov D. Detali realizacii dvojnoj buferizacii v Windows Forms [The implementation details of double buffering in Windows Forms]: [Electronic resource]. URL: https://habrahabr.ru/post/144294/ (accessed: 11.05.2017). [in Russian]

DOI: https://doi.org/10.23670/IRJ.2017.60.040 Макаров С.М.1, Горелик В.И.2

1ORCID: 0000-0002-1313-7810, Магистрант, 2ORCID: 0000-0003-4373-9406, Магистрант, Санкт-Петербургский государственный экономический университет ТЕНДЕНЦИИ РЫНКА СРЕДСТВ АНАЛИТИКИ И АНАЛИЗ ИСТОРИЧЕСКИХ ДАННЫХ

ПРЕДПРИЯТИЙ

Аннотация

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

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

Makarov S.M.1, Gorelik V.I.2

1ORCID: 0000-0002-1313-7810, Undergraduate Student, Saint-Petersburg State University of Economics, St. Petersburg

2ORCID: 0000-0003-4373-9406, Undergraduate Student, Saint-Petersburg State University of Economics, St. Petersburg TRENDS OF THE MARKET OF ANALYTICAL TOOLS AND ANALYSIS OF THE HISTORICAL DATA

OF ENTERPRISES

Abstract

The paper considers the main trends of the market of analytical tools (business Intelligence, prognostic and prescriptive analytics) and the degree of their current and future application in modern companies. An approximate database structure is proposed for storing information on accepted management decisions for the purposes of their subsequent analysis by means of prognostic or other types of analytics. The application of the analysis of historical data enables the identification of possible problems in the applied evaluation methods, correction of the systematic non-optimality of the management decisions and improvement of the process of supporting their adoption.

Keywords: data analysis, analytical tools, prognostic analytics, management decisions, decision support.

Управленческая деятельность состоит из постоянного принятия управленческих решений, которые, чтобы быть стабильно эффективными, должны поддерживаться анализом релевантных данных. Вне зависимости от уровня принятия решения или сферы деятельности можно сказать, что объём данных будет таким, что качественный их анализ будет невозможен без использования информационных технологий. Согласно докладу компании IDC [2], общий объём данных к 2025 году увеличится в 10 раз по сравнению с 2016 годом, а доля данных, которые были созданы предприятиями, к тому времени составит 60% против 30% в 2015 году. Таким образом, вперёд в конкурентной борьбе вырвутся компании, которые преуспеют в отборе релевантных данных и в их последующем анализе в рамках контекста их использования. В таких условиях использование различных видов анализа становится уже не преимуществом, а обязательным условием процветания. Развитые компании применяют аналитику систематически и становятся аналитическими конкурентами, описанными Томом Дэвенпортом и Джоном Харрисом в [1]. Данная особенность, как правило, обходит стороной малое инвестиционное предпринимательство (стартапы), гораздо чувствительнее касаясь больших корпораций со стабильно высоким предложением товаров или услуг на рынке.

Стоит отметить, что для средств аналитики характерно развитие, опережающее потребности рынка. Это подтверждается тем, что продвинутые методы аналитики используются всегда с некоторым запозданием: так, по данным Gartner [3], в настоящее время только 10% организаций используют средства предписывающей аналитики (prescriptive analytics), но эта доля увеличится до 35% процентов согласно прогнозу Gartner, а в 2012 году только 13% пользователей средств Business Intelligence (BI) активно использовали инструменты прогностической аналитики (predictive analytics - также в литературе встречаются варианты «прогнозная», «предиктивная» «предикативная»), рынок которых сейчас демонстрируют высокие темпы роста, как будет отмечено ниже.

Также тезис прошлого абзаца подтверждается замедлением роста рынка классических видов аналитики (наблюдается рост с точки зрения пользователей при наличии ценового давления): рынок BI и аналитики по прогнозу Gartner [4] в 2017 году составит 18,3 миллиардов долларов США в 2017 году (составлял 17 миллиардов долларов в 2016), а к 2020 году достигнет 22,8 миллиардов долларов.

Что касается упомянутых выше видов аналитики, то, согласно отчёту Research and Markets [5], рынок прогностической аналитики, составлявший в 2015 году 2,74 миллиарда долларов США, покажет среднегодовой темп роста 27,4% (с учётом сложного процента - CAGR) и составит 9,2 миллиардов долларов к 2020 году, а рынок

i Надоели баннеры? Вы всегда можете отключить рекламу.