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

XII Международная студенческая научная конференция Студенческий научный форум - 2020

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

Мунш О.Д. 1, Абрамова О.Ф. 1
1ВПИ (филиал) ВолгГТУ
 Комментарии
Текст работы размещён без изображений и формул.
Полная версия работы доступна во вкладке "Файлы работы" в формате PDF

Визуализация данных – это наглядное представление информации. Визуальная информация воспринимается гораздо лучше и быстрее, чем любые другие виды представления информации. Есть исследования, подтверждающие, что до 90% информации человек получает через зрение. Человек предрасположен воспринимать именно визуализированные данные. Поэтому люди используют графические объекты для презентации, анализа и обработки имеющихся данных. Существует множество различных способов создания графических объектов. Мы рассмотрим создание графических примитивов на ассемблере. Язык ассемблер — это низкоуровневый язык программирования. Создание примитивов графики берет начало именно в нем.

В качестве примера построим график некоторой функции. Для начала необходимо создать координатную ось, установив курсор в координаты (0,0). Воспользуемся функцией MoveToEx(), которая описывается следующим образом:
WINGDIAPI BOOL WINAPI MoveToEx(HDC, X1, Y1, LPPOINT);
где HDC — это контекст устройства, X1,Y1 — координаты точки, в которую устанавливается текущая графическая позиция, а четвертый аргумент — указатель на структуру типа POINT, в которую функция запишет координаты старой текущей позиции.

Чтобы прорисовать линии используется функция LineTo(), которая описывается следующим образом:
WINGDIAPI BOOL WINAPI LineTo(HDC, X1, Y1);
HDC — контекст устройства, X1, Y1 — координаты точек.
Вычисляя и передавая в данную команду результаты любой математической функции, мы сможет отобразить в консоли график этой функции.

Конечно, одними графиками функций возможности ассемблера не ограничиваются. Рассмотрим способы отрисовки других графических объектов. Для прорисовки прямоугольника с закругленными краями используется функция RoundRect(), где функция описывается следующим образом:
WINGDIAPI BOOL WINAPI RoundRect(HDC, X1, Y1, X2, Y2, b, a);
HDC — это контекст устройства, X1,Y1 — координаты верхнего левого угла, X2,Y2 – нижнего правого угла прямоугольника, a – содержат ширину, b – высоту эллипса, определяющего дуги.

Для прорисовки прямоугольника используется функция Rectangle(), где функция описывается следующим способом:
WINGDIAPI BOOL WINAPI Rectangle(HDC, X1, Y1, X2, Y2);
HDC — это контекст устройства, X1, Y1 – Верхний левый угол прямоугольника, X2, Y2 – Правый нижний угол прямоугольника. Для прорисовки эллипса необходимо вызвать функцию Ellipse(), где функция описывается следующим образом:
WINGDIAPI BOOL WINAPI Ellipse(HDC, X1, Y1, X2, Y2);
HDC — это контекст устройства. X1, Y1 – Верхний левый угол ограничивающего прямоугольника, X2, Y2 – Правый нижний угол ограничивающего прямоугольника.
Эллипс ограничен прямоугольником, поэтому через координаты этого прямоугольника и определяется прорисовываемый эллипс.

Все координаты X и Y имеют тип int.

Например:

invoke GetClientRect, hWnd, ADDR rc
invoke BeginPaint, hWnd, ADDR ps
mov hdc, eax ;Контекст устройства в памяти
invoke CreateCompatibleDC, hdc
mov hMemDC, eax ;Bitmap для рисования
invoke CreateCompatibleBitmap, hdc, rc.right, rc.bottom
mov hBmp, eax ;Присоединяем bitmap к DC
invoke SelectObject, hMemDC, hBmp
mov hOld, eax ;Заливка рабочей области окна
invoke FillRect, hMemDC, ADDR rc, 0 ;Рисуем фигуры
invoke SelectObject, hMemDC, DefPen
invoke SelectObject, hMemDC, YellowBrush
трапеция
invoke Polygon, hMemDC, ADDR polygon, 4
invoke SelectObject, hMemDC, AquaBrush
прямоугольник
invoke Rectangle, hMemDC, 175, 150, 475, 450
invoke SelectObject, hMemDC, RedBrush
invoke Rectangle, hMemDC, 315, 150, 615, 450
invoke SelectObject, hMemDC, GreenBrush
круг
invoke Ellipse, hMemDC, 315, 150, 615, 450

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

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

Вывод

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

Библиографические источники

Абрамова О.Ф. К вопросу о визуальном моделировании с использованием BOUML [Электронный ресурс] / О.Ф. Абрамова // NovaInfo.Ru : электрон. журнал. - 2016. - № 45, ч. 2. – Режим доступа : http://novainfo.ru/article/5873

Абрамова О.Ф. К вопросу о повышении эффективности функционирования тренажёрно-обучающих систем / О.Ф. Абрамова, М.Л. Цыганкова // Открытое и дистанционное образование. - 2014. - № 4. - C. 34-39.

Абрамова О.Ф. CASE-технологии: изучать или исключить? / О.Ф. Абрамова // Alma mater (Вестник высшей школы). - 2012. - № 9. - C. 109-110.

Абрамова О.Ф. Использование мультимедийных технологий в процессе обучения дисциплине "Компьютерная графика" / О.Ф. Абрамова, С.В. Белова // Успехи современного естествознания. - 2012. - № 3. - C. 90.

Волжанов А.А. Графический интерфейс как средство визуализации общения [Электронный ресурс] / А.А. Волжанов, О.Ф. Абрамова // Студенческий научный форум 2014 : докл. VI междунар. студ. электрон. науч. конф., 15 февр. – 31 марта 2014 г. Направл.: Технические науки / РАЕ. - М., 2014. - C. 1-4. – Режим доступа : http://www.scienceforum.ru/2014/pdf/6827.pdf.

Попиль М.А. Повышение качества статистического анализа поточных данных за счёт распознавания видеоизображений / М.А. Попиль, В.О. Александрова, О.Ф. Абрамова // Успехи современного естествознания. - 2012. - № 6. - C. 48.

Юрицын С.В. Обзор методов графической визуализации процесса моделирования информационных систем [Электронный ресурс] / С.В. Юрицын, О.Ф. Абрамова // Студенческий научный форум 2014 : докл. VI междунар. студ. электрон. науч. конф., 15 февр. – 31 марта 2014 г. Направл.: Технические науки / РАЕ. - М., 2014. - C. 1-5. – Режим доступа : http://www.scienceforum.ru/2014/pdf/7555.pdf.

Юрчук Д. Создание графических примитивов на Assembler [Электронный ресурс], режим доступа: https://habr.com/post/134495/, свободный

Орлов С. Вывод в графическом режиме на ассемблере [Электронный ресурс], режим доступа: https://revolution.allbest.ru/ programming/00330696_0.html свободный

Просмотров работы: 88