進捗日誌

アクセスカウンタ

help リーダーに追加 RSS ベクトルにRT行列の逆行列を乗算する関数

<<   作成日時 : 2008/11/17 04:37   >>

ブログ気持玉 0 / トラックバック 0 / コメント 4

たまにはプログラムネタも書かないとね…

ベクトルにRT(RotTrans)行列の逆行列をかける場合(例えば関節からの相対位置を求めるとか)、普通は逆行列を求めてから乗算しますが、その為にわざわざ行列のローカル変数を定義したりが面倒くさいので関数を作ってみました。

擬似コードで簡単に書くと以下になります。

Vector MultInverseMatrix( Vector v, Matrix m )
{
    Vector r;
    v -= m[3];
    r[0] = Dot( v, m[0] );
    r[1] = Dot( v, m[1] );
    r[2] = Dot( v, m[2] );
    return r;
}

一応説明しますと、(R,t)行列の逆行列は(R-1, -R-1t)で、ここで回転行列の逆行列は転置行列なので(RT, -RTt)になります。これをベクトルvにかけた結果はRTv - RTt = RT(v - t)なので、vからtを引いてRの転置行列を掛けることで逆行列の演算になります。転置行列の乗算は内積で計算できるので、最終的に上のようになります。

ちなみに、これはDirect3D的な行列の場合の式なので注意してください。ライブラリによっては行列のデータの並びが逆(D3D行列に対して転置されている)なので、この通りには書けなくなります。

もしかしたら360とかでは普通に逆行列を作った方が早いかもしれませんが、まあそのときはこの関数の中身を書き換えればいい話で。僕は更にこれをオペレータの「/」や「/=」のオーバーロードに割り当てたりするのですが、まあそれはやり過ぎかも知れません。

設定テーマ

関連テーマ 一覧

月別リンク

ブログ気持玉

クリックして気持ちを伝えよう!
ログインしてクリックすれば、自分のブログへのリンクが付きます。
→ログインへ

トラックバック(0件)

タイトル (本文) ブログ名/日時

トラックバック用URL help


自分のブログにトラックバック記事作成(会員用) help

タイトル
本 文

コメント(4件)

内 容 ニックネーム/日時
こんにちは。はじめまして。
検索で辿り着いたのですが、社長はひょっとして小さい頃東京にいらっしゃいませんでしたか?
小学生のとき同じクラスで同姓同名の方がいたので。。
勘違いでしたらすみません。。
ちなみに私は途中で関西に転校しています。
猫猫
2008/11/24 23:09
僕は東京都大田区出身ですよ〜
そんなにある名前でもないので、年齢が同じならまず本人でしょうね(笑)
forte_setagaya
2008/11/25 00:33
あーやっぱりそうでしたか!
小学校のそばにコロシアムがありましたよね。
多分4年生ぐらいの時に一緒だった、現在神戸在住のIKURAです(珍しい名前ですけど覚えていませんよね。)。当時の人とは全くの音信不通なので、とても懐かしいです!
猫猫
2008/11/25 23:55
>多分4年生ぐらいの時に一緒だった

大変申し訳ないのですが覚えてないです…僕も小中の同級生とは全く音信不通なこともあって、小学校の時だけの同級生は10人ぐらいしか覚えてないのです(汗)。

>小学校のそばにコロシアムがありましたよね。

田園コロシアムですね!今はマンションになっているようです…あそこは駅が地下駅になって大分印象が変わってますよ。駅舎は復元されてますけど。是非Googleマップででも見てみて下さい〜
forte_setagaya
2008/11/26 00:44

コメントする help

ニックネーム
本 文