I want to know the simplest way to plot vectors in MATLAB. For example:
我想知道在MATLAB中绘制向量的最简单的方法。例如:
a = [2 3 5];
b = [1 1 0];
c = a + b;
I want to visualize this vector addition as head-to-tail/parallelogram method. How do I plot these vectors with an arrow-head?
我想把这个向量加为头尾/平行四边形法。我怎么用一个箭头来画这些向量?
6 个解决方案
#1
24
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
#2
16
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:
我同意Aamir提交的箭头。在MathWorks文件交换中,来自Erik Johnson的m是一个很好的选择。你可以用它来说明向量加法的不同方法:
-
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
#3
6
I found this arrow(start, end)
function on MATLAB Central which is perfect for this purpose of drawing vectors with true magnitude and direction.
我在MATLAB中找到了这个箭头(start, end)函数,它非常适合用来绘制具有真实大小和方向的向量。
#4
3
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
基于quiver和quiver3的文档。
#5
#6
-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
#1
24
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
#2
16
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:
我同意Aamir提交的箭头。在MathWorks文件交换中,来自Erik Johnson的m是一个很好的选择。你可以用它来说明向量加法的不同方法:
-
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
#3
6
I found this arrow(start, end)
function on MATLAB Central which is perfect for this purpose of drawing vectors with true magnitude and direction.
我在MATLAB中找到了这个箭头(start, end)函数,它非常适合用来绘制具有真实大小和方向的向量。
#4
3
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
基于quiver和quiver3的文档。
#5
2
I'm not sure of a way to do this in 3D, but in 2D you can use the compass
command.
我不确定用3D来做这个,但是在2D中,你可以使用compass命令。
#6
-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