文字显示结果
组合搜索  计算机图书分类目录
 
所在位置: 图书 -> 在线试读 -> MATLAB图像处理宝典 
                 

第7章 科学计算可视化

7.4 三维流场绘图

流场,流体运动所占据的空间称为流场。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 添加光照后的效果

 
 
  上一页 返回 下一页  
 
Copyright © 2010 TianMei Technology All rights reserved. To comment on this site
  辽B-2-4-20100065