2017-05-29 1 views
2

Je veux tracer ci-dessous champ vectoriel dans Matlab:Terrain champ antivectorielle dans la région donnée (entre deux cercles) dans Matlab

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

Je peux le faire facilement dans une grille, par exemple -2-2 en direction x et y:

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

Mais je veux tracer le champ de vecteur dans une certaine région qui n'est pas carrée comme ci-dessus. La région que je veux tracer le champ de vecteurs est la région entre les deux cercles, deux centre (x_0, y_0) avec des rayons égaux à r_1=5 et r_2=10

Comment puis-je faire cela?

+0

Veuillez poster un exemple complet (définir 'x' etc.) –

+0

(x, y) indiquent la position dans 2d. u et v sont des champs vectoriels dans la direction x et y @LuisMendo –

+0

Voulez-vous polaire? – OmG

Répondre

1

Configurez votre rayon, le centre du cercle et x, y des variables comme si

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 

obtenir ensuite quels points sont dans le annulus décrit par les deux cercles, le faire en utilisant les équations de cercle qui définissent la région:

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

Définissez votre champ vectoriel

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

puis tracer le champ vectoriel de ces points en utilisant quiver comme vous avez fait:

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

Sortie:

enter image description here


Edit:

Si votre champ vectoriel est compliqué, vous économisez . Beaucoup de temps de calcul en retirant d'abord les éléments de x et y que vous n'êtes pas intéressé après avoir calculé le idx, faites:

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

ensuite calculer u et v et vous pouvez tracer simplement en appelant quiver(x,y,u,v).

+0

@OliverRange s'il vous plaît voir mon édition pour une note supplémentaire sur l'efficacité – Wolfie