exponenta event banner

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

Какие конусные графики могут отображаться

В этом примере показаны конусы вектора скорости для 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, lighting, AmbientStrength).

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