Этот пример строит конусы вектора скорости для 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
закрашенная фигура
палитра
).
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
Представление
).
axis tight set(gca,'BoxStyle','full','Box','on') camproj perspective camzoom(1.25) view(65,45)
Добавьте источник света и используйте подсветку Гура в самой сглаженной подсветке изоповерхности. Увеличьте силу фоновой подсветки на изодне, чтобы сделать их более яркими (camlight
подсветка
AmbientStrength
).
camlight(-45,45) hcap.AmbientStrength = 0.6; lighting gouraud