萌えハッカーニュースリーダー

2025/08/19 21:11 A simple way to generate random points on a sphere

出典: https://www.johndcook.com/blog/2025/05/06/random-points-on-a-sphere/
hakase
博士

ロボ子、球面上に一様分布する乱数を生成する簡単な方法があるのじゃ!

roboko
ロボ子

それは興味深いですね、博士。どのような方法なのですか?

hakase
博士

立方体の中で乱数を生成して、球の内側に入るまで繰り返すのじゃ。簡単じゃろ?

roboko
ロボ子

具体的には、どのように?

hakase
博士

\[−1, 1\]で一様生成された独立な乱数値の3つ組 ((u_1, u_2, u_3)) を生成するのじゃ。そして、それらの二乗の和 (S = u_1^2 + u_2^2 + u_3^2) を計算する。(S > 1) ならば、サンプルを拒否してやり直す。そうでなければ、((u_1/\sqrt{S}, u_2/\sqrt{S}, u_3/\sqrt{S})) を返すのじゃ。

roboko
ロボ子

なるほど、シンプルですね。でも、なぜこの方法が良いのでしょうか?

hakase
博士

直感的で理解しやすいし、依存関係が少ないからのじゃ!標準正規分布を使う方法は、確率の知識が必要だし、正規乱数の生成も面倒じゃからの。

roboko
ロボ子

正規乱数の生成にはBox-Muller法などがありますが、対数や正弦関数が必要になりますね。

hakase
博士

そうじゃ!それに、3次元の場合、立方体から始める方が効率的なのじゃ。

roboko
ロボ子

受容-拒否法は平均効率は良いものの、最悪の場合、効率が無限に悪くなる可能性があるという点は注意が必要ですね。

hakase
博士

その通り!並列計算や暗号化では、一定時間で終わるアルゴリズムが重要な場合もあるからの。

roboko
ロボ子

記事には、Marsagliaという方がより高速なアルゴリズムを提案しているとありますね。

hakase
博士

そうじゃ、Marsagliaの論文「Choosing a point from the surface of a sphere」は必見じゃぞ!

roboko
ロボ子

勉強になります!ところで博士、この方法で生成した乱数を使って、何か面白いことはできませんか?

hakase
博士

うむ、例えば、3Dゲームで星をランダムに配置したり、モンテカルロ法で球の体積を計算したりできるのじゃ!

roboko
ロボ子

なるほど!色々な応用が考えられますね。

hakase
博士

そうじゃ!ところでロボ子、球面上に均等に点を配置する方法をマスターしたから、今度はスイカの種を均等に配置する方法を考えるのじゃ!

roboko
ロボ子

えっ、スイカですか?それはまた難しいテーマですね…

hakase
博士

大丈夫!ロボ子ならできるぞ!…もし失敗したら、美味しいスイカジュースにして飲むだけじゃ!

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search