Визуализация векторных объемных данных

Линии, частицы, ленты, потоки, трубы и конусы

Векторные объемные данные содержат больше информации, чем скалярные данные, потому что каждая координатная точка в наборе данных имеет три значения, связанных с ним. Эти значения определяют вектор, который представляет и величину, и направление. Скорость потока жидкости является примером вектора данных.

Для визуализации векторных данных полезен ряд методов:

  • Линии потока прослеживают путь, по которому будет следовать безмассовая частица, погруженная в векторное поле.

  • Частицы потока являются маркерами, которые отслеживают линии потока и полезны для создания линейной анимации потока.

  • Струйные ленты аналогичны струйным линиям, за исключением того, что ширина лент позволяет им указывать на скручивание. Ленты потока полезны, чтобы указать скорость вращения поворота.

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

  • Графики конуса представляют величину и направление данных в каждой точке путем отображения конической стрелки или стрелы.

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

Использование скалярных методов с векторными данными

Методы визуализации, такие как срезы контура, плоскости разбиения и изоповерхности, требуют скалярных объемных данных. Можно использовать эти методы с векторными данными, взяв величину векторов. Для примера, wind набор данных возвращает три массива координат и три массива векторных компонентов, u, v, w. В этом случае величина векторов скорости равняется скорости ветра в каждой соответствующей координатной точке объема.

wind_speed = sqrt(u.^2 + v.^2 + w.^2);

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

Определение начальных точек для потоковых графиков

Потоковые графики (линии потока, ленты, трубы и конусы или стрелы) иллюстрируют поток векторного поля 3-D. MATLAB® функции построения графиков потоков (streamline, streamribbon, streamtube, coneplot, stream2, stream3) все требуют, чтобы вы указали точку, в которой вы хотите начать трассировку каждого потока.

Определение начальных точек

Как правило, знание характеристик ваших данных помогает вам выбрать начальные точки. Информация, такая как основное направление потока и область значений координат данных, помогает вам решить, где оценить данные.

streamslice функция полезна для исследования ваших данных. Для примера эти операторы рисуют срез через векторное поле с z значением посередине в диапазоне.

load wind
zmax = max(z(:)); zmin = min(z(:));
streamslice(x,y,z,u,v,w,[],[],(zmax-zmin)/2)

Этот график среза потока указывает, что поток находится в положительном направлении x, а также позволяет вам выбирать начальные точки как в x, так и в y. Можно создать аналогичные графики, которые срезают объем в плоскости x-z или плоскости y-z, чтобы получить дальнейшее представление о области значений и ориентации данных.

Задание массивов координат начальной точки

Чтобы задать начальную точку для одной линии потока, вам нужны координаты x -, y - и z точки. meshgrid команда предоставляет удобный способ создания массивов начальных точек. Для примера можно выбрать следующие начальные точки из данных о ветре, показанных на предыдущем срезе потока.

[sx,sy,sz] = meshgrid(80,20:10:50,0:5:15);

Этот оператор определяет начальные точки как все лежащие на x = 80, y в диапазоне от 20 до 50 и z в диапазоне от 0 до 15. Вы можете использовать plot3 отображение расположений.

plot3(sx(:),sy(:),sz(:),'*r');
axis(volumebounds(x,y,z,u,v,w))
grid on 
set(gca,'BoxStyle','full','Box','on')
daspect([2 2 1])

Вам не нужно использовать трехмерные массивы, такие как возвращенные meshgrid, но размер каждого массива должен быть одинаковым, и meshgrid предоставляет удобный способ сгенерировать массивы, если у вас нет равного количества уникальных значений в каждой координате. Можно также задать массивы начальных точек следующим векторы-столбцы. Для примера, meshgrid возвращает трехмерные массивы:

[sx,sy,sz] = meshgrid(80,20:10:50,0:5:15);
whos
  Name      Size             Bytes  Class     Attributes

  sx        4x1x4              128  double              
  sy        4x1x4              128  double              
  sz        4x1x4              128  double      

В сложение можно использовать векторы-столбцы 16 на 1 с соответствующими элементами трех массивов, составляющими координаты каждой начальной точки. (Это эквивалент индексации значений, возвращаемых meshgrid как sx(:), sy(:), и sz(:).)

Для примера добавление струйных линий к начальным точкам приводит к:

streamline(x,y,z,u,v,w,sx(:),sy(:),sz(:))

Доступ к субрегионам объемных данных

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

Индексация оператором двоеточия

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

load wind
xsub = x(1:10,20:30,1:7);
ysub = y(1:10,20:30,1:7);
zsub = z(1:10,20:30,1:7);
usub = u(1:10,20:30,1:7);
vsub = v(1:10,20:30,1:7);
wsub = w(1:10,20:30,1:7);

Использование функции подвоспитания

subvolume позволяет использовать значения координат, которые можно считать из осей. Для примера:

lims = [100.64 116.67 17.25 28.75 -0.02 6.86];
[xsub,ysub,zsub,usub,vsub,wsub] = subvolume(x,y,z,u,v,w,lims);

Затем можно использовать данные подвоспитания как входы для любой функции, требующей векторных объемных данных.