Almacenamiento de identificadores de objetos generados por imline en MATLAB
properties store (2)
Es posible que deba completar su matriz con líneas predeterminadas para poder crearla. El enfoque típico para preasignar una matriz de objetos de tamaño N
sería simplemente asignar un objeto al último elemento de la matriz.
M(N,N)=imline(gca,[NaN NaN],[NaN NaN]); %# set non-displayable vals for x and y
NOTA: la línea anterior no funcionará con imline
ya que llamará al constructor predeterminado para cada uno de los otros objetos de la línea N * N-1 en la matriz y una llamada de imline
sin argumentos fuerza la interacción del usuario con el eje actual.
Mi consejo (si está preasignando) es definir todas las líneas predeterminadas explícitamente en la matriz:
for k=1:N*N
M(k)=imline(gca,[NaN NaN],[NaN NaN]);
end
%# Reshape (if necessary)
M = reshape(M,[N N]);
Alternativamente, puede dejar que Matlab llene la matriz por usted. Si encuentra que necesitará este código a menudo, imline
una nueva clase de imline
. El siguiente ejemplo muestra lo mínimo que tendría que suceder. Simplemente define un constructor. Este ejemplo le permite pasar argumentos opcionales para imline
también. Si no se especifican argumentos, el objeto de línea se crea con valores de posición como se indica arriba.
classdef myimline<imline
methods
function obj = myimline(varargin)
if isempty(varargin)
varargin = {gca,[NaN NaN],[NaN NaN]};
end
obj = obj@imline(varargin{:});
end
end
end
Ejemplo de uso:
%# Generate a 100 element array of `imline` objects,
%# but define the last one explicitly
mat(100)=myimline(gca,[0 1],[0 1]);
El último objeto myimline
en la matriz tiene puntos especificados como en la asignación, pero el resto de los elementos tienen los valores de posición predeterminados [NaN NaN]
como se [NaN NaN]
anteriormente.
Intento almacenar un conjunto de identificadores de objetos en una matriz. Los objetos son una serie de líneas generadas por imline (.). Quiero almacenar los identificadores para poder cambiar la propiedad de una línea deseada (en este caso, posición).
Sé cómo hacer esto; sin embargo, cuando intento llenar una matriz con las asas de las líneas, ocurre un error: MATLAB declara que la conversión de IMLINE a DOUBLE no es posible. Esto no ocurre con otros tipos de objetos. ¿Hay alguna forma de eludir esto?
Aquí hay un pseudocódigo para aclarar:
lines=zeros(1,x); % defining empty storage matrix
for idx=1:x
line=imline(ax_handl,[x_1 y_1; x_2 y_2])
set(line,''UserData'',idx) % in order to identify independent lines with the number
lines(idx)=line; % here I try to store a line handle as it''s made
end
% now in the function responsible for motion of objects, I assign new position to line
line_num=get(gco,''UserData''); % this relates other objects associated with line number
setPosition(lines(line_num),[a b; c d]);
Use el método estático empty
para crear una matriz vacía del tipo de clase:
lines = imline.empty(0,10);
for idx=1:10
line = imline(gca, sortrows(rand(2,2)));
set(line,''UserData'',idx)
lines(idx) = line;
end