MATLAB - использование imagesc () - PullRequest
1 голос
/ 09 ноября 2011

У меня есть три функции в сферических координатах, которые я хочу построить. Они являются функциями от 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, тета, фи.

1 Ответ

2 голосов
/ 09 ноября 2011

Если ваши функции не могут быть выражены как 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]);

Небольшое объяснение того, что делает этот фрагмент:

  1. определить сферическую сетку (ndgrid)
  2. вычислить значение вашей функции в этой сетке
  3. вычислить декартову сетку, соответствующую сферической сетке (sph2cart)
  4. построите изоповерхность, где ваш объем равен двум пикселям (patch и isosurface)

Наконец, вы можете использовать функцию Matlab view, чтобы указать, с какой плоскости вы хотите смотреть.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...