半球上の一様分布点群(4)

直交座標表現の半球上の一様分布点群(極座標が不要な場合)

http://d.hatena.ne.jp/senna_hpp/20061019/p1

素直にやると次のようになりそう

(\xi_1,\xi_2) = (U[0, 1], U[0, 1])
(\theta,\phi) = (\cos^{-1}{\xi_1}, 2 \pi \xi_2)
(x,y,z) = (\sin{\theta} \cos{\phi}, \sin{\theta} \sin{\phi}, \cos{\theta})
(x,y,z) = (\sin(\cos^{-1}{\xi_1}) \cos{2 \pi \xi_2}, \sin(\cos^{-1}{\xi_1}) \sin{2 \pi \xi_2}, \cos{2 \pi \xi_1})

しかし別に見つけた記述のように、次のようにもできる
  • 半球

(z,\phi) = (U[ 0, +1], U[ 0, 2 \pi])
(x,y,z) = (sqrt{1-z^2} \cos{\phi}, sqrt{1-z^2} \sin{\phi}, z)

  • 全球

(z,\phi) = (U[-1, +1], U[ 0, 2 \pi])
(x,y,z) = (sqrt{1-z^2} \cos{\phi}, sqrt{1-z^2} \sin{\phi}, z)

 可視化の方では[F3]キーでは元の記事の定義とかみ合う変換にしました。上記後者の方法を[F4]キーに追加しました。

plot@random on hemisphere

http://xelf.info/xna/XELF.HemispherePlot/publish.html

キーボード モード分類 機能 起動時設定 関数
[F1] 球面分布 重点的サンプリング用分布 - {\vec{\omega_d}} \quad = \quad (\theta,\phi) \quad = \quad (\cos^{-1}\sqrt{\xi_1},2\pi\xi_2)
[F2] 球面分布 一様分布の失敗作 - {\vec{\omega_d}} \quad = \quad (\theta,\phi) \quad = \quad (\frac{\pi}{2} \xi_1,2\pi\xi_2)
[F3] 球面分布 一様分布(極座標を経由) - {\vec{\omega_d}} \quad = \quad (\theta,\phi) \quad = \quad (\cos^{-1} \xi_1,2\pi\xi_2)
[F4] 球面分布 一様分布(直に直交座標) (z,\phi) = (U[ 0, +1], U[ 0, 2 \pi])\\(x,y,z) = (sqrt{1-z^2} \cos{\phi}, sqrt{1-z^2} \sin{\phi}, z)
[F5] 入力乱数 乱数(65536諧調) -
[F6] 入力乱数 量子化乱数(256諧調)
[F9] 分布範囲 半球
[F10] 分布範囲 全球 -
  • XNAβランタイムで動作します。
  • ClickOnce配布です。
  • 実行環境を整えて起動するとフルスクリーン表示になります。
  • 終了はWindows標準の[Alt]+[F4]などをご利用ください。
  • 最初に点をたくさん打って、そのあと少しずつ書き換えていきます。
  • 適当に回転します。
  • 上記のキー入力によって分布条件を変更できます。