dividing a circle into equal n parts and then generate random point inside each part
27 visualizzazioni (ultimi 30 giorni)
Mostra commenti meno recenti
Hassan
il 19 Ott 2013
Commentato: Walter Roberson
il 24 Mag 2018
I am trying to divide a circle (given the radius and the center)into n parts and then generate random points inside each part . If anyone has a sample code or can help me with this, thanks in advance.
1 Commento
Risposta accettata
Azzi Abdelmalek
il 19 Ott 2013
Modificato: Azzi Abdelmalek
il 19 Ott 2013
x0=2;
y0=1;
r=1;
teta=-pi:0.01:pi;
x=r*cos(teta)+x0
y=r*sin(teta)+y0
plot(x,y)
hold on
scatter(x0,y0,'or')
axis square
%----------------------------------------
% divide your circle to n sectors
n=8
tet=linspace(-pi,pi,n+1)
xi=r*cos(tet)+x0
yi=r*sin(tet)+y0
for k=1:numel(xi)
plot([x0 xi(k)],[y0 yi(k)])
hold on
end
16 Commenti
Walter Roberson
il 24 Mag 2018
Probably the easiest way to do equal spacing by area is to convert to Cartesian coordnates, and find grid points that are within the boundaries of the sector.
Più risposte (1)
Image Analyst
il 19 Ott 2013
2 Commenti
Image Analyst
il 19 Ott 2013
Modificato: Image Analyst
il 19 Ott 2013
Like I said, use the FAQ. Just modify it to use the angles you want. Below is does it for a sector going between pi/4 and 3pi/4:
% Create a random set of coordinates in a circle.
% First define parameters that define the number of points and the circle.
n = 5000;
R = 20;
x0 = 50; % Center of the circle in the x direction.
y0 = 90; % Center of the circle in the y direction.
% Now create the set of points.
% For a full circle, use 0 and 2*pi.
%angle1 = 0;
%angle2 = 2*pi;
% For a sector, use partial angles.
angle1 = pi/4;
angle2 = 3*pi/4;
t = (angle2 - angle1) * rand(n,1) + angle1;
r = R*sqrt(rand(n,1));
x = x0 + r.*cos(t);
y = y0 + r.*sin(t);
% Now display our random set of points in a figure.
plot(x,y, '.', 'MarkerSize', 5)
axis square;
grid on;
% Enlarge figure to full screen.
set(gcf, 'units','normalized','outerposition',[0 0 1 1]);
fontSize = 30;
xlabel('X', 'FontSize', fontSize);
ylabel('Y', 'FontSize', fontSize);
title('Random Locations Within a Circle', 'FontSize', fontSize);
Just do this once for every sector you want to fill.
Vedere anche
Categorie
Scopri di più su Signal Analysis in Help Center e File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!