流场,流体运动所占据的空间称为流场。MATLAB 可以对流场进行绘图。 7.4.1 流锥图——coneplot 函数 可以使用coneplot 函数绘制流锥图,如表7.1 所示。  coneplot 函数自动设置图中圆锥体的显示比例,并使它们与速率向量的大小成比例;调用coneplot 函数之前, 可以使用daspect 命令设置数据方向比, 如daspect([1,1,1])。
利用MATLAB 内部所带数据集wind 绘制流锥图。 figure; colordef(gcf,'white') cla % 清理显示空间 load wind % 载入数据 [cx cy cz] = meshgrid(linspace(71,134,10),linspace(18,59,10),3:4:15); % 数据准备 daspect([1 1 1]) % 设置显示比例 h=coneplot(x,y,z,u,v,w,cx,cy,cz,y,3); % 绘制流锥图 set(h,'EdgeColor', 'none'); % 设置边框颜色 colormap(hsv); % 设置色彩索引图 box on; % 加立体边框,像个盒子把三维图形包起来 axis tight % 轴的范围为数据范围 camproj perspective; % 设置透视方式 camva(35); % 设置摄像机观察角度 campos([175 10 85]); % 设置摄像机位置 camtarget([105 40 0]) % 设置摄像机拍摄目标 camlight left; % 设置摄像机灯光位置 lighting gouraud % 设置灯光算法 运行结果如图7.11 所示。  图7.11 流锥图 7.4.2 流线图——streamline 函数 可以使用streamline 函数绘制流线图,如表7.2 所示。 表7.2 streamline 函数 

利用MATLAB 内部所带数据集wind 绘制流线图。 figure; % 生成新图形窗口 colordef(gcf,'white') % 图形窗口颜色设置 cla % 清理显示空间 load wind % 载入数据 [sx sy sz] = meshgrid(80, 20:10:50, 0:5:15); % 数据准备 h=streamline(x,y,z,u,v,w,sx,sy,sz); % 绘制流线图 set(h, 'Color', 'black'); % 设置流线颜色 daspect([1 1 1]) % 设置显示比例 box on; % 加立体边框,像个盒子把三维图形包起来 camproj perspective; % 设置透视方式 camva(32); % 设置摄像机观察角度 axis tight % 轴的范围为数据范围 campos([175 10 85]); % 设置摄像机位置 camtarget([105 40 0]) % 设置摄像机拍摄目标 camlight left; % 设置摄像机灯光位置 lighting gouraud % 设置灯光算法 运行结果如图7.12 所示。  图7.12 流线图 7.4.3 流管图——streamtube 函数 可以使用streamtube 函数绘制流管图,如表7.3 所示。 表7.3 streamtube 函数 
利用MATLAB 内部所带数据集wind 绘制流管图。 figure; % 生成新图形窗口 colordef(gcf,'white') % 图形窗口颜色设置 cla % 清理显示空间 load wind % 载入数据 [sx sy sz] = meshgrid(80, [20 30 40], [5 10]); % 数据准备 daspect([1,1,1]); % 设置显示比例 h=streamtube(x,y,z,u,v,w,sx,sy,sz); % 绘制流管图 set(h,'facecolor','cyan','edgecolor','none'); % 设置图形窗口属性 box on; % 加立体边框,像个盒子把三维图形包起来 camproj perspective; % 设置透视方式 axis tight % 轴的范围为数据范围 camva(28); % 设置摄像机观察角度 campos([175 10 95]); % 设置摄像机位置 camtarget([105 40 0]) % 设置摄像机拍摄目标 camlight left; % 设置摄像机灯光位置 lighting gouraud % 设置灯光算法 运行结果如图7.13 所示。 7.4.4 流带图——streamribbons 函数 可以使用streamribbons 函数绘制流带图,如表7.4 所示。  图7.13 流管图 表7.4 streamribbons 函数 
利用MATLAB 内部所带数据集wind 绘制流带图。 figure; % 生成新图形窗口 colordef(gcf,'white') % 图形窗口颜色设置 cla % 清理显示空间 load wind % 载入数据 [sx sy sz] = meshgrid(80, [20 30 40], [5 10]); % 数据准备 daspect([1,1,1]); % 设置显示比例 h=streamribbon(x,y,z,u,v,w,sx,sy,sz); % 绘制流带图 set(h,'facecolor','cyan','edgecolor','none') % 设置图形窗口属性 box on; % 加立体边框,像个盒子把三维图形包起来 camproj perspective; % 设置透视方式 axis tight % 轴的范围为数据范围 camva(28); % 设置摄像机观察角度 campos([175 10 85]); % 设置摄像机位置 camtarget([105 40 0]) % 设置摄像机拍摄目标 camlight left; % 设置摄像机灯光位置 lighting gouraud % 设置灯光算法 运行结果如图7.14 所示。  图7.14 流带图 7.4.5 带圆锥图的向量场 使用wind 数据绘制速率向量场。首先绘制一个等值面,用于提供圆锥图的可视承接,并提供各种方法,为一系列圆锥选择指定的数据值。接着进行光照,使等值面的形状清晰可见。最后使用透视投影、相机位置设定和视角调整等方法确定最后的视角。
创建等值面。 为圆锥图在提供可视承接的矩形空间中显示等值面。创建等值面需要下面一些步骤: 计算向量场的大小,它代表气流速度。 使用isosurface 和patch 来绘制一个演示矩形空间中气流流速与特定值相等的等值面。等值面内的矩形区域具有较高的流速,表面外的区域内流速较低。 使用isonormals 函数计算等值面的顶点范数。 设置等值面的可视属性,设置其前景色为红色、无边界。 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) % 计算等值面的顶点范数 set(hiso,'FaceColor','red','EdgeColor','none'); % 设置等值面属性 运行结果如图7.15 所示。 
图7.15 创建等值面 图7.16 添加等值帽 添加等值帽到等值面。
hcap = patch(isocaps(x,y,z,wind_speed,40),... % 等值面属性设置 'FaceColor','interp',... % 表面颜色 'EdgeColor','none'); % 边缘颜色 colormap hsv % 设置色彩索引图 运行结果如图7.16 所示。
创建第1 个圆锥集。 使用daspect,在调用coneplot 函数之前设置坐标轴的数据方向比,这样MATLAB 可以 确定圆锥的合适大小。 通过计算另外的具有更小相等值的等值面来确定放置圆锥的点(所以圆锥显示在第1 个等 值面之外),并用reducepatch 函数减小侧面和顶点个数(这样,图上就不会因为有太多的 圆锥体而显得拥挤)。 绘制圆锥体并设置表面颜色为蓝色,不设置边缘颜色。 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); % 绘制流锥图 set(h1,'FaceColor','blue','EdgeColor','none'); % 设置等值面属性 运行结果如图7.17 所示。
创建第2 个圆锥集。 在扩展范围内的值处创建第2 个点集。绘制第2 个圆锥集合并设置其表面颜色为绿色、 无边缘颜色(使用函数linspace 和meshgrid)。运行结果如图7.18 所示。  图7.17 添加第1 个圆锥集 图7.18 添加第2 个圆锥集 xrange = linspace(min(x(:)),max(x(:)),10); % x 轴范围 yrange = linspace(min(y(:)),max(y(:)),10); % y 轴范围 zrange = 3:4:15; % z轴范围 [cx,cy,cz] = meshgrid(xrange,yrange,zrange); % 数据准备 h2 = coneplot(x,y,z,u,v,w,cx,cy,cz,2); % 绘制流锥图 set(h2,'FaceColor','green','EdgeColor','none'); % 设置流锥图属性
定义视角,设置投影类型。 使用axis 命令,令坐标轴范围等于最大值与最小值的差,并将图形封闭在盒形体积中,改善图形的整体性。设置投影类型为透视投影,创建一个更自然的立体感。设置视点并缩小图形,使视野更大。 axis tight % 轴的范围为数据范围 box on % 加立体边框,像个盒子把三维图形包起来 camproj perspective % 设置透视方式 camzoom(1.25) % 摄像机放大倍数 view(65,45) % 设置视角 运行结果如图7.19 所示。
添加光照。 添加光源并用Phong 光照等方法得到等值面的光照最平滑。增加isocaps 上的背景光照 长度,使它们最亮。 camlight(-45,45) % 设置摄像机灯光位置 set(gcf,'Renderer','zbuffer'); % 设置渲染方式 lighting phong % 设置灯光算法 set(hcap,'AmbientStrength',.6) % 设置环境光强度 运行结果如图7.20 所示。 
图7.19 定义视角,设置投影类型 图7.20 添加光照后的效果
|