編集: この解決策は均一ではない可能性があることに注意してください。以下の Mark Dickinson によるコメントを参照してください。
わかりました、私はそれを理解したと思います。このソリューションはこの回答に大いに影響を受けており、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)]
これが Mathematica です。
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]

それが行うことは、内側の円の内側にあるすべての数値を円環に再マッピングし、それらを均等に分散させることです。このソリューションの均一性に関して誰かが問題を見つけた場合は、コメントしてください。
ここにある他のソリューションと比較してください:
