## ARROW3 EXAMPLES (R13)

- Two-dimensional Quiver Plots

- Example 1.
- Example 2.
- Example 3.

- Three-Dimensional Quiver Plots

- Example 4.
- Example 5.

- Cone Plots

- Example 6.
- Example 7.

- Feather Plots

- Example 8.
- Example 9.

- Compass Plots

- Example 10.
- Example 11.

- Reference Frames

- Example 12.
- Example 13.
- Example 14.

- Named Colors

- Example 15.

- Update (Modify and Restore)

- Example 16.

## Two-Dimensional Quiver Plots

Example 1. (cf. Joukowski Airfoil Transformation)
`t=10*pi/180; u=0.1; v=0.1; r=1.1; tol=8e-2;
s=u+i*v; k=2*r*sin(t); w=exp(i*t);
[x,y]=meshgrid(-2.5:0.1:3.5,-3:0.1:3);
z=x+i*y; z(abs(z-s)<r-tol)=NaN;
f=w*z+exp(-i*t)*r^2./(z-s)+i*k*log(z);
a=0:0.1:2*pi; zc=r*(cos(a)+i*sin(a))+s;
c1=-1.5; c2=2.5; c3=c2-c1;
c=contour(x,y,imag(f),c1:c3/16:c2);
set(gca,'color',0.5*[1 1 1])
hold on, daspect([1 1 1])
fill(real(zc),imag(zc),'y'), colorbar
map=get(gcf,'colormap');
domain=0:1/(size(map,1)-1):1; m=1;
while m<length(c), n=m+c(2,m);
if c(2,m)>9, p=c(:,m+1:n)';
if p(end,1)>p(1,1), p=flipud(p); end
ndx=10:10:length(p);
p2=p(ndx,:); p1=p(ndx-3,:);
cc=interp1(domain,map,(c(1,m)-c1)/c3);
set(gca,'ColorOrder',cc)
arrow3(p1,p2,'0o',0.8)
end, m=n+1;
end, hold off
`

Example 1. Joukowski Airfoil Transformation

Example 2. (cf. Quiver)
`[x,y]=meshgrid(-1:1/21:1);
z=x.*exp(-x.^2-y.^2);
[c,h]=contour(x,y,z);
set(h,'EdgeColor',0.45*[1 1 1])
ndx=1:3:length(x);
x=x(ndx,ndx); y=y(ndx,ndx); z=z(ndx,ndx);
[u,v]=gradient(z,1/7);
p1=[x(:),y(:)]; u=u(:); v=v(:);
m=abs(u+i*v); % gradient magnitude
daspect([1 1 1]), set(gca,'color',0.3*[1 1 1])
hold on, colormap hot, scale=0.4;
arrow3(p1,p1+scale*[u,v],'|',min(1.25*m,0.85))
hold off, h=colorbar;
set(h,'YTickLabel',num2str(str2num(get(h,...
'YTickLabel'))/scale))
`

Example 2. Surface Gradients

Example 3. (cf. Two-Dimensional Quiver Plots)
`[x,y,z]=peaks(-2:0.05:2);
contour(x,y,z,10); h=gca;
ndx=1:4:length(x);
x=x(ndx,ndx); y=y(ndx,ndx); z=z(ndx,ndx);
[u,v]=gradient(z,0.2);
p1=[x(:),y(:)]; u=u(:); v=v(:);
m=abs(u+i*v); % gradient magnitude
hold on, daspect([1 1 1]), scale=0.025;
arrow3(p1,p1+scale*[u,v],'|',0.9*m/max(m))
hold off, title('Dual Colormap')
h1=colorbar; h2=copyobj(h1,gcf);
set(h,'color',0.4*[1 1 1],...
'position',get(h,'position')+[0.05 0 0 0])
% ---------------------------------------------- Right Colorbar
p=get(h1,'position');
set(h1,'position',[0.87,p(2),0.05,p(4)],...
'YTickLabel',num2str(str2num(get(h1,...
'YTickLabel'))/scale)) % freeze labels
map=colormap; cdata=reshape(map,size(map,1),1,3);
set(get(h1,'children'),'cdata',cdata) % freeze colors
set(get(h1,'title'),'string','Gradient')
% ---------------------------------------------- Left Colorbar
caxis auto, colorbar, colormap autumn
set(h2,'YAxisLocation','left',...
'position',[0.08,p(2),0.05,p(4)])
set(get(h2,'title'),'string','Contour')
`

Example 3. Dual Colormap

## Three-Dimensional Quiver Plots

Example 4. (cf. Quiver3)
`[x,y]=meshgrid(-2:0.25:2,-1:0.25:1);
z=x.*exp(-x.^2-y.^2);
surf(x,y,z,'EdgeColor','none')
axis([-2.5 2.5 -1.5 1.5 -1 1]), daspect([1 1 1])
set(gca,'CameraViewAngle',7)
[u,v,w]=surfnorm(x,y,z);
p1=[x(:),y(:),z(:)]; N=[u(:),v(:),w(:)];
hold on
arrow3(p1,p1+0.5*N,'1.5_b')
hold off, colormap spring
light('position',[-1 -1 -1],'style','local')
light('position',[0 1 1]), lighting gouraud
`

Example 4. Surface Normals

Example 5. (cf. Three-Dimensional Quiver Plots)
`vx=2; vy=3; vz=10; a=-32; t=(0:.1:1)';
x=vx*t; y=vy*t; z=vz*t+1/2*a*t.^2;
r=[x,y,z]; v=gradient(r')';
axis([0 3 0 4 -10 2]), pbaspect([2 1 1])
hold on, grid on, view([70 18])
arrow3(r,r+v,'b',0.9)
hold off
`

Example 5. Velocity Vectors

## Cone Plots

Example 6. (cf. Coneplot)
`load wind, wind_speed=sqrt(u.^2+v.^2+w.^2);
xmin=min(x(:)); xmax=max(x(:));
ymin=min(y(:)); ymax=max(y(:));
zmin=min(z(:));
hsurfaces=slice(x,y,z,wind_speed,[xmin,xmax],ymax,zmin);
set(hsurfaces,'FaceColor','interp','EdgeColor','none',...
'AmbientStrength',0.6)
hold on, daspect([2,2,1]), view(30,40), axis tight
xrange=linspace(xmin,xmax,8);
yrange=linspace(ymin,ymax,8);
[cx cy cz]=meshgrid(xrange,yrange,3:4:15);
ui=interp3(x,y,z,u,cx,cy,cz);
vi=interp3(x,y,z,v,cx,cy,cz);
wi=interp3(x,y,z,w,cx,cy,cz);
m=sqrt(ui.^2+vi.^2+wi.^2); m=m(:)/30;
p1=[cx(:),cy(:),cz(:)]; p2=[ui(:),vi(:),wi(:)];
hcones=arrow3(p1,p2,'r',m,3*m,'cone');
set(hcones,'DiffuseStrength',0.8)
hold off, axis off
camproj perspective, camzoom(1.2)
camlight right, lighting phong
`

Example 6. Wind Speed and Direction

Example 7. (cf. Vector Field Displayed with Cone Plots)
`load wind, wind_speed=sqrt(u.^2+v.^2+w.^2);
hiso=patch(isosurface(x,y,z,wind_speed,40),...
'FaceColor','red','EdgeColor','none');
isonormals(x,y,z,wind_speed,hiso)
hcap=patch(isocaps(x,y,z,wind_speed,40),...
'FaceColor','interp','EdgeColor','none',...
'AmbientStrength',0.6);
hold on, colormap hsv, daspect([1,1,1]), view(65,45)
[f verts]=reducepatch(isosurface(x,y,z,wind_speed,30),0.07);
cx=verts(:,1); cy=verts(:,2); cz=verts(:,3);
ui=interp3(x,y,z,u,cx,cy,cz);
vi=interp3(x,y,z,v,cx,cy,cz);
wi=interp3(x,y,z,w,cx,cy,cz);
m=sqrt(ui.^2+vi.^2+wi.^2); m=m(:)/40;
p1=[cx(:),cy(:),cz(:)]; p2=[ui(:),vi(:),wi(:)];
h1=arrow3(p1,p2,'b',m,3*m,'cone');
xrange=linspace(min(x(:)),max(x(:)),10);
yrange=linspace(min(y(:)),max(y(:)),10);
[cx,cy,cz]=meshgrid(xrange,yrange,3:4:15);
ui=interp3(x,y,z,u,cx,cy,cz);
vi=interp3(x,y,z,v,cx,cy,cz);
wi=interp3(x,y,z,w,cx,cy,cz);
m=sqrt(ui.^2 + vi.^2 + wi.^2); m=m(:)/50;
p1=[cx(:),cy(:),cz(:)]; p2=[ui(:),vi(:),wi(:)];
h2=arrow3(p1,p2,'g',m,3*m,'cone');
hold off, axis tight, box on
set(gca,'xtick',[],'ytick',[],'ztick',[])
camproj perspective, camzoom(1.2)
camlight(-45,45), lighting phong
`

Example 7. Wind Speed and Direction

## Feather Plots

Example 8. (cf. Feather)
`theta=(-90:10:90)'*pi/180;
n=length(theta); p1=[1:n;zeros(1,n)]';
r=2*ones(n,1); [u,v]=pol2cart(theta,r);
plot([1 n],[0 0],'r')
axis([0 20 -2 2]), daspect([8 2 1])
hold on, grid on
arrow3(p1,p1+[u,v],'r',0.9)
hold off
`

Example 8. Feather Plot

Example 9. (cf. Plotting Complex Numbers)
`t=(0:0.5:10)'; s=0.05+i; Z=exp(-s*t);
n=length(Z); p1=[1:n;zeros(1,n)]';
plot([1 n],[0 0],'b')
axis([0 22 -1 1]), daspect([8 1 1])
hold on, grid on
arrow3(p1,p1+[real(Z),imag(Z)],'b',0.8)
hold off
`

Example 9. Complex Number Plot

## Compass Plots

Example 10. (cf. Compass Plots)
`wdir =[45 90 90 45 360 335 360 270 335 270 335 335];
knots=[ 6 6 8 6 5 9 8 8 9 10 14 12];
[x,y]=pol2cart(wdir*pi/180,knots);
polar(0,15), axis(15.9*[-1 1 -1 1])
hold on
arrow3(zeros(length(x),2),[x',y'],'r',1.25)
hold off
`

Example 10. Wind Speed and Direction

Example 11. (cf. Compass)
`Z=eig(randn(20)); m=abs(Z);
R=ceil(max(m)); r=R+0.3;
polar(0,R), axis(r*[-1 1 -1 1])
hold on
arrow3(zeros(length(Z),2),[real(Z),imag(Z)],'b',1.75*m/R)
hold off
`

Example 11. Complex Number Plot

## Reference Frames

Example 12. Coordinate Axes
`p=[4 2 1]; axis([-6 6 0 5 -1 1])
pbaspect([2 1.5 1]), view(55,15)
hold on
arrow3(repmat([p(1:2),0],4,1),...
[0 p(2) 0;p(1) 0 0;p;0 0 0],'--o',0,0,0.5)
arrow3(zeros(3),diag([7,5,1]),'o')
arrow3([0 0 0],p,'2.5s',1.5,[],0)
hold off, axis off, camlight left
set(gca,'CameraViewAngle',4)
text(7.1,0,0,'X'), text(0,5.05,0,'Y')
text(0,0,1,'Z','VerticalAlignment','bottom',...
'HorizontalAlignment','center')
`

Example 12. Coordinate Axes

Example 13. Eigenvectors
`n=500; % generate test data
newz=[ 1 1 1]/sqrt(3);
newy=[ 0 -1 1]/sqrt(2);
newx=cross(newy,newz);
R=[newx;newy;newz]; % rotation matrix
U=randn(n,3)*diag([1,2,3])*R;
u=U(:,1)+10; v=U(:,2)+20; w=U(:,3)+30;
% plot eigenvectors with mean origin
plot3(u,v,w,'r.')
axis([0 20 10 29 20 40]), daspect([1 1 1])
view([-70,15]), set(gca,'CameraViewAngle',8)
hold on, grid on
mu=repmat(mean([u,v,w]),3,1);
[V,D]=eig(cov([u,v,w]));
p=9*V'+mu;
arrow3(mu,p,[],1.25,[],0)
p=p+ones(3);
text(p(1,1),p(1,2),p(1,3),'\bfU')
text(p(2,1),p(2,2),p(2,3),'\bfV')
text(p(3,1),p(3,2),p(3,3),'\bfW')
hold off
`

Example 13. Eigenvectors

Example 14. (cf. Frenet)
`z=(0:2/99:2)'; t=2*pi*z; r=2+z;
x=r.*cos(t); y=r.*sin(t);
R=[x,y,z]; dR=gradient(R')';
m=repmat(sqrt(sum(dR.*dR,2)),1,3);
T=dR./m; dT=gradient(T')';
m=repmat(sqrt(sum(dT.*dT,2)),1,3);
N=dT./m; B=cross(T,N);
plot3(x,y,z,'color',0.5*[1 1 1])
axis([-4 4 -4 4 0 2.5])
hold on, grid on, pbaspect([1 1 1])
set(gca,'CameraViewAngle',7)
plot3(0,0,0,'r'), plot3(0,0,0,'color',[0 0.5 0])
plot3(0,0,0,'b')
legend('Curve','Tangent','Normal','Binormal',2)
ndx=1:4:length(x); R=R(ndx,:);
arrow3(R,R+1.4*T(ndx,:),'r',0.9)
arrow3(R,R+1.4*N(ndx,:),'e',0.9)
arrow3(R,R+0.4*B(ndx,:),'b',0.9)
hold off, view(-50,5)
set(gcf,'renderer','zbuffer')
`

Example 14. Frenet Frames

## Named Colors

Example 15. Named Color Table
`arrow3('colors',0.4) % 24 named colors with 44 adjustable shades
`

Example 15. Named Color Table

Color Equivalencies
ColorOrder | Arrow3 | Simulink | Arrow3
Color1 |  | Blue | LightBlue |  | aZure
Color2 |  | Evergreen | DarkGreen |  | Asparagus
Color3 |  | Red | Orange |  | kumQuat
Color4 |  | Sky blue | Gray |  | Light gray
Color5 |  | Violet |
Color6 |  | Pear |
Color7 |  | Dark gray |

## Update (Modify and Restore)

Example 16. Modify and Restore
`% Arrow3 draws surfaces that appear to be right circular cones and
% spheres, but arrowheads and initial point markers retain their
% appearance only so long as the data aspect ratio remains unchanged.
daspect([1 1 2]), view([-40,24])
axis([-1 4 -1 4 0 6])
hold on, axis off
p1=[0,0,0;2,1,0;2.5,3,0;0,2,0];
p2=[-1,2,6;3,-1,3;2.5,1.5,5;-1,3.5,2];
global LineWidthOrder, LineWidthOrder=[2,3,3,3];
global ColorOrder, ColorOrder='rvbe';
w=[3,8,6,4]; h=[9,12,12,8]; ip=[3,5,5,4];
set(gca,'LineStyleOrder',{'--','-','-.',':'},...
'position',get(gca,'position')+[0,0.075,0,0])
arrow3(p1,p2,'o*/',w,h,ip)
hold off
camlight left
`

Example 16. (a) Original plot

`% Changing the data aspect ratio distorts the appearance of
% arrowheads and initial point markers.
daspect([1 1 1])
`

Example 16. (b) Aspect ratio distortion

`% Restore appearance of arrowheads and initial point markers.
arrow3('update')
% Modify colors of arrowheads, initial point markers, and lines to
% conform with magnitude coloring in the current colormap.
h=arrow3('update','colors');
% Change line style to continuous.
set(h(strcmp(get(h,'type'),'line')),'LineStyle','-')
% Reduce arrowhead width by 25%, retain arrowhead height, and reduce
% initial point marker diameter by 50%.
h=arrow3('update',[0.75,1,0.5]);
% Reduce opacity to 70%.
set(h,'FaceAlpha',0.7)
camlight head
`

Example 16. (c) Updated plot

See also Arrow3 Messes Up My Plots!