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

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

Визуализация графиков функций с помощью низкоуровневого программирования

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

Введение:

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

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

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

Mov x,0 ; x=0 Mov y,0 ; y=0 MoveToEx(HDC,x,y,LPPOINT) ; передаём в функцию значение координат и указатель на структуру POINT,там храниться координаты прошлой точки.

Переместив курсор на центр, теперь мы должны создать две линии, это сделать с помощью функции LineTo()

Mov a,5 ; a=10 Sub x,5 ;x-5 x=-5 Mov b,0 ;b=0 invoke MoveToEx ,HDC,x,y,LPPOINT ; перемещение курсора в (-5,0) invoke LineTo, HDC,a , b ; провели линию от (-5,0) в (5,0) ось х готова invoke MoveToEx , HDC,y,x,LPPOINT, ; перемещаем курсор в (0,-5) invoke LineTo, HDC, b, a ; проводим линию из (0,-5) в (0,5)

Теперь у нас появилась координатная ось x,y. Теперь нам нужен график функции, но для этого нужна функция. Возьмём простую функцию прямой y=2x+3. Нужно написать программу, которая будет считать y.

proc ChetY: ; метка mov al,x ; al=x mov bl,2 ;bl=2 mul bl ;al*bl mov a,ax ;a=ax add a,3 ;a+3 mov y,a ;y=a ret ; конец функции подсчёта y

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

Mov cx,7 ; счетчик циклов равен 7, будем выводить график по 7 точкам Mov x,cx ; х=сх call ChetY ; вызов функции подсчета y invoke MoveToEx HDC, x,y,LPPOINT ; переносим курсор Vivod: ;метка mov x,cx ; каждый раз сх будет уменьшаться, х тоже будет уменьшатся call ChetY invoke LineTo HDC,x,y ; рисуем линию от курсору в данную точку loop Vivod ; циклический переход на метку Vivod и cx--

Таким образом мы получили функцию, которая способна выводить график функции y=2x+3. Данный код показывает, что даже на ассемблере это не занимает много строчек, но и для людей, ведущих статистику он не подходит, так как именно в этом алгоритме, мы можем менять только значения х, ведь если мы изменим что-то другое, то код придётся переписывать. Почему мы должны использовать именно ассемблер для выполнения этой работы, это можно заметить в долгосрочном периоде так как, построение на ассемблере будет проходить быстрее, чем написанное на высокоуровневых языках, если мы возьмём 100000 операций, то ассемблер справиться с этой работой быстрее. Программа будет занимать очень мало памяти, что является плюсом, ведь так её можно поместить в контроллер, который будет присоединён к прибору, который будет чертить график на бумаге. Конечно же, главный минус - это объёмность кода. На высокоуровневом языке, можно было бы потратить меньше времени на решение подобной задачи. Но, опять же, так как программы на ассемблере работают быстрее, то в долгосрочном периоде мы сэкономим много времени.

Заключение

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

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

Абрамова О.Ф. К вопросу о визуальном моделировании с использованием 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/, свободный (Дата обращения: 22.11.2018 г.)

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

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