• ベストアンサー

DirectX3D クォータニオンについて

(うまく説明できないのですが・・・) DirectX3Dである物体(たとえばロボット)の向き(ロボットの正面方向)をクォータニオンで管理しています。 そのクォータニオンの値を元に、ロボットの足から頭の頂点へむかうベクトルを求めるにはどうしたらよいのでしょうか? 例えばXZ平面が地面を表すとして、地面に対して直立しているなら(0,1,0)となるベクトルを求めたいです。

質問者が選んだベストアンサー

  • ベストアンサー
noname#168973
noname#168973
回答No.2

#1です。こんばんは。 なるほど、大体お考えの事は判りました。私は少し勘違いしていたようです^^) それで、もう解決なさったのなら余計な事になるかも知れませんが、クォータニオン(ちょっとタイプしにくいので以後「四元数」と書きますね^^)について少しだけ補足を... お返事の中で回転するために四元数から回転行列に変換して演算すると仰ってられますが、実は回転の演算だけなら四元数のまま演算を行うほうがコストはかかりません。むしろ低コストで回転演算をするために行列より四元数を使うと言っても良い位だそうです。 ある文献によると、3×3行列で回転演算しようとすれば27回の積和演算が必要なのに対して、四元数だと16回の積和演算で済むそうです(それに移動も一緒に扱おうと思えば行列では4×4行列が必要になるのでもっと多くのコストがかかります)。 ただ、実を言うと私も四元数は最近知ったばかりです^^) そのため、あまり偉そうな事は言えません。 でも、最初に知った時は衝撃的だったので最近色々調べている最中です。 ちなみに「四元数 回転 共役」でググると良さそうなページが見つかったので、参考URLに記しておきます。 よろしかったらご参考にしてください。

参考URL:
http://staff.aist.go.jp/toru-nakata/quaternion.html
ss_yama
質問者

お礼

いろいろご丁寧にありがとうございました。 3Dのプログラミングをしていて、自分の線形代数の理解の乏しさを嘆いているところです。 また何かありましたら質問させていただきます。

その他の回答 (1)

noname#168973
noname#168973
回答No.1

こんにちわ。 「向きをクォータニオンで管理..」とは具体的にどのようになんでしょうか? DirectX3D での定義があるのかも知れませんが、DirectX3D は殆ど知らないもので、的を外しているかも知れませんが少々... 例えば q = w + xi + yj + zk の w を常に 0 か 1 として残る x,y,z で実質三次元のベクトルとしてその向きをロボットの正面方向と見なすと仮定して話をさせてもらいますと、多分、ご希望のベクトルは求まらないのではないかと思います。 ご希望のベクトルを求めるには、もう1本のベクトルが定義される必要があると思います。 間違ってらゴメンなさい^^)

ss_yama
質問者

お礼

すいません。よく考えたら簡単な話でした。 クォータニオンを使って回転行列を作ることができるので、基準となるベクトル(0,1,0)をその回転行列を使って回転すればいいだけですね。 お騒がせしました。

ss_yama
質問者

補足

ありがとうございます。 (クォータニオン自体を最近知ったので理解がおかしいかもしれませんが)xyzが回転軸でwが回転量になってます。 で、描画のときはそのクォータニオンを回転行列に変換して回転させています。 回転処理自体はそのやり方でうまくいっているのですが、今どの方向を向いているのかをベクトルとして知りたいのですが、クォータニオンの理解が乏しく行き詰まっている状態です。

関連するQ&A

専門家に質問してみよう