DOSEIの日記

技術メモ+日常ログ

球面上の勾配とその座標変換

どこにも、変換式が書かれていない。誰に聞いても知らない。そんな、球面上の座標変換における勾配の変換式を頑張って計算してみよう!これ見ればもっと簡単だよっていう情報がある人は、コメントプリーズ。そもそも球面とか勾配とか座標変換って何っていうおともだちは、近くのお兄さんやおねいさんに聞いてみよう。

で、 S^2 上の点を  (\phi, \theta) であらわし、 R^3 に埋め込みをして,  [x, y z]^\top = [\sin \theta \cos \phi, \sin\theta\sin\phi, \cos\theta]^\top で対応させるとしよう。このとき S^2 上の関数 f の勾配は  \nabla f := [\frac{1}{\sin \theta} \partial_{\phi}f, \partial_{\theta} f ]^\top である.
球面上の座標系の変換は、 R^3 上の回転であるから、適当な回転行列  R \in SO(3) を使って、  x' := Rx とすれば、f の座標変換後の関数は  g(x) = f(x') = f(R^{-1}x) = f(R^\top x) と書ける。

で、  R = R_z(r_\phi)R_y(r_\theta)R_z(r_\psi) と、いわゆるオイラー角で表すと、  R_z(r_\psi)\phi 座標の変位をずらすだけで、微分方向は不変。したがって、座標変換は、 r_\phi, r_\theta だけに依存することが分かる。

さて、勾配ベクトルは点 x の接平面上のベクトルだと思えば、座標変換は、この平面上の直交基底の読み替えであり、それは単なる回転である。 n を北極 (0,0,1) とし、 p := R n を定義すると、p の球面座標はちょうど  (r_\phi, r_\theta) になっていることが分かる。 x に対する $\theta$ 軸方向は、座標変換の前後でそれぞれ x と p または n を通る大円の接平面への投影である。したがって、それぞれの座標系が alpha の角をなす(=2つの大円のなす角)とすると、大円の法線ベクトルがそれぞれ  c := x \times n,  c' := x \times p とかける。

 \hat{c}' \times \hat{c} = (\sin \alpha)x
 \hat{c}' \cdot \hat{c} = \cos \alpha
がなりたつ。ここで、ハットは単位ベクトルに正規化することを示す。これを解くと、
 \sin \alpha = (p_y x - p_x y)/(|c||c'|)
 \cos \alpha = ((p_z x - p_x z)x - (p_y z - p_z y)y)/(|c||c'|)
となり、勾配の変換は
 \nabla f(R^{-1}x) = \left[ \begin{array}{rr} \cos \alpha & -\sin\alpha \\ \sin \alpha & \cos \alpha \end{array}\right] \nabla f(x)
となる(はず)。

考察

  • なんかもっと簡単にならないの?
  • あー x = p, x = n のときは困るね。
  • これが、微分のチェインルールから出てくるとは思えない