ここでは3Dゲームの開発で3次元空間の回転をあらわすのにを良く使われるクォータニオン(Quaternion)について徹底解説します。ただ、徹底解説といっても、クォータニオンの便利な小技集とか、クォータニオンが発見された歴史的経緯を解説するわけではなく、クォータニオンがなぜ3次元の回転をあらわすことができるのかについての解説です。

ウィキペディア(四元数の項目)によると、アイルランドの数学者ハミルトンはクォータニオンの元になるアイデアをずっと考えていたけど、長く行き詰まっていて、それが1843年10月16日の月曜日、ダブリン橋を渡っているときに突然思い付き、衝動を抑えられずにその橋にクォータニオンの基本公式を刻みつけた、らしいのですが、そんな数学者が長い間考えた末に突然閃いたものだけに、我々がクォータニオンを勉強するときには、天下り的に公式を教えられることが多いと思います。

もちろんそれだけで実用上は何も問題ないし、クォータニオンで3次元の回転をあらわせるという数学的真実に理由も何も必要ないのですが、なぜ角度θ回転するのにθ/2が出てくるんだろうとか、なぜクォータニオンでベクトルを回転するのが単純なかけ算ではなくクォータニオンを左右からはさむ形になっているんだろうとか、そもそもなぜクォータニオンが3次元の回転をあらわせるんだろうとか、色々疑問に思ってしまう人もきっといるはずです。しかしながら、Googleで検索してもクォータニオンそのものを解説しているサイトはあっても、これらの疑問にしっかりと答えてくれるようなクォータニオンと3次元空間の回転の関係性について詳しく解説しているサイトは見当たりません。それならば僕が書こうと思い、ここにまとめることにしました。まあ、検索しても出てこないのは、それだけ需要も低いということなんでしょうけど。

この解説、書いたらすごく長くなってしまったんですが、数学でリー代数について勉強したことがある人なら、11ページ目の「まとめと余談」だけ読めば十分理解できると思います(というか読まなくてもわかってることと思います)。ページの大半は、言ってみればリー代数の説明のようなものです。ただ、数学というのは問題を抽象化していて説明も形式的なので(それによって純粋に理論的な部分が明確になり新しい発見もうまれるわけですが)とっつきにくく、クォータニオンを理解するためにリー代数を勉強するのはしんどいと思います。この解説では、回転という具体的な問題だけを扱うことでリー代数に出てくる考え方をわかりやすく説明するように心掛けました。難しい用語もなるべく使わないようにして、リー代数そのものについては解説していません。

2ページ目と3ページ目はクォータニオンのおさらいになっているので、クォータニオンをまだよく知らない人はここから読んでください。既に知っているという人もここで使う表記法や後の解説でポイントとなるクォータニオンの特徴を復習するために、2ページ目だけは軽く目を通しておくと良いと思います。

4ページ目と5ページ目では、ハミルトンがクォータニオンを考えるきっかけを作ったと思われる、2次元の回転と複素数との関係について調べます。ここで、リー代数に出てくる微小変換と生成子について学びます。

6ページ目と7ページ目で、いよいよ3次元の回転について調べ、クォータニオンの導出を試みます。ここで、2次元のときに学んだ生成子が重要な鍵を握ることになるのですが、2次元のときにはひとつだけだった生成子が3つになり、生成子の間の交換関係(非可換性)を学ぶことになります。これもリー代数に必要不可欠な要素です。

8ページ目ではリー代数において重要な Baker-Campbell-Hausdorff の公式の証明にページを割いています。この公式はクォータニオンが3次元の回転をあらわせることの決定的な証拠となるものですが、証明は少し難解であり、この公式がなくても状況証拠的なもので説明はできるので、このページはスキップしてもかまいません。

9ページ目では回転行列をクォータニオンで表現したらどうなるかについて、10ページ目ではクォータニオンでベクトルを回転するにはどうすればいいかについて解説しています。

最後の12ページ目はちょっと話題を変えて、「3Dゲームの開発でクォータニオンを使う本当の理由」とちょっと釣り気味のタイトルで球面線形補間について解説しています。ここでも天下り的に球面線形補間を説明するのではなく、理想的な回転の補間はどうあるべきかという視点から球面線形補間を導いているので、ぜひ読んでみてください。

なるべく前提知識を必要としないように書いたのですが、最低条件として、複素数、ベクトル、行列、微分などの知識が必要です。高校生だとちょっと厳しいかもしれませんが、大学1年くらいの数学の知識があれば大丈夫です。

また、ページの最後に (※) がついた注釈がある場合があります。これはあまり気にしなくても良い些細な問題についての解説で、線形代数のしっかりした知識を必要とする場合があります。線形代数にあまり詳しくない人は読まずに次のページに進んでもかまいません。

携帯だと数式が画面に収まらずに少し読みにくいと思います。できれば大きいスクリーンでお読みください。また、処理速度が遅い端末だと、数式が表示されるまでに少し時間がかかることをあらかじめご了承ください。

6 thoughts on “クォータニオン徹底解説

  • 2018/11/04 at 6:20 AM
    Permalink

    Baker-Campbell-Hausdorffの公式と X, Y, Z の交換関係
    [X, Y]=Z, [Y, Z]=X, [Z, X]=Y

    を使えば、 e^XC=e^XA*e^XB としたときの XC は
    XC={a⃗ +b⃗ +12(a⃗ ×b⃗ )+112{a⃗ ×(a⃗ ×b⃗ )+b⃗ ×(b⃗ ×a⃗ )}+⋯}⋅X
    これのどこに交換関係を利用しておられるのですか?

    Reply
  • 2018/11/04 at 6:22 AM
    Permalink

    9ページの最初の方に書かれている内容です

    Reply
  • 2018/11/05 at 11:47 AM
    Permalink

    コメントありがとうございます。
    $$ [X_A, X_B] = (\vec{a} \times \vec{b}) \cdot \vec{X} $$
    とするのに使っています。

    Reply
  • 2018/11/06 at 4:26 AM
    Permalink

    こんな質問にまで答えてくださりありがとうございます

    Reply
  • 2018/11/07 at 4:50 AM
    Permalink

    10ページの内容なのですがR(a→ 、 θ)にベクトルv→ をかけるとa→ を軸にθだけ回転した式が与えられるのであればRに対応したクォータニオンqで
    v→*qで回転したv→が求められそうだと思ったのですが、これでは値は求められないのでしょうか?

    Reply
    • 2018/11/07 at 1:18 PM
      Permalink

      9ページまでの説明で、回転行列同士の積とクォータニオン同士の積は同じ振舞いをすることがわかったわけですが、ベクトルに対する作用が同じということまでは言えません。そもそも、ベクトルにクォータニオンを作用させる方法も定義されていません。
      そこで、10ページ目では、回転行列の座標変換(これは回転行列同士の積だけで表される)を使ってベクトル(回転軸)が変換されることを示し、それに対応したクォータニオン同士の積から、クォータニオンでベクトルを回転させる方法を導いています。

      Reply

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

Anti Spam Code *