2017-06-18 5 views
2

Ich möchte auf mehreren konzentrischen Kreisen mehrere Punkte zeichnen wie folgt aus:Wie können Punkte nacheinander auf mehrere konzentrische Kreise aufgetragen werden?

sample image

Die Anzahl der Punkte auf verschiedenen Kreisen gleich sind und bestimmt werden. Die Differenz des Radius ist gleich. Wenn ich die for Funktion verwenden möchte, definiere ich i = 1:total number of points. Ich weiß nicht, wie man den richtigen Winkelwert wählt. Kann mir jemand helfen? Hier

ist der Code, den ich schrieb:

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 

Antwort

1

Sie polarplot dafür verwenden können:

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 

Hier verwende ich die Achsen Gitter, um die Kreise zu zeichnen. Ist dies nicht erforderlich ist, können Sie einfach schreiben:

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

concentric circles

Verwandte Themen