当面の課題 そにょ2

FMMにゃのお勉強。
 
関数fにゃんが上手く定義できると、それをつかって最短ルートRを求めるにゃのですにゃ。
このときにゃに、終点Bにゃを0として、順次周囲にゃところの値を求めていくFMMってにゃのを使うにゃのですにゃ。
それにゃの勉強をしにゃいとですにゃん。
 

考え中にゃ

S^2にゃ曲面Sにゃでコストを返す関数fにゃを定義するにゃ。
曲面S上の2点A,Bにゃを始点、終点とする曲線で最短のコストをとるものの集合を最短ルートRとするですにゃ。
関数fにゃは、C1級にゃ。

S^2にゃを同相にゃでグニグニ変形していって出来る曲面にゃを考えるにゃ。
その曲面上にゃの距離を元のS^2写像するときにゃの距離にゃを関数fにゃの値にするですにゃ。


つまり、グニグニ変形していって出来る曲面上にゃの移動にゃを、S^2上にゃに投影する感じですにゃ。
そうするにゃと、最短ルートRにゃがグニグニ変形した曲面上での最短ルートとにゃるのですにゃ。

ぐるぅ〜(GL)

The Cg tutorial―プログラム可能なリアルタイムグラフィックス完全ガイ

The Cg tutorial―プログラム可能なリアルタイムグラフィックス完全ガイ

ポチットにゃん。
web上にゃで読めるにゃけど、にゃっぱり紙じゃにゃいとにゃ〜〜。
 
グラフィックにょりも、動きにゃの方を勉強したいにゃのですけど、にゃかにゃか時間を捻出できにゃいにゃい。

クォータニオン+平行移動

クォータニオンで回転してそにょ後平行移動させるにゃ〜って変換にゃの合成にゃは、回転と平行移動にゃをわけて計算にゃ。

変換1(q_1で回転してt_1で平行移動)、変換2(q_2で回転してt_2で平行移動)。
変換2の後に変換1にゃをする合成にゃは、回転:q_1q_2、移動:q_1t_2q_1^* + t_1って感じにゃににゃるですにゃ。

// 脳内擬似コード
struct QuatTrans {
 Quat q;
 Vec3 t;
};
quatTrans12.q = quatTrans1.q * quatTrans2.q;
quatTrans12.t = quatTrans1.q * quatTrans2.t * quatTrans1.q.conjugate() + quatTrans1.t;