球面上のランダムな点
(3次元)単位球面上から、偏りなくランダムに点を得たいとします。
単位円上であれば、区間上の一様乱数
を生成すれば点
が目的のものとなりますが、
球座標で同様に「
は
、
は
上の一様乱数」としてしまうと極付近に点が偏ってしまいます。
方法1
区間
上の一様乱数を3つ生成し、
とする。
点が単位球に含まれていれば、
が目的のもの。含まれていなければやり直し。
分かりやすくて良いですね。
ただ、1回で点が得られるとは限らないのが残念です。
は単位球内から偏りなく選ばれるので、もちろん
も単位球面上から偏りなく選ばれます。
方法2
を
上の、
を
上の一様乱数とすれば、
が目的のもの。
これだとまた極方向に偏ってしまいそうですが、そうはなりません。
球座標で
を一様乱数にすると、微小面積
に対して(?)一様に点が
分布することになるため、が小さい極付近に点が集まってしまいます。
ここで
とすれば
となり、と
を一様乱数とすれば偏りは無くなります。