2016-08-23 5 views
0

Matlab에서 구형 좌표계를 그려야합니다.Matlab에서 구면 좌표계 플로팅

이것은 내가 원하는 이미지의 종류는 만드는 것입니다 :

This is what I'd like to create in matlab.

은 누군가가 나에게 몇 가지 힌트를 줄 수 있을까?

다음

내가 나 자신을 시도한 것입니다 (지금까지 나는 데카르트 좌표를 그려했습니다) :

hold on 
x0=0; 
y0=0; 
z0=0; 

plot3(x0+[0, 1, nan, 0, 0, nan, 0, 0], y0+[0, 0, nan, 0, 1, nan, 0, 0], z0+[0, 0, nan, 0, 0, nan, 0, 1])  
text([x0+1, x0, x0], [y0, y0+1, y0], [z0, z0, z0+1], ['X';'Y';'Z']); 

r=0.5; 
[x,y,z] = sphere(100); 
hsurf = surf(x*r, y*r, z*r); 
axis equal; 
+1

힌트 : 구면 좌표에서 직교 변환 행렬을 생성 및 직교 것들을 플롯. 묻는 질문에 대한 힌트 : 당신이 실제로 시도한 것을 알기 위해 [mcve]에 코드와 함께 자신이 시도한 것을 더 많이 나열하십시오. 이 경우에 도움이 될 가능성이 훨씬 큽니다. – Adriaan

+0

감사합니다. 지금까지 관리했던 것을 추가했습니다. =) 힌트를 생각하고 내가 얻은 것을 게시 할 것입니다. – lily23

답변

0
function[]=SphereToCartesian(r,theta,phi) 
%% plot cartesian coordinates: 
plot3([0 0 0;r 0 0],[0 0 0;0 r 0],[0 0 0;0 0 r],'k'); 

%% plot the ball 
line('xdata',sphcart(r,theta,phi,'x'),'ydata',sphcart(r,theta,phi,'y'),'zdata',sphcart(r,theta,phi,'z'),'marker','.','markersize',5); 

%% Plot the arm 
line('xdata',[0 sphcart(r,theta,phi,'x')],'ydata',[0 sphcart(r,theta,phi,'y')],'zdata',[0 sphcart(r,theta,phi,'z')],'linestyle','--'); 

%% Plot the projections 
line('xdata',[0 sphcart(r,theta,phi,'x')],'ydata',[0 sphcart(r,theta,phi,'y')],'zdata',[0 0],'linestyle','--'); 

%% Plot the arcs 
thetas=[0:0.1:theta theta]; 
line('xdata',sphcart(.1*r,thetas,phi,'x'),'ydata', sphcart(.1*r,thetas,phi,'y'),'zdata',sphcart(.1*r,thetas,phi,'z')); 

%% Labels 
text(sphcart(r,theta,phi,'x'),sphcart(r,theta,phi,'y'),sphcart(r,theta,phi,'z'),'r (x,y,z)') 

%% transform 
function[OUT]=sphcart(R,THETA,PHI,COORD) 
    if strcmpi(COORD,'x') 
    OUT=R.*cos(THETA).*cos(PHI); 
    elseif strcmpi(COORD,'y') 
    OUT=R.*cos(THETA).*sin(PHI); 
    elseif strcmpi(COORD,'z') 
    OUT=R.*sin(THETA) 
    else 
    disp('Wrong coordinate!'); 
    OUT=nan; 
    end 
end 
end 

나머지는 당신이 axesfigure 속성을 사용 할 수 있습니다.

+0

위대한 답변, 감사합니다! 이 함수를 사용할 때 '호를 그리는'섹션이 작동하지 않고 "다음 속성 중 하나 이상의 값에 오류가 있습니다. XData ZData 배열의 모양이나 크기가 잘못되었습니다." 이 문제가 있었습니까? 아니면 당신을 위해 호를 그릴 계획 이었나요? – lily23

+0

Matlab 2013b에서 시도해 보았습니다. 당신의'theta'와'phi' 각도는 라디안입니까? – Crowley

+0

라디안을 사용하고있었습니다. Matlab 2013b로 전환했는데 오류 메시지가 다음과 같이 표시됩니다. "경고 : XData 길이 (9), YData 길이 (9) 및 ZData 길이 (1)이 같아야합니다." 아크 플로팅이 일어나고 있습니다. 나는 r = 1, phi = pi/4, theta = pi/4를 사용했다. – lily23

0

나는 이제는 내게 도움이되는 대답 덕분에 무언가를 만들었습니다. 나는 호를 그릴 때 약간 다른 방법을 사용했다. 여기

hold on 
r =1; 
phi = pi/4; 
theta = pi/4; 

%% plot cartesian coordinates: 
x0=0; 
y0=0; 
z0=0; 

plot3(x0+[0, .8, nan, 0, 0, nan, 0, 0], y0+[0, 0, nan, 0, .8, nan, 0, 0], z0+[0, 0, nan, 0, 0, nan, 0, .8],'k')  
text([x0+.85, x0, x0], [y0, y0+.8, y0], [z0, z0, z0+.85], ['$x$';'$y$';'$z$'],'FontSize',14, 'Interpreter','latex'); 
%% plot the ball 
line('xdata',sphcart(r,theta,phi,'x'),'ydata',sphcart(r,theta,phi,'y'),'zdata',sphcart(r,theta,phi,'z'),'marker','.','markersize',5); 

%% Plot the arm 
line('xdata',[0 sphcart(r,theta,phi,'x')],'ydata',[0 sphcart(r,theta,phi,'y')],'zdata',[0 sphcart(r,theta,phi,'z')]); 

%% Plot the projections 
line('xdata',[0 sphcart(r,theta,phi,'x')],'ydata',[0 sphcart(r,theta,phi,'y')],'zdata',[0 0],'linestyle','--'); 

%% Line from xy plane to point 
line('xdata',[sphcart(r,theta,phi,'x') sphcart(r,theta,phi,'x')],'ydata',[sphcart(r,theta,phi,'y') sphcart(r,theta,phi,'y')],'zdata',[0 sphcart(r,theta,phi,'z')],'linestyle','--') 

%% label r 
text(.5,.5,.8,'$r$','FontSize',14, 'Interpreter','latex') 

%% change view point 
az = 100; 
el = 45; 
view(az,el) 

%% get rid of axis labels 
set(gca, 'XTick', [], 'YTick', [], 'ZTick', []) 
set(gca, 'xcolor', 'w', 'ycolor', 'w','zcolor', 'w') ; 
%% arc (xy) 
theta = [0: pi/4*0.0001 :pi/4]; 
phi = linspace(0,0,10001); 
r = linspace(0.25,0.25,10001); 

[X,Y,Z]=sph2cart(theta,phi,r); 

plot3(X,Y,Z,'Color','k'); 

% label arc 
text(.3,0.08,0,'$\theta$','FontSize',14,'Interpreter','latex') 

%% arc down from z 
phi = [pi/4: pi/4*0.0001 :pi/2]; 
theta = linspace(pi/4,pi/4,10001); 
r = linspace(0.25,0.25,10001); 
[X,Y,Z]=sph2cart(theta,phi,r); 

plot3(X,Y,Z,'Color','k'); 

% label arc 
text(.1,.08,0.4,'$\phi$','FontSize',14,'Interpreter','latex') 

플롯이다 enter image description here