2010年11月23日火曜日

rotationも変わらないっすよね(1)

2か月半ぶりっすね。
講座が終わったので、こっちも書いていくっす。
まだもうちょっと講座関係の書きものが残ってるんっすけどね。
どうもぺんぎんっす( ◎v◎ )


PRIM_ROT_LOCALなんてフラグが追加されてたので、
ちょっと解説っぽいのを書いておくっす。
自分は元々rotationバグなんて無いと思ってるっすから、
そのことについてっす。

vectorもrotationも似たようなもんなので、vectorからっす。
珍しく図を描いてみたっす。
だいたい見れば分かるっすよね。
OがSIMの南西角、高度0mの(0, 0, 0)
Pがルートプリムの位置
Qが子プリムの位置っす。

SLPPの引数に入れるのはPQっす。
これの表し方にグローバル基準とかローカル基準とかあるっす。
どっちでも同じPQなのが注意点っすね。
ベクトルなら上に例のアレを付けるべきなんっすけど、
いろいろと面倒なので大文字で許してくださいっす。

まずは「グローバル」からっす。
これは単純っす。
PQOPOQで表せば良いっす。
PQ = OQ - OP
これでOKっす。
「Oから見てQの位置に移動させる」
っていうのをこの式は表わしてるっす。

次は「ローカル」っす
「P(ルートプリム)から見てQの位置に移動させる」
ということをしたいわけっすね。
ということは、QをOPだけ平行移動した点をQ'とすると
PQOQ' + なんとか のカタチにすれば良いっす。
PQ = OQ - OP ―①
QをOPだけ平行移動した点がQ'だから
OQ + OP = OQ'―②
OQ = OQ' - OP ―③
③を①に代入すると
PQ = OQ' - OP - OP

具体的な数字を入れてみるっすかね。
(算数の話なので、floatなのに.0無いね!とかはナシっす)
O = (0, 0, 0), P = (1, 2, 3), Q = (4, 5, 6)
としてみるっす。
ルートプリムが今、Pの位置にあって、
子プリムをQの位置に移動させたいと思ってるわけっす。
「グローバル」でやってみるっす。
PQ = OQ - OP
   = (4, 5, 6) - (1, 2, 3)
   = (3, 3, 3)
「ローカル」でもやるっす。
OQ'は②式からOQ' = OQ + OP っす。
さっき書いた「Pから見てQの位置」っていうのはこの部分っす。
OQ' は計算すると (4, 5, 6) + (1, 2, 3) で (5, 7, 9) っすね。
PQ = OQ' - OP - OP
   = (5, 7, 9) - (1, 2, 3) - (1, 2, 3)
   = (3, 3, 3)
当然一致するわけっす。


ほら、何となくrotationと同じ雰囲気っすよね?
Free Avatar