2017-05-29 109 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