2010年12月21日火曜日

rotationが交換可能なときっす

rotationではa * b と b * a が一致しないことが多いんっすけど、
逆に一致することもあるわけっす。
どんな条件があるのか考えてみたっす。
どうもぺんぎんっす( ◎v◎ )


まず、明らかなのは
 ・a = b のとき
 ・b = ZERO_ROTATION / a のとき
これらは見た瞬間に分かるっすね。
他の場合が無いか、考えてみるっす。

作戦はa * b と b * a を計算して、x、y、z、sの各要素を比較するっす。
式が4本出るので、そこから考えて行くっす。
とりあえず積を出すっす。
どっちか片方書けば、もう片方はaとbを入れ替えれば良いっすね。
というわけでa * bを計算するっす。
c = a * b とすると、
c.x = a.s * b.x + a.x * b.s + a.y * b.z - a.z * b.y
c.y = a.s * b.y + a.y * b.s + a.z * b.x - a.x * b.z
c.z = a.s * b.z + a.z * b.s + a.x * b.y - a.y * b.x
c.s = a.s * b.s - a.x * b.x - a.y * b.y - a.z * b.z

s要素はaとbを入れ替えても同じになるっすね。
ということは実質3本の式になるっす。
x、y、z要素についてもaとbを入れ替えたら同じになる部分は
緑で表示しておいたっす。
比較するときに両方で出てくるので、消える部分になるっす。

a * b と b * a の各要素を比較して
x要素について a.y * b.z = a.z * b.y -①
y要素について a.z * b.x = a.x * b.z -②
z要素について a.x * b.y = a.y * b.x -③
①②③を満たすようなbを選べばa * bとb * a は一致するっす。


もうちょっと変形しないと見えないっすね。

0 件のコメント:

コメントを投稿

Free Avatar