MATLAB - imagesc()用法

时间:2011-11-09 09:04:51

标签: matlab

我想要绘制三个球面坐标函数。它们是r,theta,phi的函数,我想在x-y,y-z,x-z平面中查看它们。我已经尝试了8个小时完成这个。我试过的每一种方法都没有成功。

我怎样才能完成这个非常简单的任务?

F1 = (r.^2).*abs((1/(8*sqrt(pi))).*r.*exp(-r/2).*sin(theta).*cos(phi)).^2;
F2 = (r.^2).*abs((1/(8*sqrt(pi))).*r.*exp(-r/2).*sin(theta).*sin(phi)).^2;
F3 = (r.^2).*abs((1/(4*sqrt(2*pi))).*r.*exp(-r/2).*cos(theta)).^2;

如您所见,所有三个函数都是F(r,theta,phi)。这意味着有四个维度:F,r,theta,phi。

1 个答案:

答案 0 :(得分:2)

如果你的函数不能表示为r = f(theta,phi),也许你可以计算网格上f(theta,phi,r)的值,然后绘制一个等值面,其中你的体积数据等于你的值2Px

我尝试了这个小例子,你可以从中扩展,但我不知道形状是否正确,因为我不知道会发生什么:

n=20;
rmax=5;
twoPx=0;
%%%%%%%%%%
[theta phi r]=ndgrid(linspace(0,2*pi,n),linspace(-pi/2,pi/2,n),linspace(0,rmax,n));
%%%%%%%%%%
value=(r.^2).*abs((1/(8*sqrt(pi))).*r.*exp(-r/2).*sin(theta).*cos(phi)).^2;
%%%%%%%%%%
[x y z]=sph2cart(theta,phi,r);
%%%%%%%%%%
p=patch(isosurface(x,y,z,value,twoPx));
%%%%%%%%%%
set(p,'FaceColor','b','EdgeColor','k','FaceAlpha',0.5);
daspect([1 1 1])
axis square;
grid on;
camlight;
view([0 0]);

对此代码段的作用的一点解释:

  1. 定义球形网格(ndgrid
  2. 计算您的函数在该网格上的值
  3. 计算与球形网格(sph2cart
  4. 对应的笛卡尔网格
  5. 绘制等值面,其中您的音量等于2Px(patchisosurface
  6. 最后,您可能希望使用Matlab函数view来指定要查看的平面。