Визуализация в научных исследованиях
Покупка
Основная коллекция
Тематика:
Программирование на C и C++
Издательство:
НИЦ ИНФРА-М
Год издания: 2021
Кол-во страниц: 400
Дополнительно
Вид издания:
Учебное пособие
Уровень образования:
ВО - Магистратура
ISBN: 978-5-16-015308-7
ISBN-онлайн: 978-5-16-109433-4
DOI:
10.12737/1029660
Артикул: 637288.01.01
К покупке доступен более свежий выпуск
Перейти
В учебном пособии рассмотрены методы графического представления результатов расчета физических и инженерных задач, представляемые специализированными программами и средствами операционных систем. Подробно исследуются графические возможности пакета MATLAB, который наряду с мощными расчетными средствами обладает прекрасной компьютерной графикой. Ряд задач визуализации решается методами программирования компьютерной графики на С++. Используются функции графического интерфейса GDI из набора системных функций API, которые предоставляет пользователю операционная система Windows. Все примеры на С++ апробированы в среде разработки проектов Visual Studio 2008. Рассматриваются вопросы взаимодействия пакета MATLAB и программ, написанных на С++ в среде Visual Studio.
Соответствует требованиям федеральных государственных образовательных стандартов высшего образования последнего поколения.
Для студентов, обучающихся по направлению подготовки «Программная инженерия».
Тематика:
ББК:
УДК:
ОКСО:
- ВО - Магистратура
- 09.04.04: Программная инженерия
- Аспирантура
- 09.06.01: Информатика и вычислительная техника
ГРНТИ:
Только для владельцев печатной версии книги: чтобы получить доступ к дополнительным материалам, пожалуйста, введите последнее слово на странице №157 Вашего печатного экземпляра.
Ввести кодовое слово
ошибка
-
Глава 4.pdf
-
Рисунки.pdf
-
1029660_Приложения.zip
Скопировать запись
Фрагмент текстового слоя документа размещен для индексирующих роботов
ВИЗУАЛИЗАЦИЯ В НАУЧНЫХ ИССЛЕДОВАНИЯХ В.И. КОРНЕЕВ Л.Г. ГАГАРИНА М.В. КОРНЕЕВА УЧЕБНОЕ ПОСОБИЕ Рекомендовано Межрегиональным учебно-методическим советом профессионального образования в качестве учебного пособия для студентов высших учебных заведений, обучающихся по направлению подготовки 09.04.04 «Программная инженерия» (квалификация (степень) «магистр») (протокол № 10 от 12.10.2020) Москва ИНФРА-М 2021
УДК 004.42(075.8) ББК 32.973-018я73 К67 Р е ц е н з е н т : Т.Ю. Крупкина, доктор технических наук, профессор, профессор кафедры интегральной электроники и микросистем Национального исследовательского университета «Московский институт электронной техники» ISBN 978-5-16-015308-7 (print) ISBN 978-5-16-109433-4 (online) Материалы, отмеченные знаком , доступны в электронно-библиотечной системе Znanium.com © Корнеев В.И., Гагарина Л.Г., Корнеева М.В., 2021 Корнеев В.И. К67 Визуализация в научных исследованиях : учебное пособие / В.И. Корнеев, Л.Г. Гагарина, М.В. Корнеева. — Москва : ИНФРА-М, 2021. — 400 с. + Доп. материалы [Электронный ресурс]. — (Высшее образование: Магистратура). — DOI 10.12737/1029660. ISBN 978-5-16-015308-7 (print) ISBN 978-5-16-109433-4 (online) В учебном пособии рассмотрены методы графического представления результатов расчета физических и инженерных задач, представляемые специализированными программами и средствами операционных си стем. Подробно исследуются графические возможности пакета MATLAB, который наряду с мощными расчетными средствами обладает прекрасной компьютерной графикой. Ряд задач визуализации решается методами программирования компьютерной графики на С++. Используются функции графического интерфейса GDI из набора системных функций API, которые предоставляет пользователю операционная система Windows. Все примеры на С++ апробированы в среде разработки проектов Visual Studio 2008. Рассматриваются вопросы взаимодействия пакета MATLAB и программ, написанных на С++ в среде Visual Studio. Соответствует требованиям федеральных государственных образова тельных стандартов высшего образования последнего поколения. Для студентов, обучающихся по направлению подготовки «Программ ная инженерия». УДК 004.42(075.8) ББК 32.973-018я73
Предисловие Развитие компьютерной графики и методов математического моделирования привело к созданию нового научного направления, которое получило название «научная визуализация» (Scientific visualization). Годом рождения этого научного направления можно считать 1987 г., когда национальный научный фонд США представил отчет «Визуализация в вычислениях» (Visualization in Scientific Computing). Основной задачей научной визуализации является визуальное представление результатов научных исследований с помощью средств компьютерной графики. Научная визуализация переводит результаты научных исследований, выраженные в числовой форме, в визуальные образы. Визуальное представление числовых данных облегчает работу с информацией и обмен этой информацией. Следующая цель научной визуализации — увидеть то, чего раньше нельзя было увидеть, например движение элементарных частиц, распределение температуры в полупроводниковом устройстве, распределение электрического и магнитного поля в волноводе и т.д. Такие картины позволяют глубже понять природу протекающих процессов и быстрее найти нужное решение задачи. Дальнейшим развитием научной визуализации является переход к технологии виртуального окружения (виртуальная реальность). Эта технология визуализации определяется как интерактивная графика в реальном времени с трехмерными моделями, погружающая пользователя в мир модели с прямым манипулированием объектами в пространстве модели. Материал данной книги в значительной степени соответствует курсу «Визуализация в научных исследованиях», который один из авторов несколько лет читал в Московском институте электронной техники (МИЭТ) для студентов, обучающихся по направлению «Программная инженерия». Книга состоит из шести глав, в каждой из них исследуются физические, инженерные или математические задачи, с которыми студентам приходится иметь дело в процессе обучения. Для каждой задачи формулируется своя математическая модель, которая затем решается программными средствами, имеющимися в распоряжении. После того как найдены решения задачи в числовом виде, возникает проблема визуализации этих результатов. Для визуализации используются методы и алгоритмы компьютерной графики. Часть задач решается в пакете MATLAB, который
наряду с мощными расчетными средствами обладает прекрасной компьютерной графикой. Для визуализации полученных решений используется графика, которую предоставляет пользователю пакет MATLAB. Эту графику можно назвать высокоуровневой компьютерной графикой. Здесь имеется множество функций, рисующих различные графические объекты, с учетом большого количества алгоритмов и методов компьютерной графики. Даже не зная глубоко методы и алгоритмы компьютерной графики, можно получать неплохие результаты, используя графику MATLAB. Однако для студентов, которые специализируются в программировании, знание основ компьютерной графики необходимо. Поэтому некоторые задачи решаются с применением программирования компьютерной графики на С++. Используются функции графического интерфейса GDI из набора системных функций API, которые предоставляет пользователю операционная система Windows. В этих задачах применяются различные методы 3D-графики, такие как ортографическое и центральное проецирование, методы удаления невидимых частей объекта, метод Z-буфера, методы окрашивания объекта и т.д. Все примеры на С++ апробированы в среде разработки проектов Visual Studio 2008. Отдельная глава посвящена вопросам взаимодействия пакета MATLAB и программ, написанных на С++ в среде Visual Studio. Рассматриваются вопросы использования вставок, отдельных функций, написанных на языке C++ в программах пакета MATLAB. Также исследуется возможность обращения из программы, написанной на языке C++, к графическим модулям пакета MATLAB для графического представления результатов расчета физических или математических задач. Книга разбита на шесть глав, в которых рассматриваются различные области физики и математики с использованием визуализации результатов научных исследований в этих областях. По каждой главе приводится большое число действующих программ. Учебное пособие предназначено для студентов, обучающихся на очной форме (магистратура) по направлению подготовки 09.04.04 «Программная инженерия», профилям «Программное обеспечение автоматизированных систем и вычислительных комплексов», «Администрирование сетей и кибертехнологии». В результате изучения дисциплины студент будет: знать • методы и алгоритмы, необходимые для преобразования результатов научных исследований в графическую форму;
• физические законы и технические приемы, лежащие в основе создания изображений; • способы программной реализации этих методов для дальнейшего применения их при визуализации результатов научных и технических исследований; уметь • самостоятельно приобретать с помощью информационных технологий новые знания и умения, в том числе в новых областях знаний, непосредственно не связанных со сферой деятельности; • использовать в практической деятельности эти знания и умения; владеть • навыками самостоятельной работы на компьютере и в компьютерных сетях; • способностью к компьютерному моделированию устройств, систем и процессов с использованием универсальных пакетов прикладных компьютерных программ.
Глава 1. ГРАФИЧЕСКИЕ ВОЗМОЖНОСТИ ПАКЕТА MATLAB. МОДЕЛИРОВАНИЕ ДВИЖЕНИЯ ВОЛНОВОГО ПАКЕТА ЭЛЕКТРОНА. 1.1. НАЧАЛО РАБОТЫ С ПАКЕТОМ MATLAB Начнем с ознакомления с графическими средствами, которые предоставляет пользователю программная система MATLAB. Создадим простую программу, рисующую график синуса. Программные файлы пакета MATLAB имеют расширение .m. Поэтому создадим первую программу с именем Plot.m. Для этой цели откроем пакет MATLAB, в главном меню пройдем по цепочке команд File — New — M-File. В результате откроется окно редактора программы. Если в окне имеются какие-нибудь служебные надписи, то его нужно очистить. Затем в пустом окне редактора введем следующие строчки кода нашей программы: clc clear x = 0:0.1:10; y = sin(x); plot(x,y) После этого сохраним программу в файле с именем Plot.m. Запускаем программу на выполнение. Результат представлен на рис. 1.1. Рис. 1.1. Результат работы программы Plot.m.
В этом простом коде функция plot() рисует график синуса. Эта функция довольно сложная и многофункциональная. Даже в этом простом примере она выполняет множество действий. Во-первых, она создает окно вывода графика, размер которого эта функция вычисляет в соответствии с размерами графика. Затем расставляет числа вдоль осей x и y. Во-вторых, функция рисует график синуса толщиной в один пиксель синим цветом. Все эти действия функция выполняет по умолчанию. Если требуется заставить функцию plot() выполнить другие действия, то нужны дополнительные команды, о которых будем говорить далее. Входными параметрами функции plot() являются два массива одинаковой длины: массив координат x, и массив координат y. Как создаются эти массивы в данном примере, видно из кода программы. Если в конце строчки с кодом создания массива убрать точку с запятой, то результат вычислений появится в командном окне (Command Window) пакета MATLAB. Например, пусть это будут следующие строчки кода: x = 0:1:4 y = sin(x) В результате в командном окне появится следующая информация: x = 0 1 2 3 4 y = 0 0.8415 0.9093 0.1411 -0.7568 Это пять значений координаты x и пять соответствующих значений синуса. Заметим, что если в коде программы окажутся синтаксические ошибки в языке программирования MATLAB, то в командном окне появится сообщение об ошибках (красным цветом). Теперь скажем о первой строчке кода программы clc Эта команда очищает командное окно перед запуском программы (Clear Command Window). Дело в том, что по умолчанию в командном окне сохраняется информация обо всех запусках программ, пока не выключен MATLAB. Вторая строчка кода программы имеет вид
clear Эта команда очищает рабочее пространство системы MATLAB, по сути, освобождая память (Remove items from workspace, freeing up system memory). При запуске программы MATLAB для каждой переменной величины выделяет место в памяти, соответствующее размеру этой величины. По умолчанию при запуске очередной программы информация о предыдущей программе остается в памяти. Пока MATLAB работает, память разбухает и засоряется. Дело в том, что в разных программах разные переменные величины могут иметь одинаковые имена и это может привести к ошибкам в работе программы, если не следить за состоянием памяти. Иногда такое положение может быть полезным, если разные программы работают с одним и тем же набором данных, которые располагаются в общей памяти для этих разных программ. Однако для обычных программ, чтобы случайно не сделать ошибок, лучше всего очищать память перед началом работы программы. Состояние памяти можно выяснить, если после работы программы, например Plot.m, в командном окне набрать следующую команду: >> whos В результате в командном окне появится такая информация: Name Size Bytes Class x 1x101 808 double y 1x101 808 double В нашем примере имеется две переменные величины с именами x и y. Эти величины являются одномерными массивами, в которых содержатся элементы типа double. Количество элементов в массиве равно 101. На элемент типа double выделяется 8 байт памяти, поэтому под эти две переменные величины MATLAB выделяет 1616 байт памяти. Обратим внимание на размер Size переменной величины x, показанный выше. Немного необычно обозначение, а именно 1x101. Дело в том, что в пакете MATLAB любая переменная величина является матрицей. Даже отдельное число, например a = 2.5, имеет размер 1x1. В пакете MATLAB одномерные массивы называются векторами, поэтому величину x можно назвать вектором-строчкой с размерно
стью 1x101. Как известно из алгебры матриц, из вектора-строчки можно получить вектор-столбик операцией транспонирования. В пакете MATLAB транспонирование обозначается штрихом: u w = ′. Немного изменим программу Plot.m и создадим программу Plot1.m: clc clear a = 2; x = 0:0.1:10; y = x.*sin(x).^a; x1 = x'; y1 = y'; plot(x1,y1) grid on Запускаем программу и получаем картину, показанную на рис. 1.2. Рис. 1.2. Результат работы программы Plot1.m Отметим изменения в этой картине по сравнению с той, которая изображена на рис. 1.1. Во-первых, здесь показан график другой функции: sina y x x = . На примере этой функции обратим внимание на некоторые особенности синтаксиса языка MATLAB. Заметим, что величина x является одномерным массивом и подстановка ее в синус sin(x) превращает этот синус также в массив. Далее этот синус возводится
в степень a. Операция возведения в степень в пакете MATLAB обозначается галочкой ^. Здесь следует обратить внимание на точку, стоящую перед этой галочкой. Эта точка обозначает, что операция выполняется над массивом, и в данном случае каждый элемент массива возводится в степень a. Аналогично точка, стоящая перед знаком умножения, обозначает, что каждый элемент массива x умножается на соответствующий элемент массива sina x. Заметим, что если операции выполняются над скалярными величинами, а не над массивами, то точку перед знаком операции можно не ставить. Обратим внимание на последнюю строчку кода: grid on Эта команда указывает функции plot(), чтобы на картине была добавлена сетка (Grid lines for 2-D and 3-D plots). Посмотрим также на следующие строчки кода: x1 = x'; y1 = y'; Здесь создаются два новых одномерных массива x1 и y1 с помощью операции транспонирования. Посредством команды whos посмотрим, как представлены эти два новых массива в пакете MATLAB: >> whos Name Size Bytes Class a 1x1 8 double x 1x101 808 double x1 101x1 808 double y 1x101 808 double y1 101x1 808 double Итак, видно, что каждый из этих одномерных массивов является вектор-столбиком. Их размерность обозначается как 101x1. Здесь введена также скалярная величина a, размерность которой равна 1x1. Если вектор-столбики x1 и y1 вывести в командном окне, то они действительно будут представлены в виде столбиков: x1 = 0
К покупке доступен более свежий выпуск
Перейти