|
たまにはプログラムネタも書かないとね… ベクトルに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とかでは普通に逆行列を作った方が早いかもしれませんが、まあそのときはこの関数の中身を書き換えればいい話で。僕は更にこれをオペレータの「/」や「/=」のオーバーロードに割り当てたりするのですが、まあそれはやり過ぎかも知れません。 |
| << 前記事(2008/11/14) | トップへ | 後記事(2008/11/25)>> |
| タイトル (本文) | ブログ名/日時 |
|---|
| 内 容 | ニックネーム/日時 |
|---|---|
こんにちは。はじめまして。 |
猫猫 2008/11/24 23:09 |
僕は東京都大田区出身ですよ〜 |
forte_setagaya 2008/11/25 00:33 |
あーやっぱりそうでしたか! |
猫猫 2008/11/25 23:55 |
>多分4年生ぐらいの時に一緒だった |
forte_setagaya 2008/11/26 00:44 |
| << 前記事(2008/11/14) | トップへ | 後記事(2008/11/25)>> |