找回密码
 注册
Simdroid-非首页
查看: 246|回复: 13

请问怎样将两结果(流场速度和线形态)叠加到一张图上?

[复制链接]
发表于 2010-7-10 10:02:37 | 显示全部楼层 |阅读模式 来自 香港
我已分别计算出流场速度和线的运动形态,都是三维的。其中流场速度是用CFD软件算的,而线的形态是在MATLAB里编程算的,现想把两结果表示在同一张图上,如下图:(流场可是矢量或流线)


流场速度如下形式:
a=[0.0110    0.0014    5.6028    0.2198    0.7451   38.1989
    0.0110    0.0014    5.4945    0.3287    0.8779   37.1386
    0.0110    0.0014    5.3862    0.4125    1.0023   36.0757
    0.0110    0.0014    5.2786    0.4713    1.1158   35.0193
    0.0111    0.0015    5.1742    0.5044    1.2138   33.9951
    0.0110    0.0014    5.0695    0.5178    1.2979   32.9624
   -0.3308   -0.3639    5.9276   23.8740  -19.9144   10.4938
   -0.3308   -0.3639    5.8193   23.3261  -19.2267   10.2186
   -0.3308   -0.3639    5.7110   22.7634  -18.5380    9.9665
     :          :         :         :         :         :
     :          :         :         :         :         :
   ];

其中速度a的前三列为坐标分量,后三列是对应的速度分量。

而表示线形态的坐标矩阵是:
b=[-0.0001   -0.0009    0.0100
   -0.0000   -0.0009    0.0103
    0.0001   -0.0009    0.0105
    0.0001   -0.0009    0.0108
    0.0002   -0.0009    0.0110
    0.0003   -0.0009    0.0113
    0.0003   -0.0009    0.0115
    0.0004   -0.0009    0.0118
    0.0005   -0.0008    0.0120
    0.0005   -0.0008    0.0123
    0.0006   -0.0007    0.0126
    0.0007   -0.0007    0.0128];

问题的关键是怎样画速度矢量或流线图,二维的就行,用quiver或streamline吗?

不知把问题说明白了没,请高手帮个忙,不胜感谢。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
发表于 2010-7-10 10:43:08 | 显示全部楼层 来自 四川成都
Simdroid开发平台
1# guohf

你用quiver3或者streamline先做出流场的矢量图或流线,hold on以后,再用plot3画出线的运动形态,这样就可以做出流场的三维效果图,如果你只要平面的话,用一下view函数。例如:
>> quiver3(a(:,1),a(:,2),a(:,3),a(:,4),a(:,5),a(:,6));
>> hold on
>> plot3(b(:,1),b(:,2),b(:,3),'r-')
>> view(0,90)
即可做出你题中给出的数据对应的图形。可能plot3画出的东西在图中表现不明显,那只是因为你的数据量太少、太小了

评分

1

查看全部评分

回复 不支持

使用道具 举报

 楼主| 发表于 2010-7-13 13:33:29 | 显示全部楼层 来自 香港
本帖最后由 messenger 于 2010-7-23 10:25 编辑

2# lengyunfeng

谢谢你的指点,能画出来了,但我还有一些问题要求教。

1) 按你说的把我的数据加进去,显示的平面图矢量太密,且其长度很微短,不太清楚。矢量的大小及数量能否调整?

2) 我的流场数据是z 表流向, xy面是圆。view(0,90)显示的是xy面的投影,若要表示xz或 yz面的投影是用view(0,0)吧?

3) 若要画流线图该怎样写程序?

下面把我的流场数据上传,线的运动形态数据b不变。
请帮个忙,谢谢了。

附件上传不成功,重传,共20个分卷压缩包。
     
  
      
  

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
回复 不支持

使用道具 举报

发表于 2010-7-13 14:01:21 | 显示全部楼层 来自 香港
lengyunfeng 好,
我是 guohf. 因我的权限每天只能上载5.12M,其余的10个用朋友的帐号上传。

谢谢。
        

        

        

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
回复 不支持

使用道具 举报

 楼主| 发表于 2010-7-16 21:40:03 | 显示全部楼层 来自 香港
2# lengyunfeng

请lengyunfeng帮下忙吧,我还是搞不清quiver和streamline的用法,问题解决不了。

我把流场数据上传到网盘了,下载更方便。线的运动形态数据b不变。
http://myweb.polyu.edu.hk/~tcguohf/a.rar

请lengyunfeng一定帮忙,下周一要见老板,完不成任务要挨批的。

谢谢
回复 不支持

使用道具 举报

发表于 2010-7-16 22:51:52 | 显示全部楼层 来自 北京
4# guohf
问题一,试了一下你的数据,如果把a完全画出来非常卡,而且感觉数据重复性太大,感觉你的流场是非常规则的,提供这么多数据反而影响效果,我倒建议你把是数据规模降低,比如压缩10倍,或者只取前2000个数据,对你的数据不熟悉,只能这样大概建议。

评分

2

查看全部评分

回复 不支持

使用道具 举报

 楼主| 发表于 2010-7-17 09:38:59 | 显示全部楼层 来自 香港
9# guocong89

谢谢。

我的数据是比较大,是用FLUENT流体软件算的,网格是非结构的,比较密。好象无法结数据进行压缩。不过先问个外行话,如果我只想要xy, xz, yz方向的投影(主要是把实物“线”形态考虑进去),那我能不能先取出其剖面流场数据,再和“线”的投影叠加。这样可把数据减少,但“线”是一个细长形物,就不知道该取流场的哪一个横纵剖面,可以和“线”的投影相对应????
回复 不支持

使用道具 举报

发表于 2010-7-19 19:27:38 | 显示全部楼层 来自 四川成都
8# guohf

sorry,前两天出差了,没上网。
1)要在quiver3中改变矢量的大小是一件很简单的事,你只需要用quiver3(x,y,z,u,v,w,s)命令就OK,这里的x,y,z,u,v,w就对应着前面我写的命令里的a(:,1)~a(:,6),而这里的s是一个标量,用来表示对(u,v,w)矢量的放大倍数,0表示不进行缩放,1表示放大一倍,以此类推。不过个人觉得这样画出来的图形也不好看,因为你的数据间隔过小且数据量过大。不过9#提出的办法倒是不错,可以考虑对数据进行压缩,当然这种压缩不是你所理解的压缩,而是考虑采用定距取x,y,z,u,v,w数据进行绘图,以减小数据量。至以间距是多少,你可以根据自己的数据进行考虑,不过我建议你考虑一下用gradient函数来找到流场矢量变化大的地方,在这种地方适当加大数据个数,在变化较小的地方减小数据量个数。
2)view(0,0)看的是xoz平面上的投影,而view(90,0)看的是yoz平面上的投影。这种问题比较简单,建议lz再碰到这种问题的时候用一下doc命令,比你在那等别人的答案要快得多。
3)用streamline命令应该能解决你的问题,命令可以用
streamline(x,y,z,u,v,w,xstart,ystart,zstart)
其中x,y,z,u,v,w表示的是我写的命令里的a(:,1)~a(:,6),而(xstart,ystart,zstart)表示的是你的流线起始点。这里的起始点用哪个,要求对你的数据物理背景有一定的理解程度才能判定出来,所以我也没办法,自已再想想吧。

评分

2

查看全部评分

回复 不支持

使用道具 举报

 楼主| 发表于 2010-7-20 15:22:10 | 显示全部楼层 来自 香港
11# lengyunfeng

非常感谢。我再学习一下各种命令,有问题再请教。谢了
回复 不支持

使用道具 举报

发表于 2010-7-22 10:05:40 | 显示全部楼层 来自 新疆乌鲁木齐
也许cfd的流场图可以尝试使用tecplot 360画画看...这个好像是CFD专门的可视化软件。

评分

1

查看全部评分

回复 不支持

使用道具 举报

 楼主| 发表于 2010-7-23 10:14:26 | 显示全部楼层 来自 香港
13# bainhome

问题是要把“线”叠加进去,“线”运动是用MATLAB编程算的,所以得编程。
回复 不支持

使用道具 举报

发表于 2010-7-23 12:46:17 | 显示全部楼层 来自 新疆乌鲁木齐
本帖最后由 bainhome 于 2010-7-23 14:59 编辑

个人不大懂CFD,简单看了看你提供的数据,又翻了翻流场绘制的系列命令,提供参考建议如下:
1.stream2也好,stream3,其实让人迷惑的都是对volume data数据的理解——调用命令中的X,Y,Z,U,V,W是什么含义,帮助文件中提供的wind数据是一个三维数据(35行×41列×15层),但是你用cfd给出的基本数据是个n×6的二维数据,所以需要根据你的专业知识先判断数据本身的对应关系,关于wind这组数据的讲解,可以参考3D可视化帮助中的“Visualizing Vector Volume Data”部分,它讲解了这组数据初始点、风速的含义,应与你的a.mat相应对照,这个事情谁也帮不了,只能您自己去看。
2.quiver3数据太密可以通过meshgrid网格点疏密进行调整,这种一万多行的数据,肯定是要处理处理的,否则MATLAB在一般机器上跑起来很可能画不出来。
3.有了数据的含义,建议用streamslice先画画看,另外,上面lengyunfeng同学对于streamline的调用或许有些偏差——它的x,y,u,v等数据是三维或者二维数据,应该不是"a(:,1)"这样的向量。
这是我的理解,未必准确,仅供参考。

评分

2

查看全部评分

回复 不支持

使用道具 举报

发表于 2010-7-23 18:55:03 | 显示全部楼层 来自 四川成都
唉,学艺不精啊~~~对不住lz了!刚才把你网盘上的数据下了下来,粗粗的编了个程序,个人觉得理论上没问题,可出来的图形却只能显示你的线形态b,流线却显示不出来,我把figure2的线形态b绘制语句给注释掉了,出来的流线却异常奇怪,看上去全是蓝点。我又试了试改变(xstart,ystart,zstart)(代码中给出的为一个垂直于z轴的平面),出来的也还是蓝点。唉,无语了,可能是我的代码或者思路真的有问题吧,贴出来大家参考一下,也好做个前车之鉴。
  1. clear all;clc;clf;close all
  2. load a a;
  3. b=[-0.0001   -0.0009    0.0100
  4.    -0.0000   -0.0009    0.0103
  5.     0.0001   -0.0009    0.0105
  6.     0.0001   -0.0009    0.0108
  7.     0.0002   -0.0009    0.0110
  8.     0.0003   -0.0009    0.0113
  9.     0.0003   -0.0009    0.0115
  10.     0.0004   -0.0009    0.0118
  11.     0.0005   -0.0008    0.0120
  12.     0.0005   -0.0008    0.0123
  13.     0.0006   -0.0007    0.0126
  14.     0.0007   -0.0007    0.0128];
  15. a1=a((a(:,3)>=min(b(:,3)))&(a(:,3)<=max(b(:,3))),:);
  16. clear a;
  17. a1=sort(a1,1);
  18. clear a;
  19. warning off all
  20. b1=a1(logical(diff(a1(:,1))),:);
  21. b2=b1(logical(diff(b1(:,2))),:);
  22. b3=b2(logical(diff(b2(:,3))),:);
  23. a2=b3(floor(linspace(1,length(b3),100)),:);
  24. clear a1 b1 b2 b3;
  25. zmin=min(a2(:,3));
  26. [ax,ay,az]=meshgrid(a2(:,1),a2(:,2),a2(:,3));
  27. [u,v,w]=meshgrid(a2(:,4),a2(:,5),a2(:,6));
  28. [sx,sy,sz]=meshgrid(linspace(min(a2(1:length(a2),1)),max(a2(1:length(a2),1)),20),linspace(min(a2(1:length(a2),2)),max(a2(1:length(a2),2)),20),zmin);
  29. figure(1)%xoz平面投影
  30. h=streamline(ax,ay,az,u,v,w,sx,sy,sz);
  31. set(h,'color','b','linewidth',2);
  32. hold on
  33. plot3(b(:,1),b(:,2),b(:,3),'r');
  34. view(0,0);
  35. figure(2)%yoz平面投影
  36. h=streamline(ax,ay,az,u,v,w,sx,sy,sz);
  37. set(h,'color','b','linewidth',2);
  38. hold on
  39. %plot3(b(:,1),b(:,2),b(:,3),'r');
  40. view(90,0);
复制代码

评分

1

查看全部评分

回复 不支持

使用道具 举报

 楼主| 发表于 2010-7-26 09:55:06 | 显示全部楼层 来自 香港
13# lengyunfeng

谢谢关心和帮忙。:) :victory:

我在振动论坛里ChaChing 已帮我解决了流场问题,用的streamslice,不过我叠加线形态b,流线也显示不出来,后来觉得是两个的投影方向问题,最后能显示出来,但xz向不是我想要的水平图,而是垂直向上的图。
http://www.chinavib.com/forum/thread-93946-1-1.html

因为我的数据太大,三维的有点死机似的,太慢,最重要的是我没搞清FLUENT划分网格的原理,保存不出streamline所需要的数据格式,如果能,就不用meshgrid了,可节省内存。我现在的方法是在FLUENT里直接保存出二维切片流场再和线形态叠加,还在搞,已有点眉目了

再次表示感谢!!!

评分

1

查看全部评分

回复 不支持

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|小黑屋|联系我们|仿真互动网 ( 京ICP备15048925号-7 )

GMT+8, 2024-5-2 17:18 , Processed in 0.072438 second(s), 14 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表