今天,再来一篇关于Matlab 流线图系列教程。本文,我们讲解下Matlab使用streamtube函数创建三维流管图相关的教程。主要包括:streamtube函数的常见用法、语法说明、以可视方式呈现流、使用顶点数据和发散性以可视方式呈现流等用法。
下面,我们首先给出Matlab中关于streamtube函数的帮助文档如下:
>> help streamtube streamtube 3D stream tube. streamtube(X,Y,Z,U,V,W,STARTX,STARTY,STARTZ) draws stream tubes from vector data U,V,W. The arrays X,Y,Z define the coordinates for U,V,W and must be monotonic and 3D plaid (as if produced by MESHGRID). STARTX, STARTY, and STARTZ define the starting positions of the streamlines at the center of the tubes. The width of the tubes is proportional to the normalized divergence of the vector field. A vector of surface handles (one per start point) is returned in H. streamtube(U,V,W,STARTX,STARTY,STARTZ) assumes [X Y Z] = meshgrid(1:N, 1:M, 1:P) where [M,N,P]=SIZE(U). streamtube(VERTICES,X,Y,Z,DIVERGENCE) assumes precomputed streamline vertices and divergence. VERTICES is cell array of streamline vertices (as if produced by stream3). X,Y,Z, and DIVERGENCE are 3D arrays streamtube(VERTICES,DIVERGENCE) assumes [X Y Z] = meshgrid(1:N, 1:M, 1:P) where [M,N,P] = SIZE(DIVERGENCE). streamtube(VERTICES,WIDTH) uses the cell array of vectors WIDTH for the width of the tubes. The size of each corresponding element of VERTICES and WIDTH must be equal. streamtube(VERTICES,WIDTH) uses the scalar WIDTH for the width of all streamtubes. streamtube(VERTICES) automatically selects width. streamtube(...,[SCALE N]) scales width of the tube by SCALE. The default is SCALE=1. When the streamtubes are created using start points or divergence, SCALE=0 will suppress automatic scaling. N is the number of points along the circumference of the tube. The default is N=20. streamtube(AX,...) plots into AX instead of GCA. H = streamtube(...) returns a vector of handles (one per start point) to SURFACE objects. Example 1: load wind [sx sy sz] = meshgrid(80, 20:10:50, 0:5:15); h=streamtube(x,y,z,u,v,w,sx,sy,sz); axis tight shading interp; view(3); camlight; lighting gouraud Example 2: load wind [sx sy sz] = meshgrid(80, 20:10:50, 0:5:15); verts = stream3(x,y,z,u,v,w,sx,sy,sz); div = divergence(x,y,z,u,v,w); h=streamtube(verts,x,y,z,div); axis tight shading interp; view(3); camlight; lighting gouraud
常见用法
streamtube(X,Y,Z,U,V,W,startx,starty,startz) streamtube(U,V,W,startx,starty,startz) streamtube(vertices,X,Y,Z,divergence) streamtube(vertices,divergence) streamtube(vertices,width) streamtube(vertices) streamtube(...,[scale n]) streamtube(ax,...) h = streamtube(...)
语法说明
streamtube(X,Y,Z,U,V,W,startx,starty,startz) 从向量三维体数据 U、V 和 W 绘制流管。
数组 X、Y 和 Z 用于定义 U、V 和 W 的坐标,它们必须是单调的,无需间距均匀。X、Y 和 Z 必须具有相同数量的元素,就像由 meshgrid 生成一样。
startx、starty 和 startz 定义位于管道中心的流线图的起始位置。
管道的宽度与向量场的归一化散度成比例。
streamtube(U,V,W,startx,starty,startz) 假定 X、Y 和 Z 由以下表达式确定
[X,Y,Z] = meshgrid(1:n,1:m,1:p)
其中 [m,n,p] = size(U)。
streamtube(vertices,X,Y,Z,divergence) 使用预先计算的流线图顶点和散度。vertices 是流线图顶点的元胞数组(就像由 stream3 生成一样)。X、Y、Z 和 divergence 都是三维数组。
streamtube(vertices,divergence) 假定 X、Y 和 Z 由以下表达式确定
[X,Y,Z] = meshgrid(1:n,1:m,1:p)
其中 [m,n,p] = size(divergence)。
streamtube(vertices,width) 在向量元胞数组 width 中指定管道的宽度。vertices 和 width 的每个对应元素的大小必须相同。width 也可以是标量,用于为所有流管的宽度指定单个值。
streamtube(vertices) 自动选择宽度。
streamtube(…,[scale n]) 按照 scale 缩放管道的宽度。默认值为 scale = 1。创建流管时,使用开始点或散度、指定 scale = 0 将禁止自动缩放。n 是指沿管道的周长分布的点数。默认值为 n = 20。
streamtube(ax,…) 将图形绘制到 ax 坐标区对象中,而不是当前坐标区对象 (gca) 中。
h = streamtube(…) 返回用于绘制流管图的 surface 对象(每个起点一个)的向量。
以可视方式呈现流
使用 streamtube 函数指示 wind 数据集中的流动情况。输入包括流管的坐标、向量场分量和起始位置。
load wind [sx,sy,sz] = meshgrid(80,20:10:50,0:5:15); streamtube(x,y,z,u,v,w,sx,sy,sz); view(3); axis tight shading interp; camlight; lighting gouraud
使用顶点数据和发散性以可视方式呈现流
使用 stream3 函数返回的顶点数据和发散性数据以可视化形式呈现流。
load wind [sx,sy,sz] = meshgrid(80,20:10:50,0:5:15); verts = stream3(x,y,z,u,v,w,sx,sy,sz); div = divergence(x,y,z,u,v,w); streamtube(verts,x,y,z,-div); view(3); axis tight shading interp camlight lighting gouraud
转载文章,原文出处:MathWorks官网,由古哥整理发布
如若转载,请注明出处:https://iymark.com/articles/2043.html