2017-05-29 86 views
2

我要绘制下面矢量场在Matlab:剧情矢量场

u = cos(x-x_0).*y-y_0; 
v = sin(x+x_0).*y+y_0; 

我可以很容易地做到这一点在一个网格,例如从-2到2的x和y方向:

x_0=2; y_0=1; 
[x,y] = meshgrid(-2:0.2:2, -2:0.2:2); 
figure 
quiver(x,y,u,v) 

但我要绘制在一定区域内,其不是方形像上面的矢量场。我想绘制矢量场的区域是两个圆圈之间的区域,均位于(x_0,y_0)中心,半径等于r_1=5r_2=10

我该怎么做?

+0

请发表一个完整的例子(定义'x'等) –

+0

(x,y)表示2d中的位置。 u和v是x和y方向的矢量场@LuisMendo –

+0

你想要极坐标吗? – OmG

回答

1

设置您的半径,圆,x的中心,y变量,像这样

r1 = 5; r2 = 10; % Radii of your circles 
x_0 = 0; y_0 = 1; % Centre of circles 
[x,y] = meshgrid(x_0-r2:0.2:x_0+r2,y_0-r2:0.2:y_0+r2); % meshgrid of points 

然后得到这点是由两个圆圈中描述的annulus内,利用它定义了圆的方程做到这一点区域:

idx = ((x-x_0).^2 + (y-y_0).^2 > r1^2 & (x-x_0).^2 + (y-y_0).^2 < r2^2); 

定义你的矢量场

u = cos(x-x_0).*y-y_0; 
v = sin(x+x_0).*y+y_0; 

然后使用quiver描绘出这些点的矢量场像你这样:

quiver(x(idx),y(idx),u(idx),v(idx)); 

输出:

enter image description here


编辑:

如果矢量场是复杂的,你会保存通过从xy你不感兴趣的第一删除元素大量的计算时间计算idx后,执行:

x = x(idx); 
y = y(idx); 

然后计算uv,你可以通过简单地调用quiver(x,y,u,v)绘制。

+0

@OliverRange的地区绘制矢量场[u,v],请参阅我的编辑,以获取关于效率的附加说明 – Wolfie