# Plot 2D/3D Vector with Arrow

### Rentian Xiong (view profile)

18 Apr 2005 (Updated )

This function plots a line vector with arrow head.

vectarrow(p0,p1)
```function vectarrow(p0,p1)
%Arrowline 3-D vector plot.
%   vectarrow(p0,p1) plots a line vector with arrow pointing from point p0
%   to point p1. The function can plot both 2D and 3D vector with arrow
%   depending on the dimension of the input
%
%   Example:
%       3D vector
%       p0 = [1 2 3];   % Coordinate of the first point p0
%       p1 = [4 5 6];   % Coordinate of the second point p1
%       vectarrow(p0,p1)
%
%       2D vector
%       p0 = [1 2];     % Coordinate of the first point p0
%       p1 = [4 5];     % Coordinate of the second point p1
%       vectarrow(p0,p1)
%

%   Rentian Xiong 4-18-05
%   \$Revision: 1.0

if max(size(p0))==3
if max(size(p1))==3
x0 = p0(1);
y0 = p0(2);
z0 = p0(3);
x1 = p1(1);
y1 = p1(2);
z1 = p1(3);
plot3([x0;x1],[y0;y1],[z0;z1]);   % Draw a line between p0 and p1

p = p1-p0;
alpha = 0.1;  % Size of arrow head relative to the length of the vector
beta = 0.1;  % Width of the base of the arrow head relative to the length

hu = [x1-alpha*(p(1)+beta*(p(2)+eps)); x1; x1-alpha*(p(1)-beta*(p(2)+eps))];
hv = [y1-alpha*(p(2)-beta*(p(1)+eps)); y1; y1-alpha*(p(2)+beta*(p(1)+eps))];
hw = [z1-alpha*p(3);z1;z1-alpha*p(3)];

hold on
grid on
xlabel('x')
ylabel('y')
zlabel('z')
hold off
else
error('p0 and p1 must have the same dimension')
end
elseif max(size(p0))==2
if max(size(p1))==2
x0 = p0(1);
y0 = p0(2);
x1 = p1(1);
y1 = p1(2);
plot([x0;x1],[y0;y1]);   % Draw a line between p0 and p1

p = p1-p0;
alpha = 0.1;  % Size of arrow head relative to the length of the vector
beta = 0.1;  % Width of the base of the arrow head relative to the length

hu = [x1-alpha*(p(1)+beta*(p(2)+eps)); x1; x1-alpha*(p(1)-beta*(p(2)+eps))];
hv = [y1-alpha*(p(2)-beta*(p(1)+eps)); y1; y1-alpha*(p(2)+beta*(p(1)+eps))];

hold on
grid on
xlabel('x')
ylabel('y')
hold off
else
error('p0 and p1 must have the same dimension')
end
else
error('this function only accepts 2D or 3D vector')
end```