MATLAB可以用流动的粒子表现体数据的向量特征,称为流沙图。用streamparticles函数生成和显示流沙图。调用格式为:
streamparticles(vertices) 绘向量场的流沙图。流动的粒子通常用标记表示,可以显示流线的位置和速率。vertices为一二维或三维向量的单元数组。
streamparticles(vertices,n) 用n确定需要绘多少个流动粒子。ParticleAlignment属性控制如何解释n。如果ParticleAlignment设置为off(默认设置),并且n大于1,则在流线上等间距绘约n个粒子。
如果n小于或等于1,n解释为原流动顶点的一部分。例如,如果n=0.2,则近似有20%的顶点被使用。n确定所绘顶点个数的上限。注意,粒子的实际个数不一定等于n。
如果ParticleAlignment设置为on, 则n确定粒子最多的流线上的粒子个数。并将其他流线上粒子的间隔数设置为此值。默认时,n=1。
streamparticles(...,'PropertyName',PropertyValue,...) 用给定的属性和指定值控制流动粒子。任何没有指定的属性按默认值赋值。MATLAB忽略表1-1所示的属性名。
表1-1 流动粒子属性表
| 流动粒子的属性 | 描 述 |
|---|---|
| Animate – 流动粒子的运动[非负整数] | 流动粒子的快照次数。默认值为0,不进行快照。设置为Inf时,将一直进行快照,直到按下 |
| FrameRate – 每秒快照帧数[非负整数] | 本属性为快照指定每秒的帧数。设置为Inf时,将尽可能快地绘快照图(默认设置)。注意,快照的速度受到计算机速度的限制。此时,FrameRate属性的值可能不必达到 |
| ParticleAlignment – 将粒子与流线对齐[on|{off}] | 设置此属性为on,在每个流线的起点绘粒子。本属性控制streamparticles函数如何解释变量n(流动粒子数) |
流动粒子为直线对象,除了流动粒子属性以外,可以指定任何直线对象属性,如Marker和EraseMode等。streamparticles 函数被调用时设置表1-2所示的直线属性。
表1-2 直线属性表
| 直线属性 | Streamparticles函数设定的值 |
|---|---|
| EraseMode | xor |
| LineStyle | none |
| Marker | o |
| MarkerEdgeColor | none |
| MarkerFaceColor | Red |
可以通过指定一个属性名和属性值作为参数来覆盖这些属性值中的任意一个。如下面的语句用RGB值将MarkerFaceColor属性值设置为中灰。
streamparticles(vertices,'MarkerFaceColor',[.5 .5 .5])
streamparticles(line_handle,...) 使用由line_handle确认的线性对象绘流沙图。
h=streamparticles(...) 返回创建的line对象的句柄向量。
本例用4维函数生成4维体数据x,y,z,vv,然后用vv得到x,y,z 3个方向上的梯度。指定起点sx,sy,sz,使用streamparticles函数生成流沙动画。
>> [x,y,z]=meshgrid(-2:.2:2); %生成绘图数据
>> vv=x.^2+y.^2+z.^2-x.*y+z+1;
>> [u,v,w]=gradient(vv); %3个方向的梯度
>> [sx,sy,sz]=meshgrid(-2:2); %起点
>> verts=stream3(x,y,z,u,v,w,sx,sy,sz); %计算3维流线数据
>> sl=streamline(verts); %绘制流线
>> view(3) %三维视图
>> iverts=interpstreamspeed(x,y,z,u,v,w,verts,.2); %插值
>> camproj perspective; camva(8) %相机操作
>> gca.SortMethod=27;fast'; %绘图模式
>> box on
>> streamparticles(iverts,10,'animate',10,'ParticleAlignment','on') %绘流沙动画
生成图6-3所示动画。
图6-3 流沙动画