18/09/2019, 02:02:39 am *
Bienvenido(a), Visitante. Por favor, ingresa o regístrate.
¿Perdiste tu email de activación?

Ingresar con nombre de usuario, contraseña y duración de la sesión
Noticias: Puedes practicar LATEX con el cómodo editor de Latex online
 
 
Páginas: [1]   Ir Abajo
  Imprimir  
Autor Tema: ¿Cómo grafico un vector en matlab?  (Leído 1362 veces)
0 Usuarios y 1 Visitante están viendo este tema.
AniF
Pleno*
*****

Karma: +0/-0
Desconectado Desconectado

Sexo: Femenino
Argentina Argentina

Mensajes: 122


Ver Perfil
« : 24/01/2014, 06:56:27 pm »

¡Hola a todos!

Hace rato que estoy tratando de graficar un vector en el espacio, el vector p=(3,4,5) como una flecha que nace en el origen y termina en el punto p pero no encuentro los comandos. ¿Es posible hacer eso? Sé que en el plano eso se realiza con la función compass, ¿pero cuál es su análogo en el espacio?

Muchas gracias,
En línea
argentinator
Consultar la FIRMAPEDIA __________________________________________________________________________________________________________________
Administrador
Pleno*
*****

Karma: +0/-0
Desconectado Desconectado

Sexo: Masculino
Argentina Argentina

Mensajes: 7.275

Vean mis posts activos en mi página personal


Ver Perfil WWW
« Respuesta #1 : 24/01/2014, 07:09:56 pm »

Esa es la pregunta del millón de dólares.

Te digo más, lo de los vectores es la razón principal por la cual no uso Matlab.

Igual tiene un comando: quiver.
Buscá información sobre eso.
No conozco otros comandos para dibujar flechas.

En línea

AniF
Pleno*
*****

Karma: +0/-0
Desconectado Desconectado

Sexo: Femenino
Argentina Argentina

Mensajes: 122


Ver Perfil
« Respuesta #2 : 24/01/2014, 07:32:12 pm »

Gracias por el dato argentinator, de algo servirá. Otra duda, dibujar un punto solito es posible?.
En línea
argentinator
Consultar la FIRMAPEDIA __________________________________________________________________________________________________________________
Administrador
Pleno*
*****

Karma: +0/-0
Desconectado Desconectado

Sexo: Masculino
Argentina Argentina

Mensajes: 7.275

Vean mis posts activos en mi página personal


Ver Perfil WWW
« Respuesta #3 : 24/01/2014, 07:39:08 pm »

Sí. Hacé un círculo de radio pequeñito.  :sonrisa_amplia:

Si no, con plot:

plot(x, y, '.')
En línea

AniF
Pleno*
*****

Karma: +0/-0
Desconectado Desconectado

Sexo: Femenino
Argentina Argentina

Mensajes: 122


Ver Perfil
« Respuesta #4 : 24/01/2014, 07:42:13 pm »

Gracias, con eso creo que ya me arreglo.  :sonrisa:
En línea
pierrot
pabloN
Moderador Global
Pleno*
*

Karma: +0/-0
Desconectado Desconectado

Sexo: Masculino
Uruguay Uruguay

Mensajes: 3.348


Ver Perfil
« Respuesta #5 : 24/01/2014, 09:40:51 pm »

Como dijo argentinator, para dibujar una flecha de [texx]\texttt{P0=(x0,y0,z0)}[/texx] a [texx]\texttt{P1=(x1,y1,z1)}[/texx] se hace con

[texx]\texttt{quiver3(x0,y0,z0,x1-x0,y1-y0,z1-z0)}[/texx]

Si la cabeza de la flecha queda muy grande o muy pequeña, o quieres que la línea se vea más gruesa o más fina, puedes controlarlo con

[texx]\texttt{quiver3(x0,y0,z0,x1-x0,y1-y0,z1-z0,'linewidth',3,'MaxHeadSize',0.1)}[/texx]

Yo usé Octave para probar estos comandos, que es software libre (hace unos meses que me pasé para Linux), pero es compatible con Matlab así que seguramente te funcione.

Las propiedades que puedes personalizar están listadas aquí.
En línea

$_="loe  hnachaPkr erttes,urJ";$j=0;for($i=0;s/(.)(.{$j})$//;$i++){$_=$2.$_,$j+=1-$i%2,print$1}print
AniF
Pleno*
*****

Karma: +0/-0
Desconectado Desconectado

Sexo: Femenino
Argentina Argentina

Mensajes: 122


Ver Perfil
« Respuesta #6 : 24/01/2014, 11:41:30 pm »

Hola Pablo. Ya probé con

[texx]\texttt{quiver3(x0,y0,z0,x1-x0,y1-y0,z1-z0)}[/texx]

es un comando que no conocía pero sí tienes razón hace demasiado grande la flecha. Intenté insertar

[texx]\texttt{quiver3(x0,y0,z0,x1-x0,y1-y0,z1-z0,'linewidth',3,'MaxHeadSize',0.1)}[/texx]

pero me parece el siguiente error

>> quiver3(0,0,0,3,5,8,'linewidth',3,'MaxHeadSize',0.1)
?? ? Error using ==> quiver3
Too many input arguments.


¿A qué puede deberse? Muchas gracias por las recomendaciones.
En línea
Juan Pablo Sancho
Moderador Global
Pleno*
*

Karma: +0/-0
Desconectado Desconectado

Sexo: Masculino
España España

Mensajes: 4.624


Ver Perfil
« Respuesta #7 : 25/01/2014, 02:53:41 am »

PabloN mira el Scilab  a ver si te gusta.
En línea
pierrot
pabloN
Moderador Global
Pleno*
*

Karma: +0/-0
Desconectado Desconectado

Sexo: Masculino
Uruguay Uruguay

Mensajes: 3.348


Ver Perfil
« Respuesta #8 : 25/01/2014, 04:12:26 am »

Hola Pablo. Ya probé con

[texx]\texttt{quiver3(x0,y0,z0,x1-x0,y1-y0,z1-z0)}[/texx]

es un comando que no conocía pero sí tienes razón hace demasiado grande la flecha. Intenté insertar

[texx]\texttt{quiver3(x0,y0,z0,x1-x0,y1-y0,z1-z0,'linewidth',3,'MaxHeadSize',0.1)}[/texx]

pero me parece el siguiente error

>> quiver3(0,0,0,3,5,8,'linewidth',3,'MaxHeadSize',0.1)
?? ? Error using ==> quiver3
Too many input arguments.


¿A qué puede deberse? Muchas gracias por las recomendaciones.

A que esas opciones no están disponibles en Matlab, son de Octave. Usa este script:

function adjust_quiver_arrowhead_size(quivergroup_handle, scaling_factor)
% Make quiver arrowheads bigger or smaller.
%
% adjust_quiver_arrowhead_size(quivergroup_handle, scaling_factor)
%
% Example:
%   h = quiver(1:100, 1:100, randn(100, 100), randn(100, 100));
%   adjust_quiver_arrowhead_size(h, 1.5);   % Makes all arrowheads 50% bigger.
%
% Inputs:
%   quivergroup_handle      Handle returned by "quiver" command.
%   scaling_factor          Factor by which to shrink/grow arrowheads.
%
% Output: none

% Kevin J. Delaney
% December 21, 2011
% BMT Scientific Marine Services (www.scimar.com)

if ~exist('quivergroup_handle', 'var')
    help(mfilename);
    return
end

if isempty(quivergroup_handle) || any(~ishandle(quivergroup_handle))
    errordlg('Input "quivergroup_handle" is empty or contains invalid handles.', ...
             mfilename);
    return
end

if length(quivergroup_handle) > 1
    errordlg('Expected "quivergroup_handle" to be a single handle.', mfilename);
    return
end

if ~strcmpi(get(quivergroup_handle, 'Type'), 'hggroup')
    errrodlg('Input "quivergroup_handle" is not of type "hggroup".', mfilename);
    return
end

if ~exist('scaling_factor', 'var') || ...
   isempty(scaling_factor) || ...
   ~isnumeric(scaling_factor)
    errordlg('Input "scaling_factor" is missing, empty or non-numeric.', ...
             mfilename);
    return
end

if length(scaling_factor) > 1
    errordlg('Expected "scaling_factor" to be a scalar.', mfilename);
    return
end

if scaling_factor <= 0
    errordlg('"Scaling_factor" should be > 0.', mfilename);
    return
end

line_handles = get(quivergroup_handle, 'Children');

if isempty(line_handles) || (length(line_handles) < 3) || ...
   ~ishandle(line_handles(2)) || ~strcmpi(get(line_handles(2), 'Type'), 'line')
    errordlg('Unable to adjust arrowheads.', mfilename);
    return
end

arrowhead_line = line_handles(2);

XData = get(arrowhead_line, 'XData');
YData = get(arrowhead_line, 'YData');

if isempty(XData) || isempty(YData)
    return
end

%   Break up XData, YData into triplets separated by NaNs.
first_nan_index = find(~isnan(XData), 1, 'first');
last_nan_index  = find(~isnan(XData), 1, 'last');

for index = first_nan_index : 4 : last_nan_index
    these_indices = index + (0:2);
   
    if these_indices(end) > length(XData)
        break
    end
   
    x_triplet = XData(these_indices);
    y_triplet = YData(these_indices);
   
    if any(isnan(x_triplet)) || any(isnan(y_triplet))
        continue
    end
   
    %   First pair.
    delta_x = diff(x_triplet(1:2));
    delta_y = diff(y_triplet(1:2));
    x_triplet(1) = x_triplet(2) - (delta_x * scaling_factor);
    y_triplet(1) = y_triplet(2) - (delta_y * scaling_factor);
       
    %   Second pair.
    delta_x = diff(x_triplet(2:3));
    delta_y = diff(y_triplet(2:3));
    x_triplet(3) = x_triplet(2) + (delta_x * scaling_factor);
    y_triplet(3) = y_triplet(2) + (delta_y * scaling_factor);
   
    XData(these_indices) = x_triplet;
    YData(these_indices) = y_triplet;
end

set(arrowhead_line, 'XData', XData, 'YData', YData);


Hice un copy-paste de este link.

Por los comentarios que han hecho otros usuarios, parece que funciona bien. Lo que debes hacer es copiar el código que está arriba, guardarlo en un fichero .m en la ruta /usr/share/octave/3.6.4/m si fuera Linux (si es Windows, creo que sería C:\Archivos de programas\Octave\3.6.4\m) y luego invocar a la función adjust_quiver_arrowhead_size() en el script que estés usando para generar el gráfico.

Luego nos cuentas.
En línea

$_="loe  hnachaPkr erttes,urJ";$j=0;for($i=0;s/(.)(.{$j})$//;$i++){$_=$2.$_,$j+=1-$i%2,print$1}print
AniF
Pleno*
*****

Karma: +0/-0
Desconectado Desconectado

Sexo: Femenino
Argentina Argentina

Mensajes: 122


Ver Perfil
« Respuesta #9 : 25/01/2014, 11:44:29 am »

Gracias Pablo! Ya lo probaré y les cuento  :guiño:. Por lo pronto pude solucionar el problemita de la flecha de una forma más rudimentaria.
En línea
Páginas: [1]   Ir Arriba
  Imprimir  
 
Ir a:  

Impulsado por MySQL Impulsado por PHP Powered by SMF 1.1.4 | SMF © 2006, Simple Machines LLC XHTML 1.0 válido! CSS válido!