2017-04-14 1 views
2

Ich habe eine Funktion (kopiert aus der MATLAB-Dokumentation), die zufällige Punkte innerhalb einer Kugel erzeugt. Einige Punkte innerhalb der Kugel sind jedoch nicht zulässig. Wie kann ich Zufallspunkte innerhalb einer Hohlkugel mit dem zulässigen Radius 1<r<2 erzeugen? Mit anderen Worten, die Punkte sollten auf einem Radius von 1 bis 2 liegen, so dass keine Punkte zwischen r = [0 1] erlaubt sind.Erzeugen von zufälligen Punkten innerhalb der Hohlkugel mit MATLAB

EDIT: ganz vergessen die Funktion

function [x,y,z] = PointsInSphere(r,n) 

rvals = 2*rand(n,1)-1; 
elevation = asin(rvals); 
azimuth = 2*pi*rand(n,1); 
radii = r*(rand(n,1).^(1/r)); 
[x,y,z] = sph2cart(azimuth,elevation,radii); 
end 
+1

Versuchen Sie zufällige Orte in 3D zu erzeugen, die zwischen der Kugel mit Radius 1 und der mit Radius 2 liegen? –

+0

@StackPlayer genau. – Ortix92

Antwort

1

Substitute die Linie

radii = r*(rand(n,1).^(1/r));

von

x = (s/r)^r; 
radii = r*(x+(1-x)*rand(n,1)).^(1/r); 

wo r der Außenradius und s ist der innere Radius (neue Funktion Argument).

Dies ersetzt den (0, 1) -Einheitliche Variable, die zum Erhalten der Radien in der ursprünglichen Funktion durch einen (x, 1) -Einheitliche Variable verwendet wurden. Der Wert x wird so berechnet, dass die erhaltenen Radien die ursprüngliche Verteilung haben, aber abgeschnitten zu dem Intervall (s, r). Dies stellt sicher, dass die resultierende 3D-Verteilung einheitlich auf der gewünschten Region ist.

0

Schnell einschließen können 2 Zufallszahlen zwischen 0 und 1. Verwenden zu erzeugen, um den ersten (als Radius 1 um es hinzuzufügen, so dass es in ist [1,2 ]). Multiplizieren Sie die zweite Zufallszahl mit 2pi. Konvertieren Sie das von polaren zu kartesischen Koordinaten und Sie sollten fertig sein.

Edit: tun Sie dasselbe mit einem zweiten Winkel, um zu 3D zu bewegen.

Verwandte Themen