How to draw vectors (physical 2D/3D vectors) in MATLAB?

后端 未结 6 429
一个人的身影
一个人的身影 2020-12-25 14:00

I want to know the simplest way to plot vectors in MATLAB. For example:

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

I want to visualize this vect

相关标签:
6条回答
  • 2020-12-25 14:10
    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 讨论(0)
  • 2020-12-25 14:11
                % 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
    
    0 讨论(0)
  • 2020-12-25 14:15

    I agree with Aamir that the submission arrow.m from Erik Johnson on the MathWorks File Exchange is a very nice option. You can use it to illustrate the different methods of vector addition like so:

    • Tip-to-tail method:

      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
      
    • Parallelogram method:

      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
      
    0 讨论(0)
  • 2020-12-25 14:16

    I'm not sure of a way to do this in 3D, but in 2D you can use the compass command.

    0 讨论(0)
  • 2020-12-25 14:28

    I found this arrow(start, end) function on MATLAB Central which is perfect for this purpose of drawing vectors with true magnitude and direction.

    0 讨论(0)
  • 2020-12-25 14:32

    I did it this 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 ) );
    

    Based on the quiver and quiver3 documentation

    0 讨论(0)
提交回复
热议问题