Если ваши функции не могут быть выражены как r = f (тэта, фи), возможно, вы можете вычислить значение f (тэта, фи, r) по сетке и затем построить изоповерхность, где ваши объемные данные равны вашему значению twoPx .
Я попробовал этот небольшой пример, из которого вы можете расширить, но я не знаю, правильная ли форма, потому что я не знаю, чего ожидать:
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]);
Небольшое объяснение того, что делает этот фрагмент:
- определить сферическую сетку (
ndgrid
)
- вычислить значение вашей функции в этой сетке
- вычислить декартову сетку, соответствующую сферической сетке (
sph2cart
)
- построите изоповерхность, где ваш объем равен двум пикселям (
patch
и isosurface
)
Наконец, вы можете использовать функцию Matlab view
, чтобы указать, с какой плоскости вы хотите смотреть.