Reputation: 21
I want to plot several points on several concentric circles just like this:
The number of points on different circles are same and to be determined. The difference of radius are same.
But I face the problem that if I want to use the for
function, I define i = 1:total number of points
. I don't know how to select correct angle value. Can anyone help me?
Here is the code that I wrote:
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
Upvotes: 2
Views: 635
Reputation: 10440
You can use polarplot
for that:
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
Here I use the axes grid to draw the circles. If this is not needed you can just write:
[angles,rad] = meshgrid(0:angle_point:360,1:R_steplength:max_R);
polarplot(ax,deg2rad(angles),rad,'r.') % plot all the points
Upvotes: 1