В этом примере показаны конусы вектора скорости для wind данные. Полученный график использует ряд методов визуализации:
Изоповерхность используется для обеспечения визуального контекста для графиков конуса и для обеспечения средств выбора конкретного значения данных для набора конусов.
Освещение позволяет хорошо видеть форму изоповерхности.
Использование проекции в перспективе, позиционирования камеры и регулировки угла обзора составляет окончательный вид.
Отображение изоповерхности в прямоугольном пространстве данных обеспечивает визуальный контекст для графика конуса. Создание изоповерхности требует ряда шагов:
Вычислите величину векторного поля, представляющего скорость ветра.
Использовать isosurface и patch нарисовать изоповерхность, показывающую, где в прямоугольном пространстве скорость ветра равна определенной величине. Области внутри изоповерхности имеют более высокие скорости ветра, области вне изоповерхности имеют более низкие скорости ветра.
Использовать isonormals вычислять нормали вершин изоповерхности на основе данных объема, а не вычислять нормали на основе треугольников, используемых для визуализации изоповерхности. Эти нормали обычно дают более точные результаты.
Задайте визуальные свойства изоповерхности, сделав ее красной и без кромок чертежа (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';
Изокапы подобны плоскостям среза тем, что они показывают поперечное сечение объема. Они предназначены для концевых крышек изоповерхностей. Использование интерполированного цвета грани на изокапе приводит к отображению значения данных на цвет в текущей карте цветов. Чтобы создать изокапы для изоповерхности, определите их на одном и том же изовалюте (isocaps, patch, colormap).
hcap = patch(isocaps(x,y,z,wind_speed,40),... 'FaceColor','interp',... 'EdgeColor','none'); colormap hsv
Использовать 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';
Создайте второй набор точек в значениях, охватывающих диапазон данных (linspace, meshgrid).
Нарисуйте второй набор конусов и установите зеленый цвет грани, а цвет кромки - нет.
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';
Используйте axis команда установить пределы оси равными минимальному и максимальному значениям данных и заключить граф в рамку для улучшения ощущения громкости (box).
Задайте тип проекции «Перспектива», чтобы создать более естественный вид объема. Задайте точку обзора и увеличьте масштаб изображения, чтобы увеличить размер сцены (camproj, camzoom, view).
axis tight set(gca,'BoxStyle','full','Box','on') camproj perspective camzoom(1.25) view(65,45)
Добавьте источник света и используйте освещение Гуро для наиболее гладкого освещения изоповерхности. Увеличить прочность фонового освещения на изокапах, чтобы сделать их ярче (camlight, lighting, AmbientStrength).
camlight(-45,45) hcap.AmbientStrength = 0.6; lighting gouraud
