在matlab中绘制给定区域内(两个圆圈之间)的矢量场

时间:2017-05-29 14:44:27

标签: matlab matlab-figure

我想在Matlab中绘制下面的矢量场:

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

我可以在网格中轻松完成,例如在x和y方向从-2到2:

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

我该怎么做?

1 个答案:

答案 0 :(得分:1)

设置您的半径,圆心和xy变量,如此

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)即可进行策划。