Сетевое издание
Международный студенческий научный вестник
ISSN 2409-529X

VISUALIZATION OF THE RESULTS OF THE MODELING OF GAS AND LIQUID CURRENTS. PART 1. ANIMATION OF THE SURFACE GRAPHICS

Markin E.E. 1 Skachkov P.P. 1
1 Ural state University of railway engineering
The aim of the work is the development of a program for the animation of processes in gas flows. The solutions of the complete system of Navier-Stokes equations describing two-dimensional flows of a compressible viscous heat-conducting ideal gas make it possible to determine all the thermodynamic variables of such flows. To analyze the results of computations, it is useful to consider the visualization of the surfaces of these variables in three-dimensional space and the animation of these surfaces along the time of the process flow. An essential feature of the program is that it directly interacts with the array of data allows you to shift, zoom and rotate the graph during the animation. All these actions can be done using the mouse, and using a user-friendly interface. The plot of the surface is constructed in a parallelepiped with dimensions (x1, x2), (y1, y2), (z1, z2), and ro-tations of the graph can be drawn at angles α=∠ (Oz,Oz') and β=∠ (Ox,Ox').
navier-stokes equations system
surface graph
coordinate system transformation
asp.net c#

Введение

Рассматривается полная система уравнений Навье Стокса, решения которой описывают течения сжимаемого вязкого теплопроводного идеального газа [1]. Система дифференциальных уравнений для переменных и программа их вычисления содержатся в работе [4]. Результатом работы программы являются массивы, записываемые в файлы данных[2]. Эти массивы содержат значения давления, удельного объема и скоростей. Файлы открываются в ППП MathCAD (MatLab) и произвести анимацию процессов протекающих в течении газа[3].

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

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

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

Разработать приложение, которое выводит на экран монитора график поверхности с возможностью поворачивать график, выводить оси координат OX, OY, OZ и легко перемещаться в разные моменты моделируемого времени

Математическая постановка задачи

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

График поверхности будет строиться в параллелепипеде с размерами (xx1,xx2), (yy1,yy2), (zz1,zz2). Для поворота системы координат введем понятие точки с координатами (x0,y0,z0), а также углов относительно которых будет осуществляться поворот всей системы, – относительно оси OZ и – относительно оси OX.

Для решения данной задачи воспользуемся формулами для вычисления (1). Сдвиг в точку с учетом углов α и β описывается матрицами преобразования координат

(1)

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

Обозначим, что в плоскости монитора лежат оси OX и OY, а ось OZ перпендикулярна экрану. Пусть переменные xx и yy обозначают точку на экране монитора, тогда (xx, yy) искомые точки графика будут найдены по формуле (2)

(2)

– коэффициенты перспективы, находятся экспериментально.

Написание программы

Создадим форму и расположим на ней элементы, показанные на рисунке 2. На форме главным образом располагаются поля для ввода размеров слоя (N, M), время моделирования (TK), и частота кадров (FPS). После открытия файла данные поля отключаются, а вкладки активируются, на них можно менять область определения графика поверхности, регулировать масштабы осей и регулировать подписи[6].

Для работы с графиком поверхности объявим переменные, показанные на листинге 1. Переменные , , , , обозначают область определения графика поверхности, значения из массива равномерно заполняют поверхность с шагом и , где ; . (4)

Рис. 2. Главное окно программы.

Пользователь должен вводить размеры моделируемой области (N,M), время моделирования (TK), область определения графика поверхности по осям OX, OY, OZ, и масштабирования графика в целом, так и по осям.

Листинг 1. Объявление переменных

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

Функция для преобразования координат и масштабирования

Функция для рисования графика поверхности.

Функция чтения данных из файла

Функция анимирования графика поверхности

Переменным N, M присваиваем значения с формы. Количество кадров (переменная C) определяется TK x FPS (время моделирования умножить на колличество кадров в секунду). Этих данных достаточно для загрузки массива в память.

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

Листинг 2. Фрагмент функции импорта даных.

Теперь массив находится в памяти. Следующим шагом будет написание функции преобразования координат графика поверхности(x,y,z) в каординаты точки на мониторе(xx,yy). Функция приведена полностью на листинге 3. Переменные xx и yy являются глобальными, после вызова функции Zoom_xyz() считываем с них значение.

Листинг 3. Преобразование координат.

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

Листинг 4. Отрывок функции вывода графика поверхности на экран

Функция pictureBox_Paint() является методом события Paint, обьекта PictureBox, расположенного на форме. Это нужно для того чтобы изображение не исчезало при перекрытии другми оконами или изменении размеров.

Теперь наш график ввыводится на экран однако нам нужно его поворачивать перемещать и масштабировать. Для этого настроим перемещение на правую кнопку мыши, поворот на левую, а масштабирование на колесико мыши. В событиях на обьекте PictureBox добавим метод MouseMove(перемещение мыши по обьекту). В нем определяем какая кнопка мыши нажата. На листинге 5 приведен отрывок кода для поворота системы координат, перемещение осуществляется подобным образом.

Листинг 5. Отрывок функции обработки поворота и перемещения графика.

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

Листинг 6. Добавление метода прокрутки колесика мыши.

И последнее что нужно сделать для анимации - добавить таймер, в нем изменять номер слоя и обновлять изображение (листинг 7).

Листинг 7. Таймер анимации

Теперь можно запустить приложение на выполнение и протестовать его работу (рисунок 3).

Рис. 3 Результата работы программы.