2017-06-18 38 views
2

我想绘制几个同心圆几点就像这样:如何依次绘制几个同心圆上的点?

sample image

在不同的圈子点的数量是相同的,待确定。半径的差异是相同的。

但是我面临的问题是,如果我想使用for函数,我定义了i = 1:total number of points。我不知道如何选择正确的角度值。谁能帮我?

这里是我写的代码:

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 

回答

1

您可以使用polarplot为:

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 

这里我用的轴网绘制圆。如果这不是您可以根据需要只写:

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

concentric circles