Rodrigues space による回転の表現と GrainSpotter

3次元空間で、原点を始点とするベクトル u を、原点を始点とする別のベクトル v に重ねる回転は無数にある。u, v に直交する軸で回転させるのが直感的かもしれないが、回転した後にさらに v を軸に任意に回転させることができる。また、原点を頂点として、u, v が表面にあるような円錐は無数に存在するが、これは各円錐の中心を軸とする回転が無数に存在することを表している。u1→v1, u2→v2 のように対応関係が2組以上あれば、それらを重ねあわせる回転は一意に決まる。

3次元空間の回転は、3つの自由度を持つ。これは、3つの Euler angle として表現することもできるし、回転角度と回転軸(方向なので自由度2)とも表現できる。四元数を使って表すこともできる(成分は4つあるが、|q| = 1 なので自由度は 3)。Rodrigues space による表現もそういった表現の1つである。

Rodrigues space は3次元空間であり、回転軸方向を表した単位ベクトルを \tan\frac{\theta}{2} 倍したものである。Rodrigues space には面白い性質がある。上で述べたように「u を v に重ねる回転」は無数に存在するが、それらは Rodrigues space 上で一直線上に並ぶのだ。

これを複数格子の指数付けに利用したのが GrainSpotter (Schmidt, Søren. GrainSpotter: a fast and robust polycrystalline indexing algorithm Journal of Applied Crystallography 47.1 (2014) )である。GrainSpotter は格子定数がわかっていて、結晶方位を決めたい場合に使う。格子定数未知の場合への拡張もあるが今回は触れない。

まず、既知の格子定数と散乱ベクトルから、各反射の指数を決める。粉末回折の指数付けと同じ原理だ。反射を逆空間に投影して、原点からの距離を求めれば良い。格子の対称性が高い場合はいくつかの候補が生じるが、そういう時は低次の反射を全部試す。

次に、反射ごとに、基準方位にある結晶から生じる散乱ベクトルを計算し、観測した位置に重ね合わせるための回転を求める。各反射ごとに回転は無数に存在するが、それは Rodrigues space では一直線に並ぶ。ここで、反射 a1, a2, a3, a4, ... が共通の結晶 A に由来するならば、それぞれの反射を対応する基準反射に重ねるための回転たちは、Rodrigues space 中での直線 l1, l2, l3, l4, ... となるが、全て 1 点で交わる。これが結晶 A の方位である。一方、反射 b1, b2, b3, ... が別の結晶 B に由来するならば、これらはこれらで 1 点で交わる。このように、複数格子の指数付け問題が Rodrigues space 中で線分がたくさん集まった場所を探す問題に帰着されるのである。