2011-02-23 9 views
5

Używam MATLAB do wyświetlania danych 3D. Używam GUI do zmiany kąta widzenia, zoomu i panoramy. Jak mogę zapisać ten widok, a następnie zastosować go do innej figury (zawierającej mniej więcej te same dane)? view daje mi macierz, ale jak mogę zastosować to do innej figury?Sklep Widok 3D MATLAB

Wielkie dzięki!

Odpowiedz

5

Aby korzystać bieżący kąt widzenia na innym rysunku, można zrobić:

% call when the source axes is the current axes 
[az, el] = view; 
% call when the target axes is the current axes 
view (az, el); 

Albo, można zrobić to samo przy użyciu get i set nieruchomości view.

Jednak, aby zastosować wszystkie właściwości widoku, o których wspominałeś razem, łatwiej jest użyć wbudowanej opcji "generuj plik m" Matlaba - gdy masz figurę 3D w oczekiwany sposób, przejdź do: file ->Generate m-file , zostanie utworzony plik m, który pobierze dane 3D jako dane wejściowe i zastosuje ustawienia.

Inną opcją jest, aby zapisać te odpowiednie ustawienia siebie (tylko skontrolować m-plik wygenerowany):

plot3(sin(t),cos(t),t); 
pba = get(gca, 'PlotBoxAspectRatio'); 
dar = get(gca, 'DataAspectRatio'); 
cva = get(gca, 'CameraViewAngle'); 
cuv = get(gca, 'CameraUpVector'); 
ct = get(gca, 'CameraTarget'); 
cp = get(gca, 'CameraPosition'); 

a następnie zastosować je do aktualnych osi (zakładając, że cel osi jest obecny jeden):

set(gca, 'PlotBoxAspectRatio',pba); 
set(gca, 'DataAspectRatio',dar); 
set(gca, 'CameraViewAngle',cva); 
set(gca, 'CameraUpVector',cuv); 
set(gca, 'CameraTarget',ct); 
set(gca, 'CameraPosition',cp); 
2

Aby zapisać i zastosować widok, patrz Itamar's answer.

Do powiększania i kadrowania wystarczy przechowywać ograniczenia osi. Użyj xlim, ylim i zlim lub odpowiadających im właściwości osi (XLim itp.) Za pomocą polecenia get/set.

Dla obecnych osi limitom Store:

xl = xlim; 
yl = ylim; 
zl = zlim; 

Albo siekierami właściwości:

xl = get(gca,'XLim'); 

Aby zastosować do osi na innym rysunku:

xlim(new_axes_handle,xl) % you can skip new_axes_handle for current axes 
ylim(new_axes_handle,yl) 
zlim(new_axes_handle,zl) 

Albo

set(new_axes_handle,'XLim',xl,'YLim',yl','ZLim',zl) 

Przy okazji, oprócz odpowiedzi Itamar, można uzyskać wszystkie osie właściwości naraz w strukturze:

ax_properties = get(gca); 

usunąć pola, które nie mają zastosowania do nowych osi, następnie użyj SET:

set(new_axes_handle,ax_properties) 

Uważaj, ponieważ struktura będzie zawierała również UserData. Najpierw usuń to pole. Możesz to zrobić za pomocą kodu:

rmfield(ax_properties,'UserData') 
1

OMG, ręczna regulacja i generowanie opcji M-File to mój bohater. Gdybym tylko wiedział od początku, że wszystko, co musiałem zrobić, to:

axes1 = axes('Parent',Plot_ele,'PlotBoxAspectRatio',[1 1.70454545454545 1.7],... 
    'DataAspectRatio',[1 1 1],... 
    'CameraViewAngle',7.48227189414101,... 
    'CameraUpVector',[-0.0256575066196788 0.989185543639328 -0.144407938178721],... 
    'CameraTarget',[255.013054349713 397.874703616223 449.003273637903],... 
    'CameraPosition',[1445.8877301745 1407.25270740567 7151.59363497921]); 
    % xlim(axes1,[0 528]); % uncomment to preserve axes x-limits 
    % zlim(axes1,[0 897.6]); % uncomment to preserve axes z-limits 
hold(axes1,'all'); 
Powiązane problemy