2011-02-23 21 views
5

Estoy usando MATLAB para visualizar datos en 3D. Uso la GUI para cambiar para ver el ángulo, el zoom y la panorámica. ¿Cómo puedo almacenar esta vista y luego aplicarla a otra figura (que contiene más o menos los mismos datos)? view me da una matriz, pero ¿cómo puedo aplicar esto a otra figura?Store MATLAB viewport 3D

¡Muchas gracias!

Respuesta

5

Para utilizar el ángulo de visión actual sobre otra figura, que podría hacer:

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

O bien, puede hacer lo mismo usando get y set de la propiedad view.

Sin embargo, para aplicar todas las propiedades de vista que mencionas juntas, es más fácil usar la opción incorporada de 'generar archivo m' de Matlab. Cuando tengas la figura 3D como quieras, ve al file ->Generate m-file , y se creará un archivo m que obtenga los datos 3D como una entrada y aplique la configuración.

Otra opción es guardar estos ajustes pertinentes a sí mismo (solo inspeccionar el archivo-m generada):

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'); 

y luego aplicarlo a los ejes actuales (asumiendo ejes el objetivo es la actual):

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

Para almacenar y aplicar ver ver Itamar's answer.

Para acercar y alejar, solo necesita almacenar los límites de los ejes. Use xlim, ylim y zlim o las propiedades de los ejes correspondientes (XLim, etc.) con get/set.

Para los ejes actuales a límites de almacén:

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

o con propiedades ejes:

xl = get(gca,'XLim'); 

Para aplicar a ejes sobre otra figura:

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

O

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

Por cierto, además de la respuesta de Itamar, puede obtener todos los ejes propiedades a la vez en una estructura:

ax_properties = get(gca); 

Quitar los campos que no desea aplicar a los nuevos ejes, A continuación, utilice SET:

set(new_axes_handle,ax_properties) 

tener cuidado ya la estructura contendrá UserData también. Elimina este campo primero. Puede hacerlo mediante el código:

rmfield(ax_properties,'UserData') 
1

OMG, el ajuste manual y la opción de generar M-File es mi héroe. Si tan solo supiera desde el principio que todo lo que tenía que hacer era esto:

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'); 
Cuestiones relacionadas