MATLAB画风速带有方向的矢量图程序,Matlab向量矢量图

前言

目前在做图像分割时,有相关向量场图的表示,顺便整理一下向量场图的matlab实现方法,整理自:胖大星越来越胖的微博,http://blog.sina.com.cn/s/blog_5e3213f30102v3o8.html,谢谢。

Two-dimensional Quiver Plots 二维向量场图

Joukowski Airfoil Transformation

相关链接:http://www.mathworks.com/matlabcentral/fileexchange/8870-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)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    代码结果图:

MATLAB画风速带有方向的矢量图程序,Matlab向量矢量图_第1张图片

Surface Gradients

相关链接:http://www.mathworks.com/help/matlab/ref/quiver.html

代码示例:

[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))    代码结果图:

MATLAB画风速带有方向的矢量图程序,Matlab向量矢量图_第2张图片

Dual Colormap

代码示例:

[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')    代码结果图:

MATLAB画风速带有方向的矢量图程序,Matlab向量矢量图_第3张图片

Three-dimensional Quiver Plots三维向量场图

三维向量场或速度箭图

相关链接:http://www.mathworks.com/help/matlab/ref/quiver3.html

代码示例:

[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    代码结果图:

MATLAB画风速带有方向的矢量图程序,Matlab向量矢量图_第4张图片

速度向量图

代码示例:

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    代码结果图:

MATLAB画风速带有方向的矢量图程序,Matlab向量矢量图_第5张图片

Cone Plots 圆锥箭图

风速和方向

代码示例:

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    代码结果图:

MATLAB画风速带有方向的矢量图程序,Matlab向量矢量图_第6张图片

向量场的椎体箭图

代码示例:

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    代码结果图:

MATLAB画风速带有方向的矢量图程序,Matlab向量矢量图_第7张图片

Feature Plots 特征图

特征图

代码示例:

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    代码结果图:

MATLAB画风速带有方向的矢量图程序,Matlab向量矢量图_第8张图片

复杂数值图

代码示例:

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    代码结果图:

MATLAB画风速带有方向的矢量图程序,Matlab向量矢量图_第9张图片

罗盘箭图

罗盘箭图

代码示例:

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

代码结果图:

MATLAB画风速带有方向的矢量图程序,Matlab向量矢量图_第10张图片

罗盘箭图

代码示例:

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    代码结果图:

MATLAB画风速带有方向的矢量图程序,Matlab向量矢量图_第11张图片

参考坐标系

坐标箭图

代码示例:

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')    代码结果图:

MATLAB画风速带有方向的矢量图程序,Matlab向量矢量图_第12张图片

特征向量图

代码示例:

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    代码结果图:

MATLAB画风速带有方向的矢量图程序,Matlab向量矢量图_第13张图片

弗朗内特标架图

代码示例:

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')    代码结果图:

MATLAB画风速带有方向的矢量图程序,Matlab向量矢量图_第14张图片

命名颜色表

命名颜色表

代码示例:

arrow3('colors',0.4) % 24 named colors with 44 adjustable shades

代码结果图:

MATLAB画风速带有方向的矢量图程序,Matlab向量矢量图_第15张图片

MATLAB画风速带有方向的矢量图程序,Matlab向量矢量图_第16张图片

你可能感兴趣的:(MATLAB画风速带有方向的矢量图程序,Matlab向量矢量图)