Этот пример строит конусы вектора скорости для данных 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