2009-12-26 62 views

risposta

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

faretra e quiver3 lasciare spazi vuoti tra i vettori che fanno i vettori assomigliano con piccola grandezza. – Aamir

+4

Prova ad aggiungere il parametro "scale", impostare su zero, per impedire il ridimensionamento automatico, ad esempio 'quiver3 (starts (:, 1), starts (:, 2), starts (:, 3), ends (:, 1), termina (:, 2), termina (:, 3), 0) ' –

+0

Grazie Martin per l'argomento della scala. Ma le punte di freccia in quiver3 non sembrano molto belle rispetto a arrow.m di Matlab File Exchage. – Aamir

2

Non sono sicuro di un modo per farlo in 3D, ma in 2D è possibile utilizzare il comando compass.

16

Sono d'accordo con Aamir che l'invio arrow.m da Erik Johnson su MathWorks File Exchange è un'opzione molto buona. Si può usare per illustrare il different methods of vector addition in questo modo:

  • Tip-coda metodo: il metodo

    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 
    
  • parallelogramma:

    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

ho fatto questo way,

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

Sulla base della documentazione quiver e quiver3

-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