回答
編輯:請注意,此解決方案可能不統一。請參閱下面的Mark Dickinson的評論。
好吧,我覺得我明白了。請注意,該解決方案在this answer中受到很大啓發,並且r1 = R1/R1和r2 = R2/R1。
僞代碼:
t = 2*pi*random()
u = random()+random()
r = if u>1 then 2-u else u
r = if r<r2 then r2+r*((R1-R2)/R2) else r
[r*cos(t), r*sin(t)]
這是數學。
f[] := Block[{u, t, r}, u = Random[] + Random[];
r1 = 1; r2 = 0.3;
t = Random[] 2 Pi;
r = If[u > 1, 2 - u, u];
r = If[r < r2, r2 + r*((R1 - R2)/R2), r];
{r Cos[t], r Sin[t]}]
ListPlot[Table[f[], {10000}], AspectRatio -> Automatic]
它所做的是重新映射全部落入圓圈內進入環的數字,均勻地分散它們。如果有人發現此解決方案的一致性問題,請發表評論。
比較這個其他的解決辦法找到here:
這是一個整潔的答案,但不幸的是結果並不統一。如果嘗試使用例如「R2 = 0.95」和「R1 = 1.0」,則會看到靠近環外的點更受歡迎。生成一個合適的'r'的正確方法是在'[R2,R1]'和'v'中統一選擇'u',隨機變量'u'和'v'選擇''[0,R2 + R1 ]',如果'v = u'則取'r = u'。 –
馬克,感謝您的評論和您的選擇。你確定我的解決方案是不一致的嗎?我無法注意到它,即使在R2 = 0.95的情況下也是如此:http://i.imgur.com/wmDEo.png –
很確定,是的。 :-)下面是一個你可以做的測試:取R2 = 0.5和R1 = 1.0,併產生10,000個樣本(比如說)。現在通過添加一個半徑爲0.75的圓來將環分爲兩部分,並計算您生成的樣本中有多少位於外環中(0.75 <=半徑<= 1.0),內環中有多少(0.5 <=半徑<= 0.75)。如果溶液是均勻的,你應該得到接近7/5 = 1.4的比值(外環面積= 7/16 pi;內環面積= 5/16 pi)。我還沒有測試過,但我預測你的解決方案會提供接近5/3 = 1.66666的比率...... –
最簡單的方法是使用rejection sampling。在邊長2 * R2的正方形中均勻地生成大量點,然後將這些樣本過濾到外部圓內而不是內部圓中。
不漂亮或高效,但在大多數情況下,已足夠。
他說他不想使用拒收抽樣。而對於拒絕抽樣,至少可以從他所鏈接的方法開始,在較大的圓圈中統一點。 –
它很容易。使用極座標,即爲角度值theta生成一個隨機值,併爲距離原點的距離生成一個。由於你的圈子都在同一個起源,這很容易。
但是注意:你可以通過一個統一的隨機函數來生成theta值,這很好,但是對於你不能這麼做的距離,因爲這樣點就會聚集在原點周圍。 你必須考慮到圓的周長在^ 2增長(你必須使用平方根的倒數)。
使用統一分佈的隨機函數rnd
(0..1)這將是這樣的:
theta = 360 * rnd();
dist = sqrt(rnd()*(R1^2-R2^2)+R2^2);
編輯:對於轉化爲笛卡爾座標,你剛纔計算:
x = dist * cos(theta);
y = dist * sin(theta);
我懷疑典型的'cos'和'sin'函數需要度數,更可能是弧度。但這是一種工作方法。 –
如果可能的話,我想避免sqrt()像我在鏈接的答案。我也不想使用拒絕抽樣。 –
影響你的功能。如果你不使用度數而是弧度,只需將360替換爲2 * PI – flolo
- 1. 均勻分佈的隨機數生成
- 2. 在矩形內(均勻地)生成隨機點?
- 3. Omnet ++均勻隨機數生成
- 4. 非均勻隨機數生成器
- 5. 在分佈式環境中生成均勻分佈的隨機數
- 6. 產生不均勻的僞隨機數
- 7. 在給定範圍內生成均勻隨機偏差
- 8. 生成均勻分佈的隨機排列的算法
- 9. 用於生成均勻分佈的隨機位集的方法
- 10. 非均勻隨機發生器
- 11. 隨機點不是均勻分佈
- 12. 從均勻分佈生成隨機數的最快方法python
- 13. 生成均勻分佈的僞隨機數在C++
- 14. 生成一個邊緣均勻分佈的隨機圖
- 15. 如何生成均勻分佈的隨機DFA?
- 16. 生成一個非均勻分佈的隨機數
- 17. 在CUDA設備上生成均勻的雙隨機數
- 18. 製作CURAND從均勻分佈生成不同的隨機數
- 19. 在C++的特定範圍內生成隨機均勻可分的數字?
- 20. 均勻分佈在一個平截頭體內的隨機點
- 21. 隨機均勻分佈
- 22. 隨機均勻分佈
- 23. 在均勻分佈的矩形邊界上生成一個隨機點
- 24. 生成沒有循環的隨機數
- 25. 生成循環的隨機數
- 26. 循環中的隨機生成器
- 27. 生成500行隨機數,30行,均勻分佈
- 28. 生成均勻隨機變量時下限爲接近零
- 29. 在球體上均勻地生成點
- 30. 均勻分佈的隨機數
感謝您的編輯,不知道面積稱爲環。 ;-) –
補充澄清,指出我想避免平方根(因此,不完全是另一個的重複)。 –
我想讓它變成你在[R1,R2]鏈接問題中改變'[0,R]'的情況,但我敢打賭這並不那麼簡單。或者是? – AakashM