2009-12-26 7 views

Répondre

23
a = [2 3 5]; 
b = [1 1 0]; 
c = a+b; 

starts = zeros(3,3); 
ends = [a;b;c]; 

quiver3(starts(:,1), starts(:,2), starts(:,3), ends(:,1), ends(:,2), ends(:,3)) 
axis equal 
+0

carquois et quiver3 laisser des espaces vides entre les vecteurs qui font les vecteurs ressemblent avec une faible ampleur. – Aamir

+4

Essayez d'ajouter le paramètre "scale", mis à zéro, pour empêcher la mise à l'échelle automatique, ie 'quiver3 (commence (:, 1), commence (:, 2), commence (:, 3), termine (:, 1), termine (:, 2), se termine (:, 3), 0) ' –

+0

Merci Martin pour l'argument d'échelle. Mais les flèches de quiver3 ne sont pas très belles par rapport à arrow.m de Matlab File Exchage. – Aamir

2

Je ne suis pas sûr d'un moyen de le faire dans 3D, mais dans 2D vous pouvez utiliser la commande compass.

16

Je suis d'accord avec Aamir que la soumission arrow.m de Erik Johnson sur le MathWorks File Exchange est une très bonne option. Vous pouvez l'utiliser pour illustrer la different methods of vector addition comme ceci:

  • méthode à queue-Tip:

    o = [0 0 0]; %# Origin 
    a = [2 3 5]; %# Vector 1 
    b = [1 1 0]; %# Vector 2 
    c = a+b;  %# Resultant 
    arrowStarts = [o; a; o];  %# Starting points for arrows 
    arrowEnds = [a; c; c];   %# Ending points for arrows 
    arrow(arrowStarts,arrowEnds); %# Plot arrows 
    
  • méthode Parallélogramme:

    o = [0 0 0]; %# Origin 
    a = [2 3 5]; %# Vector 1 
    b = [1 1 0]; %# Vector 2 
    c = a+b;  %# Resultant 
    arrowStarts = [o; o; o];  %# Starting points for arrows 
    arrowEnds = [a; b; c];   %# Ending points for arrows 
    arrow(arrowStarts,arrowEnds); %# Plot arrows 
    hold on; 
    lineX = [a(1) b(1); c(1) c(1)]; %# X data for lines 
    lineY = [a(2) b(2); c(2) c(2)]; %# Y data for lines 
    lineZ = [a(3) b(3); c(3) c(3)]; %# Z data for lines 
    line(lineX,lineY,lineZ,'Color','k','LineStyle',':'); %# Plot lines 
    
3

Je l'ai fait cette chemin,

2D

% vectors I want to plot as rows (XSTART, YSTART) (XDIR, YDIR) 
rays = [ 
    1 2 1 0 ; 
    3 3 0 1 ; 
    0 1 2 0 ; 
    2 0 0 2 ; 
] ; 

% quiver plot 
quiver(rays(:,1), rays(:,2), rays(:,3), rays(:,4)); 

3D

% vectors I want to plot as rows (XSTART, YSTART, ZSTART) (XDIR, YDIR, ZDIR) 
rays = [ 
    1 2 0 1 0 0; 
    3 3 2 0 1 -1 ; 
    0 1 -1 2 0 8; 
    2 0 0 0 2 1; 
] ; 

% quiver plot 
quiver3(rays(:,1), rays(:,2), rays(:,3), rays(:,4), rays(:,5), rays(:,6)); 

Basé sur le quiver et quiver3 documentation

-1
  % draw simple vector from pt a to pt b 
      % wtr : with respect to 
      scale=0;%for drawin vectors with true scale 
      a = [10 20 30];% wrt origine O(0,0,0) 
      b = [10 10 20];% wrt origine O(0,0,0) 

      starts=a;% a now is the origine of my vector to draw (from a to b) so we made a translation from point O to point a = to vector a 
      c = b-a;% c is the new coordinates of b wrt origine a 
      ends=c;% 
      plot3(a(1),a(2),a(3),'*b') 
      hold on 
      plot3(b(1),b(2),b(3),'*g') 

      quiver3(starts(:,1), starts(:,2), starts(:,3), ends(:,1), ends(:,2), ends(:,3),scale);% Use scale = 0 to plot the vectors without the automatic scaling. 
      % axis equal 
      hold off