OpenGLat GAMEDEVOpenGL - 暇つぶし2ch■コピペモード□スレを通常表示□オプションモード□このスレッドのURL■項目テキスト35:名無しさん@お腹いっぱい。 01/11/18 04:05 .net >>32 OpenGLを応用するわけじゃない。 結局、OpenGLとかは道具にすぎないからね。 36:名無しさん@お腹いっぱい。 01/11/18 04:27 .net >>33 そういえばSDLスレ下がっちゃったね。 37:_ 01/11/18 04:39 d8SKOzPf.net >>31 クオータニオンを噛み砕いて、説明して下さい。 使ってはいるけど、理解してないです。 38:28 01/11/18 07:24 .net 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 では、クォータニオンは'使用'って書いただろ? 次ページ最新レス表示レスジャンプ類似スレ一覧スレッドの検索話題のニュースおまかせリストオプションしおりを挟むスレッドに書込スレッドの一覧暇つぶし2ch