2017-04-14 366 views
2

我有一個函數(從MATLAB文檔複製而來)可以在球體內生成隨機點。但是,球內的一些點是不允許的。如何在空心球內產生隨機點,允許半徑爲1<r<2。換句話說,這些點應該位於半徑1到2之間,因此在r = [0 1]之間不允許有任何點。使用MATLAB生成空心球體內的隨機點

編輯:完全忘記包括功能

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

您是否嘗試在3D中生成半徑爲1和半徑爲2的球之間的隨機位置? –

+0

準確地說@StackPlayer。 – Ortix92

回答

1

替代的行

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

通過

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

其中r是外半徑和s是內半徑(新功能參數)。

這取代了(01)-uniform的是使用一種通過(x1)-uniform變量獲得在原始函數半徑可變。計算值x使得獲得的半徑具有原始分佈,但是將截去至區間(s,r)。這確保在所需區域上產生的3D分佈是統一的

0

可以輕鬆地生成2張隨機數作爲第一半徑(對它加1 0 使用和1之間,因此它在[1,2 ])。 用2pi乘以第二個隨機數。 將其從極座標轉換爲笛卡兒座標,您應該完成。

編輯:對第二個角度做同樣的操作以移動到3D。