[已解决]【高手指点】如何通过matlab画出这样的球面等高线图
本帖最后由 nizp1982 于 2011-8-11 12:08 编辑就是在球面画三维等高线,如附件中图片所示,请高手指点,不胜感激! 是不是我没表达清楚,呵呵!请高手帮忙,谢谢,非常着急 不知这合用否!?
3D Plot on a Spherical Surface
http://www.mathworks.com/matlabcentral/fileexchange/8585-3d-plot-on-a-spherical-surface 这个似乎不行,呵呵,谢谢 可以把数据发上来大家看看 数据很简单的吧,可以将球面按照经纬度网格划分,然后给出每节点出得数值,给出一个参考值,然后计算每点的偏差,画出等高线图即可 这个问题看似简单,要实现我觉得难度不小,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) 还可以利用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)) 首先,这个思路很好,称赞一下。不过,仔细观察 lz 的那个原图,尤其是顶部的等值线,可以看出,lz 的那个图是三维等值线在二维平面的投影。
这个问题看似简单,要实现我觉得难度不小,matlab提供的工具中没有可用于曲面等值线绘制的。
转换一下思路 ...
liuyalong008 发表于 2011-8-9 15:20 http://forum.simwe.com/images/common/back.gif 谢谢大家,这几天比较忙,没来得及感谢大家的帮忙!我那个图现在知道是用tecplot软件做出来的,但是我还没弄明白如何将matlab中的数据导入tecplot中,希望大家继续关注,谢谢 还有就是这个图是三维的,是可以三维旋转显示的,谢谢 可以画出三维分布图,但是就是不清楚如何画三维等高线图
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: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: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') 如果有知道如何将这样的数据导入tecplot中画图的,请不吝赐教!最好就是通过matlab能直接作出,谢谢 请大家同样关注下这个讨论,谢谢
http://forum.simwe.com/thread-997516-1-1.html 问题已经解决,谢谢大家关注。解决方法通过tecplot软件,如果大家知道如果通过matlab解决,请赐教,谢谢,QQ24911093,非常感谢
解决结果,见http://forum.simwe.com/thread-997516-1-1.html 试了一下发现MATLAB也可以画,但是毕竟不如TECPLOT方便,而且由于个人水平所限图像效果看起来也没有那么专业。
我用的土方法是surf画出基本图像,然后参考contourc的算法(DOC文件里面 ‘the contouring algorithm’ 部分有描述)取出对应每个结果值的x,y,z点,然后画线。
所用到contourc的相关算法不算复杂。主要是找出相关的边,然后用定比分点公式来插值。这属于直接的矩阵操作,连循环都不需要。
to nwcwww:
能将程序代码发我看看吗,谢谢,Q24911093, 试了一下发现MATLAB也可以画,但是毕竟不如TECPLOT方便,而且由于个人水平所限图像效果看起来也没有那么专业 ...
nwcwww 发表于 2011-8-12 04:15 http://forum.simwe.com/images/common/back.gif
您好,xy可以直接用contourc的出来,请教一下z是怎么计算的?可否上代码?
页:
[1]
2