目次

キーワード

概要

四元数と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 を使って、

a + i b + j c + k d

と書けます。 四元数という名前は、見ての通り、4つの実数から成る数という意味です。

ちなみに、 i, j, k の間には、以下のような関係が成り立ちます。

i2 = j2 = k2 = 1
ij = k, ki = j, jk = i
ji = k, ik = j, kj = i

四元数は、発見者の名前を取ってハミルトンの四元数(Hamilton's quaternion)とも呼ばれます。

実部と虚部

複素数では実部が実数1つ、虚部も実数1つでしたが、 四元数では虚部が3つになっています。 この虚部の3つの実数は1セットで意味を持っていたりするので、 四元数、

a + i b + j c + k d

を、 実部 x = a と、 虚部 u = (b, c, d) に分けて、

( x; u )

と表したりします。 実部・虚部をそれぞれスカラー部・ベクトル部と呼んだりもします。

また、ベクトル部が 0 ベクトルのとき、 四元数 ( x; 0 ) を実数と同一視し、 単に x で書き表します。

このような形式を用いることで、以下に述べるように、 加減乗除などの計算が簡単に書き表すことができます。

加減算

まず、四元数の加減算は非常に単純で、以下のようになります。

( x; u ) ± ( y; v ) = ( x ± y; u ± v )
乗算

次に、乗算ですが、

( a + i b + j c + k d ) × ( e + i f + j g + k h )
= ( ae bf cg dh ) + i( af + be + ch dg )
+ j( ag + ce + df bh ) + k( ah + de + bg cf )

なので、ベクトル表現では以下のようになります。

( x; u ) × ( y; v ) = ( xy u v ; x v + y u + u × v )

ただし、 2つのベクトル u, v に対する u v u × v はそれぞれ、ベクトルの内積・外積です。

複素数の場合と違って、 u × v の部分が非可換なので、 四元数の積は非可換になります。

共役と逆元

四元数 q = ( x; u ) に対して、 実数 x2 + | u |2 q絶対値と呼び、 |q| で表します。

また、四元数 q = ( x; u ) に対して、 ( x; u ) で表される四元数を、 共役な四元数と呼び、 q* で表します。 (あるいは、 q と表したりもします。)

四元数 q とその共役四元数を掛け合わせると、

qq* = ( x; u ) × ( x; u ) = ( x2 u ( u ); x u x u + u × ( u ) )
= ( x2 + | u |2; 0 ) = x2 + | u |2

というように、 q の絶対値の2乗になります。

このことから、

q×
q*
|q| 2
=
q*
|q| 2
×q = 1

となるので、q が非 0 のとき、 必ず逆元が存在し、 q−1 =

q*
|q| 2
と表せます。 したがって、四元数は非可換体になります。 (四則演算がすべて問題なく行える。ただし、積は非可換(左右入れ替えると値が変わる)。)

四元数を使った回転

3次元空間上の回転」で説明したように、 座標ベクトル u で表される点 A を、回転軸 p を中心に角度 θ 回転した点 A' の座標ベクトル u' は、以下のような計算で求めることができます。

u' = sinθ u × p + cosθ ( u ( up ) p ) + ( up )p
= sinθ u × p + cosθ u + ( 1 cosθ ) ( u p ) p

このことを踏まえた上で、本題の四元数を使った回転の話に入ります。 まず、絶対値が 1 になるような四元数を用意します。 絶対値が 1 の四元数 Σ は以下のように、 絶対値 1 の3次元ベクトル p と角度 θ を用いて表すことができます。

Σ = ( cos
θ
2
; sin
θ
2
p )

そして、この四元数とその共役を使って、 以下のようにして他の四元数 q = ( x; u ) を挟み込むように掛けます。

Σ*= ( cos
θ
2
; sin
θ
2
p ) ×q× ( cos
θ
2
; sin
θ
2
p )

このままだと少し計算が面倒なので、いったん Σ = ( y; v ) と置いて計算します。

Σ*= ( y; v )( x; u )( y; v ) = ( xy + uv, yu xv v×u )( y; v )
= ( x ( y2 + | v |2 ); 2y u×v + ( y2 | v |2 )u + 2 ( uv )v )

この式に、

( y2 + | v |2 ) = sin2
θ
2
+ cos2
θ
2
= 1
( y2 | v |2 ) = cos2
θ
2
sin2
θ
2
= cosθ
2 y v = 2 cos
θ
2
sin
θ
2
p = sinθ p
2 sin2
θ
2
= 1 cosθ

などの関係式を代入すると、

Σ* ( x; u ) Σ = ( x; sinθ u×p + cosθ u + ( 1 cosθ )( u p )p )

となります。 この式のベクトル部ですが、先ほど説明した3次元ベクトルの回転の式と一致しています。 すなわち、絶対値 1 の四元数 Σ を用意し、 Σ* q Σ という計算をすることで、 3次元ベクトルの回転をすることができます。

更新履歴

ブログ