【问题标题】:Plot vector field within given region (between two circles) in matlab在matlab中绘制给定区域内(两个圆之间)的向量场
【发布时间】:2017-05-29 14:44:27
【问题描述】:

我想在 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=5 和 r_2=10

我该怎么做?

【问题讨论】:

  • 请发一个完整的例子(定义x等)
  • (x ,y) 表示二维中的位置。 u 和 v 是 x 和 y 方向的向量场@LuisMendo
  • 你想要极坐标图吗?
  • 这是什么?我想在我介绍的区域中绘制矢量场 [u,v] @OmG

标签: matlab matlab-figure


【解决方案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));

输出:


编辑:

如果你的向量场很复杂,你可以先从x和y中删除你不感兴趣的元素,这样可以节省大量的计算时间。计算完idx之后,做:

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

然后计算u 和v,您只需调用quiver(x,y,u,v) 即可绘图。

【讨论】:

  • @OliverRange 请参阅我的编辑以获取有关效率的其他说明
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-16
相关资源
最近更新 更多