GeForce GTX 1070 (8GB)
ASRock Z170M Pro4S [Intel Z170chipset]
Ubuntu 16.04 LTS desktop amd64
TensorFlow v1.2.1
cuDNN v5.1 for Linux
CUDA v8.0
Python 3.5.2
IPython 6.0.0 -- An enhanced Interactive Python.
gcc (Ubuntu 5.4.0-6ubuntu1~16.04.4) 5.4.0 20160609
GNU bash, version 4.3.48(1)-release (x86_64-pc-linux-gnu)
scipy v0.19.1
geopandas v0.3.0
MATLAB R2017b (Home Edition)
関連: ADDA > Euler angle rotation > beta, gammaに対して計算する
pySphereptsにより、2つのnode setsのx,y,z座標セットを得ることはできている
(Icosahedral nodesとHammersley nodes)。
関係式
これをADDAの計算で使うには、Euler angle rotationのbeta, gammaの値に変換する必要がある。
ADDAでは下記の手順でrotationを行う。
- beta: y軸に対して回転する
- gamma: z軸に対して回転する
P_2 = R_z(\gamma) R_y(\beta) P_1 ... (1)
上記の式を具体的に書くと以下となる。
\left[
\begin{array}{c}
x_2 \\
y_2 \\
z_2 \\
\end{array}
\right]
=
\left[
\begin{array}{ccc}
cos\gamma & -sin\gamma & 0 \\
sin\gamma & cos\gamma & 0 \\
0 & 0 & 1 \\
\end{array}
\right]
\left[
\begin{array}{ccc}
cos\beta & 0 & sin\beta \\
0 & 1 & 0 \\
-sin\beta & 0 & cos\beta \\
\end{array}
\right]
\left[
\begin{array}{c}
x_1 \\
y_1 \\
z_1 \\
\end{array}
\right] ... (2)
展開すると以下となる。
\left[
\begin{array}{c}
x_2 \\
y_2 \\
z_2 \\
\end{array}
\right]
=
\left[
\begin{array}{ccc}
cos\gamma cos\beta & -sin\gamma & cos\gamma sin\beta \\
sin\gamma cos\beta & cos\gamma & sin\gamma sin\beta \\
-sin\beta & 0 & cos\beta \\
\end{array}
\right]
\left[
\begin{array}{c}
x_1 \\
y_1 \\
z_1 \\
\end{array}
\right] ... (3)
pySphereptsのx,y,z座標セット(x_2, y_2, z_2?)と上記の式からbeta, gammaを得ることはできるのだろうか?
他に関係しそうな式としては以下がある。
x_1^2 + y_1^2 + z_1^2 = 1 ... (4)
x_2^2 + y_2^2 + z_2^2 = 1 ... (5)
方向(0,0,1)からの入射光
z軸方向の入射光を考える。
ベクトルは(0,0,1)となる。
式(3)に代入すると以下となる。
x_2 = cos\gamma sin\beta \\
y_2 = sin\gamma sin\beta \\
z_2 = cos\beta \\
... (6)
上記の式は一般的に見る、天頂角と方位角による座標変換の式と同一である。
式(6)ならgamma, betaを解くのは朝飯前だ (piece of cake)。
朝飯はもう食べたけど。
所感
昔の上司の教授が「一見難しい問題は初期条件や境界条件を与えると簡単に解けるようになる」と言っていたのを思い出した。「z軸方向の入射光」という条件を与えることで簡単に解けた。