- クオータニオンを用いた座標変換の考え方 - |
前回でクォータニオンを使って点(ベクトル)の回転ができるようになりました。 今回はクォータニオンの回転を使って新たな座標系を定義してみたいと思います。 ・「新たな座標系」の意味 クォータニオンを使えば回転ができる、と何度も言ってきました。この意味を考えてみましょう。 今、このベクトルの回転を考えてみます。 赤の線がX軸、緑がY軸、青がZ軸です。この座標系の中にベクトル(x, y, z)があります。 このベクトルを、X軸を回転軸とするクォータニオンで回転させます。角度は適当にR度としておきましょう。 回転後、ベクトルは(x', y', z')に移動しました。つまり座標が変換されました。 これはただの回転ではなく、「新たな座標系の点」という見方ができる、というのが今回の話です。 と、いっても分かりにくいですね。もう1例見て見ます。 上記のY軸上のベクトル(0, 1, 0)を同じクォータニオンで回転させます。 (0, 1, 0)は以下のようなベクトルですね。 これをX軸を回転軸として、クォータニオンで回転させます。角度はR=90度とします。 X軸周りで90度回転させました。(回転方向は気にしないでください) (0, 1, 0)から(0, 0, -1)にベクトルを回転させました。 クォータニオンを通すことで、(0, 1, 0)が(0, 0, -1)になったということですね。 この事実を「クォータニオンで表現された新たな座標系のY軸上の点に移った」という見方をするのです。 他のY軸上の点を考えてみてください。同じように回転するのであれば、(0, y, 0)が(0, 0, -y)という値になります。 Y軸上の点以外も考えてみてください。どの点もクォータニオンに影響を受け、決まった位置に回転することになります。 以上のように考えると、クォータニオンによって回転されたということは、 「1つのクォータニオンによって表現された新たな座標系の点に移動した」という見方ができます。 次の画像で見ると分かりやすいかもしれません。 中央に大きな座標軸があります。赤がX軸、緑がY軸、青がZ軸です。 隅っこの方にも同じような座標軸があります。長さは1です。 この隅っこの座標軸は、中央の大きな座標軸上のベクトル(1, 0, 0), (0, 1, 0), (0, 0, 1)を glTranslate*()で原点(0, 0, 0)から適当な点Pに移動し、クォータニオンで変換して描画したものです。 このべクトルはそれぞれX軸、Y軸、Z軸上の点ですので、「中央の座標系を表している各軸が変換された」という見方ができます。 他の点でも同様に、平行移動してクォータニオンで回転させれば同じように変換されます。 これが、1つのクォータニオンが新たな座標系を表しているということです。 この考え方は行列を使った回転でも同じことが言えます。 変換後の座標を、「行列によって表現される新たな座標系の点に移動した」という見方です。 今回、一番言いたかった事は、 「ベクトル(点)を移動・回転させた後の座標を、新たな座標系の点と定義する」ってことです。 その移動・回転にクォータニオンを使ってるということです。 難しく書いているかもしれませんが、上の画像でやっていることはglTranslate*()で移動、クォータニオンで回転という2つだけです。 そして移動後の点が、クォータニオンで表された新たな座標系の点という見方ができる、ということです。 |