2017-06-18 1 views
2

Je veux tracer plusieurs points sur plusieurs cercles concentriques comme ceci:Comment tracer des points sur plusieurs cercles concentriques en séquence?

sample image

Le nombre de points sur les différents cercles sont les mêmes et à déterminer. La différence de rayon est la même.

Mais je fais face au problème que si je veux utiliser la fonction for, je définis i = 1:total number of points. Je ne sais pas comment sélectionner la valeur d'angle correcte. Quelqu'un peut-il m'aider?

Voici le code que j'ai écrit:

R_steplength = 1; %difference of radius 
angle_point = 20; %total number of points on one circle 
max_R = 4; %outer radius of circle 
central_x = 1; % origin of concentric circle 
central_y = 1; 

total_circle_points = (max_R/R_steplength) * angle_point; %calculate total 
points 
fin_x= zeros(1, total_circle_points); %define output points position 
fin_y = zeros(1, total_circle_points); 

for i = 1:total_circle_points 
    for j = 1:angle_point 
     if rem(i+1, 20)~= 1 
      k = floor(i/20); 
      angles = linspace(0,2*pi,angle_point); 
      fin_x(i) = R_steplength*(k+1)*cos(angles(j))+central_x; 
      fin_y(i)= R_steplength*(k+1)*sin(angles(j))+central_y; 
     else 
      fin_x(i) = central_x + R_steplength*(k+2); 
      fin_y(i) = central_y + R_steplength*(k+2); 
     end 
     plot(fin_x(:),fin_y(:),'ro') 
    end 

end 

Répondre

1

Vous pouvez utiliser polarplot pour que:

ax = polaraxes; % create polar axes 
% calculate all points locations: 
[angles,rad] = meshgrid(0:angle_point:360,1:R_steplength:max_R); 
polarplot(ax,deg2rad(angles),rad,'r.') % plot all the points 
ax.GridColor = 'k'; % set grid color to black 
ax.GridAlpha = 1; 
ax.ThetaAxis.TickValues = 10:20:360; % set radius grid between the points 
ax.RAxis.TickValues = 1.5:R_steplength:(max_R+0.5); % set circles between the points 
ax.RAxis.Limits = [0 max_R+0.5]; % show the outer circle 

J'utilise ici la grille d'axes pour dessiner les cercles. Si cela n'est pas nécessaire, vous pouvez simplement écrire:

[angles,rad] = meshgrid(0:angle_point:360,1:R_steplength:max_R); 
polarplot(ax,deg2rad(angles),rad,'r.') % plot all the points 

concentric circles