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