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

[已解决]【高手指点】如何通过matlab画出这样的球面等高线图

[复制链接]
发表于 2011-8-4 08:08:12 | 显示全部楼层 |阅读模式 来自 安徽合肥
本帖最后由 nizp1982 于 2011-8-11 12:08 编辑

就是在球面画三维等高线,如附件中图片所示,请高手指点,不胜感激!

本帖子中包含更多资源

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

×
 楼主| 发表于 2011-8-4 10:26:06 | 显示全部楼层 来自 安徽合肥
Simdroid开发平台
是不是我没表达清楚,呵呵!请高手帮忙,谢谢,非常着急
回复 不支持

使用道具 举报

发表于 2011-8-5 14:05:56 | 显示全部楼层 来自 台湾
不知这合用否!?
3D Plot on a Spherical Surface
http://www.mathworks.com/matlabc ... a-spherical-surface

评分

1

查看全部评分

回复 不支持

使用道具 举报

 楼主| 发表于 2011-8-5 14:22:36 | 显示全部楼层 来自 安徽合肥
这个似乎不行,呵呵,谢谢
回复 不支持

使用道具 举报

发表于 2011-8-6 10:39:55 | 显示全部楼层 来自 山东烟台
可以把数据发上来  大家看看
回复 不支持

使用道具 举报

 楼主| 发表于 2011-8-8 08:30:52 | 显示全部楼层 来自 安徽合肥
数据很简单的吧,可以将球面按照经纬度网格划分,然后给出每节点出得数值,给出一个参考值,然后计算每点的偏差,画出等高线图即可
回复 不支持

使用道具 举报

发表于 2011-8-9 15:20:12 | 显示全部楼层 来自 山东烟台
这个问题看似简单,要实现我觉得难度不小,matlab提供的工具中没有可用于曲面等值线绘制的。
转换一下思路不知可否,我们每次能看到的只是一个平面图,我们只需要把这个平面图以及其上等值线绘制出来即可,以下是代码:
  1. clear
  2. clc;r=1;a1=0;a2=2*pi;b1=-pi/2;b2=pi/2;n1=40;n2=40;
  3. [u,v]=meshgrid(linspace(a1,a2,n1),linspace(b1,b2,n2));
  4. x=r*sin(v).*cos(u);y=r*sin(v).*sin(u);z=r*cos(v);
  5. data=x.^4+2.^y;
  6. pcolor(x,y,data)
  7. shading interp

  8. hold on,[c,h]=contour(x,y,data,[0.8 1 1.2 1.4 1.6 1.8],'linecolor','c','linewidth',1.5);
  9. clabel(c,h,'manual','fontsize',10)
复制代码

本帖子中包含更多资源

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

×

评分

1

查看全部评分

回复 不支持

使用道具 举报

发表于 2011-8-9 16:48:32 | 显示全部楼层 来自 山东烟台
还可以利用colormap来实现,不过此时不是很灵活,并且等值线上没有文本
  1. [x,y,z]=sphere(100);
  2. data=y+x.*z;
  3. h=surf(x,y,z,'cdata',data,'facecolor','interp','facelighting','phong','edgecolor','none')
  4. light('position',[0 1 0])
  5. colormap(jet(10))
复制代码

本帖子中包含更多资源

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

×
回复 不支持

使用道具 举报

发表于 2011-8-9 16:50:26 | 显示全部楼层 来自 广东广州
首先,这个思路很好,称赞一下。不过,仔细观察 lz 的那个原图,尤其是顶部的等值线,可以看出,lz 的那个图是三维等值线在二维平面的投影。

这个问题看似简单,要实现我觉得难度不小,matlab提供的工具中没有可用于曲面等值线绘制的。
转换一下思路 ...
liuyalong008 发表于 2011-8-9 15:20
回复 不支持

使用道具 举报

 楼主| 发表于 2011-8-10 17:48:21 | 显示全部楼层 来自 北京
谢谢大家,这几天比较忙,没来得及感谢大家的帮忙!我那个图现在知道是用tecplot软件做出来的,但是我还没弄明白如何将matlab中的数据导入tecplot中,希望大家继续关注,谢谢
回复 不支持

使用道具 举报

 楼主| 发表于 2011-8-10 17:51:02 | 显示全部楼层 来自 北京
还有就是这个图是三维的,是可以三维旋转显示的,谢谢
回复 不支持

使用道具 举报

 楼主| 发表于 2011-8-10 17:58:58 | 显示全部楼层 来自 北京
可以画出三维分布图,但是就是不清楚如何画三维等高线图
r=0.2;
mt=100;nt=200;
theta=linspace(0,pi,mt);
phi=linspace(0,2*pi,nt);
xt=r*sin(theta)'*cos(phi);
yt=r*sin(theta)'*sin(phi);
zt=r*cos(theta)'*ones(1,nt);


figure
B_Z1=0.01*zt;
h=surf(xt,yt,zt,B_Z1);
% colormap hsv
xlabel('x/m')
ylabel('y/m')
zlabel('z/m')
title('a10(Z)')
set(h,'FaceColor','interp','EdgeColor','none')
colorbar
camlight;

本帖子中包含更多资源

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

×
回复 不支持

使用道具 举报

发表于 2011-8-10 19:03:17 | 显示全部楼层 来自 江苏无锡
本帖最后由 scott198510 于 2011-8-10 19:04 编辑

回复 12# nizp1982

这个也是三维球形图,不过与你的要求还是差一点

clf;
[X,Y,Z]=sphere(40);
colormap(jet)                 %<3>
subplot(1,2,1);surf(X,Y,Z);shading interp       %<4>
light ('position',[2,-2,2],'style','local')       %<5>
lighting  phong               %<6>
material([0.5,0.3,0.5,10,0.5])          %<7>
subplot(1,2,2);surf(X,Y,Z,-Z);shading flat       %<8>
light;lighting flat              %<9>
light('position',[-1,-1,-2],'color','y')       %<10>
light('position',[-1,0.5,1],'style','local','color','w')    %<11>
material([0.4,0.5,0.3,10,0.3])          %<12>

本帖子中包含更多资源

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

×

评分

1

查看全部评分

回复 不支持

使用道具 举报

发表于 2011-8-10 19:23:30 | 显示全部楼层 来自 江苏无锡
本帖最后由 scott198510 于 2011-8-10 19:28 编辑

回复 12# nizp1982
这个是1/2的球面等高线,是把x,y,z方向等高线分别画出来,
希望能对你有所启发,和你的要求还是有点差距

theta=0:0.1:(2*pi);phi=0:0.1:(2*pi);
n=max(size(theta));
for i=1:n
    for j=1:n
        x(i,j)=cos(theta(j))*sin(phi(i));
        y(i,j)=sin(theta(j))*sin(phi(i));
        z(i,j)=(1-x(i,j).^2-y(i,j).^2).^0.5;
    end
end
figure;surface(x,y,z);
view(60,30)
xlabel('x');ylabel('y');zlabel('z');
axis equal

%z方向等高线
figure;contour3(x,y,z,30);
view(60,30)
xlabel('x');ylabel('y');zlabel('z');
axis equal

%x方向等高线
figure;surface(y,z,x);
contour3(y,z,x,30);
xlabel('y');ylabel('z');zlabel('x');
axis equal
%y方向等高线
figure;surface(z,x,y);
contour3(z,x,y,30);
xlabel('z');ylabel('x');zlabel('y');
axis equal
set(gcf,'color','w')

本帖子中包含更多资源

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

×

评分

1

查看全部评分

回复 不支持

使用道具 举报

 楼主| 发表于 2011-8-10 20:44:43 | 显示全部楼层 来自 北京
如果有知道如何将这样的数据导入tecplot中画图的,请不吝赐教!最好就是通过matlab能直接作出,谢谢
回复 不支持

使用道具 举报

 楼主| 发表于 2011-8-11 11:50:10 | 显示全部楼层 来自 北京
请大家同样关注下这个讨论,谢谢
http://forum.simwe.com/thread-997516-1-1.html
回复 不支持

使用道具 举报

 楼主| 发表于 2011-8-11 12:09:53 | 显示全部楼层 来自 北京
问题已经解决,谢谢大家关注。解决方法通过tecplot软件,如果大家知道如果通过matlab解决,请赐教,谢谢,QQ24911093,非常感谢

解决结果,见http://forum.simwe.com/thread-997516-1-1.html

评分

1

查看全部评分

回复 不支持

使用道具 举报

发表于 2011-8-12 04:15:28 | 显示全部楼层 来自 英国
试了一下发现MATLAB也可以画,但是毕竟不如TECPLOT方便,而且由于个人水平所限图像效果看起来也没有那么专业。
我用的土方法是surf画出基本图像,然后参考contourc的算法(DOC文件里面 ‘the contouring algorithm’ 部分有描述)取出对应每个结果值的x,y,z点,然后画线。
所用到contourc的相关算法不算复杂。主要是找出相关的边,然后用定比分点公式来插值。这属于直接的矩阵操作,连循环都不需要。



本帖子中包含更多资源

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

×
回复 不支持

使用道具 举报

 楼主| 发表于 2011-8-12 08:44:09 | 显示全部楼层 来自 北京
to nwcwww:
能将程序代码发我看看吗,谢谢,Q24911093,
回复 不支持

使用道具 举报

发表于 2011-8-12 12:05:01 | 显示全部楼层 来自 山东烟台
试了一下发现MATLAB也可以画,但是毕竟不如TECPLOT方便,而且由于个人水平所限图像效果看起来也没有那么专业 ...
nwcwww 发表于 2011-8-12 04:15


您好,xy可以直接用contourc的出来,请教一下z是怎么计算的?可否上代码?
回复 不支持

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-3-29 20:08 , Processed in 0.082916 second(s), 22 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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