OpenGL (590レス)
OpenGL http://mevius.5ch.net/test/read.cgi/gamedev/1005834875/
上
下
前次
1-
新
通常表示
512バイト分割
レス栞
抽出解除
レス栞
38: 28 [sage] 01/11/18 07:24 ID:??? 3次元じゃめんどくさいんで、2次元で。 それも、原点回りの回転に限定する。 これは俺なりの理解の仕方だから、証明じゃないんでよろしく。 クォータニオンは極座標と関係がある。(みたい) 原点からの距離と角度で座標を表現するやつだ。 p = r(cosA + i*sinA); q = r'(cosB + i*sinB); なら、p*q は rr'(cos(A+B) + i*sin(A+B))となり q をAだけ回転させて長さに r を掛けたものになる。 これは次のように考えることもできる。 q(x, y) とすると q = x*i + y*j とベクトル表記できる。 このとき極座標系ってのは実はもう1つの軸 k を用いた表記であって p = r(cosA + k*sinA); q = r'(cosB + k*sinB); となり、複素数に外積の振る舞いを追加して i*j = -j*i = k; j*k = -k*j = i; k*i = -i*j = j;とすると、p*qは r(cosA + k*sinA) * (x*i + y*j)で、これを展開してくと r(xcosA-ysinA)*i + r(xsinA+ycosA)*j となる。 x = r' *(x/r') = r'cosB だから、加法定理を用いて rr'(cos(A+B)*i + sin(A+B)*j) となり最初と同じ結果になる。 だが、厳密にはおなじではない。後の方は交換法則が成り立たない。まあ、外積を用いてるからあたりまえだ。 交換すると-A の回転になる。 ここで分かるのは p にベクトルを掛ければ k 回りに A だけ回転したベクトルが得られるということ。 ただ、ここで1つ問題があって、長さが r 掛けられてしまうということ。 いま、回転だけを扱いたいので、この r を打ち消す必要がある。 そこで、今の結果に p の共役な値 (1/r)*(cosA - k*sinA) を今度は 逆から掛ける。 = (1/r)*(cos(-A) + k*sin(-A)) で、かつ逆から掛けて逆回転ってことで さっきの結果をさらに A だけ回転させることになる。 さらに回転しちゃうが、r はなくなった。これでOK。 ってことで、この p がクォータニオンだ。任意の軸 v 回りのクォータニオンは cos(A/2) + sin(A/2) * v になるのはご存知の通り。 なんで、素直に r で割らないんだ! って話になると思うが、おそらく、任意軸に拡張すると r で割るだけではうまくいかないのではないかと。 まあ、専門書読んだことないんで、適当な理解の仕方だ。 31 では、クォータニオンは'使用'って書いただろ? http://mevius.5ch.net/test/read.cgi/gamedev/1005834875/38
40: レプタリアン教授 [sage] 01/11/18 14:21 ID:??? >>38 この前それ大学で習った(w http://mevius.5ch.net/test/read.cgi/gamedev/1005834875/40
50: _ [] 01/11/18 23:13 ID:d8SKOzPf >>38 すいません。やっぱわかんないやw 取り敢えず、他の資料と照らし合わせて眺めときます。THX! http://mevius.5ch.net/test/read.cgi/gamedev/1005834875/50
メモ帳
(0/65535文字)
上
下
前次
1-
新
書
関
写
板
覧
索
設
栞
歴
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.999s*