2014-03-31 11 views
5

enter image description here Hallo ich möchte eine Frage stellen, wie man einen Kreis in Matlab macht und sein Zentrum markiert und eine bestimmte Anzahl von zufälligen Punkten darin erzeugt, zum Beispiel 50? Ich kenne diesen Code einen Kreiswie man einen Kreis in Matlab macht und zufällige Punkte darin erzeugt

x = linspace(-sqrt(10),sqrt(10)); 
y1 = sqrt(10-x.^2); 
y2 = -sqrt(10-x.^2); 
plot(x,y1,x,y2) 
axis equal 
hold on 

zu machen, aber ich weiß nicht, wie 50 zufällige Punkte zu erzeugen, im Innern dann i diesen Pseudo-Code gedacht, aber ich weiß nicht, wie es in Matlab zu schreiben

01: FOR all nodes j 
02: FOR all nodes i except node j 
03: IF distance(j to center) < distance(j to i) AND 
04: distance(i to cell center) < distance(j to i) 
05: THEN there's a red link from node i to node j 
06: ELSEIF distance(j to cell center) < distance(j to i) 
07: THEN there's a blue link from node i to node j 
08: ELSE there's no D2D link from node i and j; 
09: node i has a green link with the base station 
10: END if 
11: END inner for-loop 
+0

Ich verstehe Ihre Frage nicht. Der Peudo-Code definiert einen Link, der auf einer definierten Menge von Knoten gesetzt ist, er erzeugt keine zufällige Menge von Knoten. – Daniel

+0

Möchten Sie, dass die Punkte gleichmäßig im Kreis verteilt sind? – pjs

+0

nur eine Seite, Sie können zufällige Punkte in einem Quadrat, das den Kreis enthält und nur diejenigen des Herbstes in den Kreis ... – bla

Antwort

3

Ich glaube, das ist das, was Sie brauchen -

%%// Plot the circle 
x = linspace(-sqrt(10),sqrt(10)); 
y1 = sqrt(10-x.^2); 
y2 = -sqrt(10-x.^2); 
plot(x,y1,x,y2) 
axis equal 

%%// Choose from 1000 random point pairs 
N = 1000; 
%%// Radius of circle 
radius = sqrt(10); 

%%// Create a random point matrix Nx2 
points_mat = [ radius*2*(rand(N,1)-0.5) radius*2*(rand(N,1)-0.5)]; 

%%// Select the first 50 pairs that lies inside circle 
ind1 = find(sqrt(points_mat(:,1).^2 + points_mat(:,2).^2)<radius); 
points_mat=points_mat(ind1(1:50),:); 

%%// Plot the 50 points on the circle 
hold on 
text(0,0,'x Center') %%// Center 
text(points_mat(:,1),points_mat(:,2),'o') %%// 50 points 

Plot

enter image description here

+0

Vielen Dank, so wissen Sie danach, wie kann ich die Entfernung zwischen jedem Punkt im Kreis und den Rest der Punkte und jeden Punkt und der Mitte wie dieser Pseudo-Code 01: Für alle Knoten j 02: Für alle Knoten i außer Knoten j 03: IF-Abstand (j zu Mitte) user3482135

+2

Schauen Sie in 'pdist2'. Es macht genau das. Mehr Infos hier - http://www.mathworks.in/help/stats/pdist2.html – Divakar

3

Ich weiß nicht, Matlab, so kann ich Ihnen da nicht helfen, aber wenn Sie wollen, dies zu tun, ohne Ablehnung können Sie die Punkte in Polarkoordinaten erzeugen. Wenn rand() einen Uniform (0,1) Zufallszahl zurückgibt, dann gilt:

r = radius * sqrt(rand()) 
theta = 2 * Pi * rand() 
x = r * cos(theta) 
y = r * sin(theta) 

werden Werte ergeben, die innerhalb eines Kreises des Radius radius gleichmäßig verteilt sind. Beachten Sie die Quadratwurzel bei der Berechnung von r, die die Verteilung der Entfernung von der Mitte des Kreises anpasst, so dass die Anzahl der Punkte in einer bestimmten Entfernung immer proportional zur Fläche ist und daher einheitlich ist. Für die sphärische Einheitlichkeit würden Sie die Kubikwurzel nehmen, um die Proportionalität zum Volumen zu halten, und im Allgemeinen die Wurzel für eine k-dimensionale Hypersphäre.

+0

Diese Punkte werden nicht gleichmäßig im Kreis verteilt.Ihre Radial- und Winkelpositionen sind gleichmäßig verteilt, aber da das Flächenelement r * (dtheta) (dr) ist, gibt es mehr Fläche bei einem großen Radius, so dass Sie mehr Punkte mit einem großen Radius wählen müssen, um eine gleichmäßige Verteilung zu erhalten im Weltraum. Mehr hier: http://stackoverflow.com/questions/5837572/generate-a-random-point-within-a-circle-uniformly –

+0

Ich vermisste die 'sqrt' drin, sehr leid, dass. Mein Fehler. Leider sieht es so aus, als wäre mein Downvote jetzt gesperrt, es sei denn, der Beitrag wurde bearbeitet :(Du könntest deine zusätzlichen Erklärungen hinzufügen und ich wechsle gerne zu einer Upvote. –

+0

@DougLipinski Erklärungen sind gut, ich hätte sie vorher einfügen sollen Danke für den Vorschlag – pjs

0

Hier ist eine andere Option:

%// Set parameters 
R = 0.5; %// radius 
C = [3 4]; %// center [x y] 
N = 50; %// number of points inside circle 

%// generate circle boundary 
t = linspace(0, 2*pi, 100); 
x = R*cos(t) + C(1); 
y = R*sin(t) + C(2); 

%// generate random points inside it 
th = 2*pi*rand(N,1); 
r = R*rand(N,1); 

xR = r.*cos(th) + C(1); 
yR = r.*sin(th) + C(2); 

%// Plot everything 
figure(1), clf, hold on 
plot(x,y,'b') 
plot(C(1),C(2),'r.', 'MarkerSize', 100) 
plot(xR,yR,'k.') 
axis equal 

enter image description here

Hier ist der Grund, dass nützlich sein könnte:

%// Set parameters 
R = 0.5;  N = 50; 
C = [3 4]; M = 100; %// points on boundary 

%// generate all points at once 
t = linspace(0, 2*pi, M)'; 
th = 2*pi*rand(N,1); 
r = R*rand(N,1); 
xR = [R*ones(M,1); r] .* cos([t; th]) + C(1); 
yR = [R*ones(M,1); r] .* sin([t; th]) + C(2); 

%// Plot everything 
figure(1), clf, hold on 
plot(xR(1:M),yR(1:M),'b')    %// circle boundary 
plot(C(1),C(2),'r.', 'MarkerSize', 100) %// center 
plot(xR(M+1:end),yR(M+1:end),'k.')  %// random points 
axis equal 
+0

Vielen Dank, wissen Sie danach, wie kann ich die Entfernung zwischen jedem Punkt im Kreis und den Rest der Punkte und jedem Punkt und der Mitte wie das Bild oben und Pseudocode a 01 messen: Für alle Punkte j 02: Für alle Punkte i außer Punkt j 03: IF Abstand (j zu Mitte) user3482135

Verwandte Themen