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

在空间曲面上画等值线

[复制链接]
发表于 2013-1-3 20:21:57 | 显示全部楼层 |阅读模式 来自 天津
偶然间看到,觉得有意思,希望共同讨论
目的是拓展matlab可视化的应用

如何把空间的数值其在某个面上的等值线给画出来
具体见代码:
  1. figure
  2. [x,y,z]=meshgrid(-10:0.2:10);
  3. p=-z +3*(1-x).^2.*exp(-(x.^2) - (y+1).^2) ...
  4. - 10*(x/5 - x.^3 - y.^5).*exp(-x.^2-y.^2) ...
  5. - 1/3*exp(-(x+1).^2 - y.^2);
  6. %[xi,yi,zi]=sphere(80);
  7. [xi, yi, zi] = ellipsoid(0,0,0,5.9,3.25,3.25,30);
  8. [xi,yi]=meshgrid(-10:.1:10);
  9. zi=exp(sin(xi)+cos(yi));
  10. h1=slice(x,y,z,p,xi,yi,zi);
  11. hold on
  12. h2=contourslice(x,y,z,p,xi,yi,zi,[6]); %绘制六条等值线
  13. %set(h1,'edgecolor','none','facecolor',[0.5 0.5 0.5],'facealpha',1)
  14. set(h1,'edgecolor','none','facealpha',1)
  15. arrayfun(@(i)set(h2(i),'edgecolor','r'),1:length(h2))

  16. axis equal
复制代码
但是还存在困惑,如何设置两套colormap来分别表示曲面和曲线

本帖子中包含更多资源

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

×

评分

1

查看全部评分

发表于 2013-1-5 15:35:55 | 显示全部楼层 来自 河北廊坊
Simdroid开发平台
恩,不错,要设置两套colormap,似乎是有点难度,因为
colormap(ax,...) uses the figure correspondingto axes ax instead of the current figure
colormap是针对ax
不过有空可以建立有个ax,重叠在一起,一个划线,一个画面,设置不同的ax

评分

1

查看全部评分

回复 不支持

使用道具 举报

 楼主| 发表于 2013-1-5 22:00:23 | 显示全部楼层 来自 天津
本帖最后由 liuyalong008 于 2013-1-5 22:04 编辑
qibbxxt 发表于 2013-1-5 15:35
恩,不错,要设置两套colormap,似乎是有点难度,因为
colormap(ax,...) uses the figure correspondingto  ...

感谢点拨
实际上在matlab中单个的figure中没法生成两个colormap
fileexchange中提供函数,但是还有个问题就是没法消隐
所以3D效果很差
  1. [x,y,z]=meshgrid(-10:0.2:10);
  2. p=-z +3*(1-x).^2.*exp(-(x.^2) - (y+1).^2) ...
  3. - 10*(x/5 - x.^3 - y.^5).*exp(-x.^2-y.^2) ...
  4. - 1/3*exp(-(x+1).^2 - y.^2);
  5. [xi,yi]=meshgrid(-10:.1:10);
  6. zi=exp(sin(xi)+cos(yi));
  7. figure
  8. h2=contourslice(x,y,z,p,xi,yi,zi,[6]); %绘制六条等值线
  9. H=gca;
  10. colormap(cool)
  11. freezeColors;
  12. hh=colorbar;
  13. set(H,'color','none')
  14. try cbfreeze(hh), catch,freezeColors(hh), end
  15. ax=axes
  16. h1=slice(x,y,z,p,xi,yi,zi);
  17. colormap(pink)
  18. freezeColors;
  19. h=colorbar;
  20. shading interp
  21. try cbfreeze(h), catch,freezeColors(h), end


  22. set(ax,'color','none')
  23. set(ax,'xlim',get(H,'xlim'))
  24. set(ax,'ylim',get(H,'ylim'))
  25. set(ax,'zlim',get(H,'zlim'))
  26. set(ax,'xtick',get(H,'xtick'))
  27. set(ax,'ytick',get(H,'ytick'))
  28. set(ax,'ztick',get(H,'ztick'))
  29. set(ax,'Projection',get(H,'Projection'))
  30. set(ax,'CameraViewAngle',get(H,'CameraViewAngle'))
  31. set(ax,'CameraPosition',get(H,'CameraPosition'))
  32. set(ax,'position',get(H,'position'))
  33. set(ax,'OuterPosition',get(H,'OuterPosition'))
  34. set(ax,'ALim',get(H,'ALim'))
  35. set(ax,'CameraPositionMode',get(H,'CameraPositionMode'))
  36. set(ax,'CameraViewAngleMode',get(H,'CameraViewAngleMode'))
  37. set(ax,'XLimMode',get(H,'XLimMode'))


  38. axes(ax)
  39. view(-43 ,46)
  40. axes(H)
  41. view(-43, 46)
复制代码

本帖子中包含更多资源

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

×
回复 不支持

使用道具 举报

发表于 2013-1-5 22:50:50 | 显示全部楼层 来自 英国
liuyalong008 发表于 2013-1-5 22:00
感谢点拨
实际上在matlab中单个的figure中没法生成两个colormap
fileexchange中提供函数,但是还有个问题 ...

试试这样:

  1. m=128;
  2. colormap([pink(m);jet(m)]);
  3. [x,y,z]=meshgrid(-10:0.2:10);
  4. p=-z +3*(1-x).^2.*exp(-(x.^2) - (y+1).^2) ...
  5. - 10*(x/5 - x.^3 - y.^5).*exp(-x.^2-y.^2) ...
  6. - 1/3*exp(-(x+1).^2 - y.^2);
  7. %[xi,yi,zi]=sphere(80);
  8. [xi, yi, zi] = ellipsoid(0,0,0,5.9,3.25,3.25,30);
  9. [xi,yi]=meshgrid(-10:.1:10);
  10. zi=exp(sin(xi)+cos(yi));
  11. h1=slice(x,y,z,p,xi,yi,zi);
  12. hold on
  13. %set(h1,'edgecolor','none','facecolor',[0.5 0.5 0.5],'facealpha',1)
  14. set(h1,'edgecolor','none','facealpha',1)
  15. axis equal
  16. c=get(h1,'cdata');
  17. cmin = min(c(:));
  18. cmax = max(c(:));
  19. C1 = min(m,round((m-1)*(c-cmin)/(cmax-cmin))+1);
  20. set(h1,'CData',C1);set(h1,'cdatamapping','direct');
  21. h2=contourslice(x,y,z,p,xi,yi,zi,[6]);
  22. arrayfun(@(i)set(h2(i),'cdata',min(m,round((m-1)*(get(h2(i),'cdata')-cmin)/(cmax-cmin))+1)+m),1:length(h2));
  23. arrayfun(@(i)set(h2(i),'cdatamapping','direct'),1:length(h2));
复制代码



本帖子中包含更多资源

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

×

评分

1

查看全部评分

回复 不支持

使用道具 举报

 楼主| 发表于 2013-1-6 22:46:16 | 显示全部楼层 来自 天津
nwcwww 发表于 2013-1-5 22:50
试试这样:

赞一个!
但就是colorbar的范围会变
回复 不支持

使用道具 举报

发表于 2013-1-7 00:12:53 | 显示全部楼层 来自 英国
本帖最后由 nwcwww 于 2013-1-7 00:16 编辑
liuyalong008 发表于 2013-1-6 22:46
赞一个!
但就是colorbar的范围会变

对。所以只好画两个colorbar,通过ylim调整来分别显示曲面和曲线的colormap, 并修改yticklabel。不过也不太麻烦就是了。
回复 不支持

使用道具 举报

发表于 2013-2-17 17:04:53 | 显示全部楼层 来自 上海
qibbxxt 发表于 2013-1-5 15:35
恩,不错,要设置两套colormap,似乎是有点难度,因为
colormap(ax,...) uses the figure correspondingto  ...

可以尝试用RGB代替索引图,这样可以实现不同色系的数据显示在同一个界面下。

评分

1

查看全部评分

回复 不支持

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-26 15:42 , Processed in 0.051198 second(s), 18 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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