概要
「四元数と3次元空間中の回転」の付録。
四元数の数学的な側面について説明します。
はっきり言って、画像処理の分野では不要な知識。 画像処理(主に 3D CG)の分野では、とりあえず、 「四元数とは、回転の軸と角度を表わすために使うデータの形式」 とだけ覚えておけば OK。
ここで話す内容は要するに、 「なんでそれを四元数と呼ぶんだろう」という疑問に答えるものです。
ちなみに、「ハミルトンの四元数体」の内容の焼き直しだったりします。 より深く理解するためには、 「群」、 「環」、 「体」などについて調べることをお勧めします。
その前に・・・ 複素数についておさらい
四元数の説明に入る前に、 少し複素数についておさらいしておきます。 簡単に言うと、複素数ってのは以下のようなものです。
-
実数に、 i2 = −1 となる元iを追加したもの。
-
実数上の2次元ベクトルともみなせる。
-
曲形式 α = r ( cosθ + i sinθ ) で表現できる。
-
複素数同士の掛け算で、2次元の回転を表現できる。
-
四則演算に関して閉じている。
で、四元数はこれと似た性質を持っています。 (というか、複素数をさらに拡張した数になっています。)
-
複素数に、虚数単位iに加えてさらに、 j2 = −1 となる元jを追加したもの。
-
すなわち、i, jと k = ij を使って、 a + i b + j c + k d と表わされる(a, b, c, dは実数)。
-
複素数上の2次元ベクトル、実数上の4次元ベクトルとみなせる。
-
回転軸となる単位ベクトル (x, y, z) と角度θを使って、 q = r ( sinθ, x cosθ, y cosθ, z cosθ ) と表現したりする。
-
四元数の掛け算を使って、3次元の回転を表現できる。
-
四則演算に関して閉じている。ただし、複素数と違って、積は非可換。
四元数
複素数は、実数に対して i = −1 となる数 i を付け足したもので、 2つの実数 a, b を使って a + i b と書ける数です。
これと同様に、今度は複素数に対して、 j = −1 となる数 j をさらに付け足したものが四元数(quaternion)です。 2つの複素数 α, β を使って、
と書くか、あるいは、 k = ij と置いて、 4つの実数 a, b, c, d を使って、
と書けます。 四元数という名前は、見ての通り、4つの実数から成る数という意味です。
ちなみに、 i, j, k の間には、以下のような関係が成り立ちます。
四元数は、発見者の名前を取ってハミルトンの四元数(Hamilton's quaternion)とも呼ばれます。
実部と虚部
複素数では実部が実数1つ、虚部も実数1つでしたが、 四元数では虚部が3つになっています。 この虚部の3つの実数は1セットで意味を持っていたりするので、 四元数、
を、 実部 x = a と、 虚部 u = (b, c, d) に分けて、
と表したりします。 実部・虚部をそれぞれスカラー部・ベクトル部と呼んだりもします。
また、ベクトル部が 0 ベクトルのとき、 四元数 ( x; 0 ) を実数と同一視し、 単に x で書き表します。
このような形式を用いることで、以下に述べるように、 加減乗除などの計算が簡単に書き表すことができます。
加減算
まず、四元数の加減算は非常に単純で、以下のようになります。
乗算
次に、乗算ですが、
なので、ベクトル表現では以下のようになります。
ただし、 2つのベクトル u, v に対する u ⋅ v 、 u × v はそれぞれ、ベクトルの内積・外積です。
複素数の場合と違って、 u × v の部分が非可換なので、 四元数の積は非可換になります。
共役と逆元
四元数 q = ( x; u ) に対して、 実数 √ を q の絶対値と呼び、 |q| で表します。
また、四元数 q = ( x; u ) に対して、 ( x; −u ) で表される四元数を、 共役な四元数と呼び、 q* で表します。 (あるいは、 と表したりもします。)
四元数 q とその共役四元数を掛け合わせると、
というように、 q の絶対値の2乗になります。
このことから、
q* |
|q| 2 |
q* |
|q| 2 |
となるので、q が非 0 のとき、
必ず逆元が存在し、
q−1
=
と表せます。
したがって、四元数は非可換体になります。
(四則演算がすべて問題なく行える。ただし、積は非可換(左右入れ替えると値が変わる)。)
q*
|q|
2
四元数を使った回転
「3次元空間上の回転」で説明したように、 座標ベクトル u で表される点 A を、回転軸 p を中心に角度 θ 回転した点 A' の座標ベクトル u' は、以下のような計算で求めることができます。
このことを踏まえた上で、本題の四元数を使った回転の話に入ります。 まず、絶対値が 1 になるような四元数を用意します。 絶対値が 1 の四元数 Σ は以下のように、 絶対値 1 の3次元ベクトル p と角度 θ を用いて表すことができます。
θ |
2 |
θ |
2 |
そして、この四元数とその共役を使って、 以下のようにして他の四元数 q = ( x; u ) を挟み込むように掛けます。
θ |
2 |
θ |
2 |
θ |
2 |
θ |
2 |
このままだと少し計算が面倒なので、いったん Σ = ( y; v ) と置いて計算します。
この式に、
θ |
2 |
θ |
2 |
θ |
2 |
θ |
2 |
θ |
2 |
θ |
2 |
θ |
2 |
などの関係式を代入すると、
となります。 この式のベクトル部ですが、先ほど説明した3次元ベクトルの回転の式と一致しています。 すなわち、絶対値 1 の四元数 Σ を用意し、 Σ* q Σ という計算をすることで、 3次元ベクトルの回転をすることができます。