nizp1982 发表于 2011-8-4 08:08:12

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

本帖最后由 nizp1982 于 2011-8-11 12:08 编辑

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

nizp1982 发表于 2011-8-4 10:26:06

是不是我没表达清楚,呵呵!请高手帮忙,谢谢,非常着急

ChaChing 发表于 2011-8-5 14:05:56

不知这合用否!?
3D Plot on a Spherical Surface
http://www.mathworks.com/matlabcentral/fileexchange/8585-3d-plot-on-a-spherical-surface

nizp1982 发表于 2011-8-5 14:22:36

这个似乎不行,呵呵,谢谢

liuyalong008 发表于 2011-8-6 10:39:55

可以把数据发上来大家看看

nizp1982 发表于 2011-8-8 08:30:52

数据很简单的吧,可以将球面按照经纬度网格划分,然后给出每节点出得数值,给出一个参考值,然后计算每点的偏差,画出等高线图即可

liuyalong008 发表于 2011-8-9 15:20:12

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

hold on,=contour(x,y,data,,'linecolor','c','linewidth',1.5);
clabel(c,h,'manual','fontsize',10)

liuyalong008 发表于 2011-8-9 16:48:32

还可以利用colormap来实现,不过此时不是很灵活,并且等值线上没有文本=sphere(100);
data=y+x.*z;
h=surf(x,y,z,'cdata',data,'facecolor','interp','facelighting','phong','edgecolor','none')
light('position',)
colormap(jet(10))

messenger 发表于 2011-8-9 16:50:26

首先,这个思路很好,称赞一下。不过,仔细观察 lz 的那个原图,尤其是顶部的等值线,可以看出,lz 的那个图是三维等值线在二维平面的投影。

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

nizp1982 发表于 2011-8-10 17:48:21

谢谢大家,这几天比较忙,没来得及感谢大家的帮忙!我那个图现在知道是用tecplot软件做出来的,但是我还没弄明白如何将matlab中的数据导入tecplot中,希望大家继续关注,谢谢

nizp1982 发表于 2011-8-10 17:51:02

还有就是这个图是三维的,是可以三维旋转显示的,谢谢

nizp1982 发表于 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;

scott198510 发表于 2011-8-10 19:03:17

本帖最后由 scott198510 于 2011-8-10 19:04 编辑

回复 12# nizp1982

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

clf;
=sphere(40);
colormap(jet)               %<3>
subplot(1,2,1);surf(X,Y,Z);shading interp       %<4>
light ('position',,'style','local')       %<5>
lightingphong               %<6>
material()          %<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()          %<12>

scott198510 发表于 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')

nizp1982 发表于 2011-8-10 20:44:43

如果有知道如何将这样的数据导入tecplot中画图的,请不吝赐教!最好就是通过matlab能直接作出,谢谢

nizp1982 发表于 2011-8-11 11:50:10

请大家同样关注下这个讨论,谢谢
http://forum.simwe.com/thread-997516-1-1.html

nizp1982 发表于 2011-8-11 12:09:53

问题已经解决,谢谢大家关注。解决方法通过tecplot软件,如果大家知道如果通过matlab解决,请赐教,谢谢,QQ24911093,非常感谢

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

nwcwww 发表于 2011-8-12 04:15:28

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



nizp1982 发表于 2011-8-12 08:44:09

to nwcwww:
能将程序代码发我看看吗,谢谢,Q24911093,

liuyalong008 发表于 2011-8-12 12:05:01

试了一下发现MATLAB也可以画,但是毕竟不如TECPLOT方便,而且由于个人水平所限图像效果看起来也没有那么专业 ...
nwcwww 发表于 2011-8-12 04:15 http://forum.simwe.com/images/common/back.gif

您好,xy可以直接用contourc的出来,请教一下z是怎么计算的?可否上代码?
页: [1] 2
查看完整版本: [已解决]【高手指点】如何通过matlab画出这样的球面等高线图