2009-12-26 4 views
20

Я хочу узнать простейший способ построения векторов в MATLAB. Например:Как нарисовать векторы (физические 2D/3D векторы) в MATLAB?

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

Я хочу, чтобы визуализировать это векторное сложение, как голова-хвост/метод параллелограмма. Как построить эти векторы со стрелкой?

ответ

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

колчана и quiver3 оставить пустые пространства между векторами, которые делают векторы выглядят как с малой величиной. – Aamir

+4

Попробуйте добавить параметр «scale», установленный на ноль, чтобы предотвратить автоматическое масштабирование, то есть 'quiver3 (start (:, 1), start (:, 2), запускает (:, 3), заканчивает (:, 1), end (:, 2), end (:, 3), 0) ' –

+0

Спасибо Мартину за аргумент масштаба. Но стрелки в колчане 3 выглядят не очень красиво по сравнению со стрелкой.m из Matlab File Exchage. – Aamir

2

Я не уверен в способе сделать это в 3D, но в 2D вы можете использовать команду compass.

6

Я нашел эту arrow(start, end) функции на MATLAB Central, который идеально подходит для этой цели рисования векторов с истинной величиной и направлением.

16

Я согласен с Aamir что представление arrow.m от Erik Johnson на MathWorks File Exchange - очень хороший вариант. Вы можете использовать его для иллюстрации different methods of vector addition так:

  • 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 
    
  • Параллелограмм:

    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

Я сделал это это ,

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

На основе документации quiver и 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 
Смежные вопросы