Векторное поле, отображенное с коническими графиками

Что могут показать конические графики

Этот пример строит конусы вектора скорости для wind данные. Произведенный график использует много методов визуализации:

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

  • Подсветка позволяет форме изоповерхности ясно отобразиться.

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

1. Создание изоповерхности

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

  1. Вычислите величину векторного поля, которое представляет скорость ветра.

  2. Использование isosurface и patch чертить изоповерхность, иллюстрирующую, где на прямоугольном пробеле скорость ветра равна особому значению. Области в изоповерхности имеют более высокие скорости ветра, области вне изоповерхности имеют более низкие скорости ветра.

  3. Использование isonormals вычислить нормали вершин изоповерхности из данных об объеме, а не вычислить нормали от треугольников раньше представляло изоповерхность. Эти нормали обычно приводят к более точным результатам.

  4. Установите визуальные свойства изоповерхности, делая его красным и не чертя ребра (FaceColor'EdgeColor' ).

    load wind
    wind_speed = sqrt(u.^2 + v.^2 + w.^2);
    hiso = patch(isosurface(x,y,z,wind_speed,40));
    isonormals(x,y,z,wind_speed,hiso)
    hiso.FaceColor = 'red';
    hiso.EdgeColor = 'none';

2. Добавление изопрописных букв к изоповерхности

Изодно похоже на плоскости разбиения в этом, они показывают сечение объема. Они спроектированы, чтобы быть заглушками изоповерхностей. Используя интерполированный цвет поверхности на изодне заставляет отображение значения данных раскрашивать текущую палитру. Чтобы создать изодно для изоповерхности, задайте их в том же изозначении (isocaps, patch, colormap).

hcap = patch(isocaps(x,y,z,wind_speed,40),...
   'FaceColor','interp',...
   'EdgeColor','none');
colormap hsv

3. Создание первого набора конусов

  • Использование daspect установить соотношение сторон данных осей прежде, чем вызвать coneplot таким образом, функция может определить соответствующий размер конусов.

  • Определите точки, в которых можно поместить конусы путем вычисления другой изоповерхности, которая имеет меньшее изозначение (таким образом, конусы отображены вне первой изоповерхности), и использование reducepatch сокращать количество поверхностей и вершин (таким образом, нет слишком многих конусов на графике).

  • Чертите конусы и выберите цвет поверхности к blue и цвет обводки к none.

    daspect([1 1 1]);
    [f,verts] = reducepatch(isosurface(x,y,z,wind_speed,30),0.07);
    h1 = coneplot(x,y,z,u,v,w,verts(:,1),verts(:,2),verts(:,3),3);
    h1.FaceColor = 'blue';
    h1.EdgeColor = 'none';

4. Создание второго набора конусов

  1. Создайте второй набор точек в значениях, которые порождают линейную оболочку столбцов данных (linspace, meshgrid).

  2. Чертите второй набор конусов и выберите цвет поверхности к зеленому и цвет обводки ни к одному.

    xrange = linspace(min(x(:)),max(x(:)),10);
    yrange = linspace(min(y(:)),max(y(:)),10);
    zrange = 3:4:15;
    [cx,cy,cz] = meshgrid(xrange,yrange,zrange);
    h2 = coneplot(x,y,z,u,v,w,cx,cy,cz,2);
    h2.FaceColor = 'green';
    h2.EdgeColor = 'none';

5. Определение представления

  1. Используйте axis команда, чтобы установить пределы по осям равняется минимальным и максимальным значениям данных и заключить график в поле, чтобы улучшить смысл объема (box).

  2. Установите тип проекции на перспективу создавать более естественное представление объема. Установите точку зрения и увеличение делать сцену более крупной (camproj, camzoom, view).

    axis tight
    set(gca,'BoxStyle','full','Box','on')
    camproj perspective
    camzoom(1.25)
    view(65,45)

6. Добавление подсветки

Добавьте источник света и используйте подсветку Гура для самой сглаженной подсветки изоповерхности. Увеличьте силу фоновой подсветки на изодне, чтобы сделать их более яркими (camlight, lightingAmbientStrength ).

camlight(-45,45)
hcap.AmbientStrength = 0.6;
lighting gouraud