ソラマメブログ
プロフィール
ぺんぎん
ぺんぎん
どもっす( ◎v◎ )
ぺんぎんっす。

「ぺんぎんさん」でいいっす。
「ぺんさん」でもOKっすよ。
何だって良いんっすけどね。
[個体名:Naoya Bellic]
(非商用)
読者登録
メールアドレスを入力して登録する事で、このブログの新着エントリーをメールでお届けいたします。解除は→こちら
現在の読者数 1人

2008年12月16日

回転の勉強っす(5)

ゴリゴリ計算するっすよ。
紙と鉛筆、それと何か飲み物あると良いかもっす。

準備は良いっすか?
気合の計算っすよ。
どうもぺんぎんっす( ◎v◎ )


もう一度関数部分を載せるっす。
///////////////////////
// The MIT Lisences
// Copyright (c) 2008 Naoya Bellic

// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:

// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.

// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
// THE SOFTWARE.
///////////////////////
rotation pmEuler2Rot(vector vec)
{
 rotation r;
 float X = vec.x / 2.0;
 float Y = vec.y / 2.0;
 float Z = vec.z / 2.0;

 r.x = llSin(X)*llCos(Y)*llCos(Z) + llCos(X)*llSin(Y)*llSin(Z);
 r.y = llCos(X)*llSin(Y)*llCos(Z) - llSin(X)*llCos(Y)*llSin(Z);
 r.z = llCos(X)*llCos(Y)*llSin(Z) + llSin(X)*llSin(Y)*llCos(Z);
 r.s = llCos(X)*llCos(Y)*llCos(Z) - llSin(X)*llSin(Y)*llSin(Z);

 return r;
}

計算する前に「きまり」の確認っす。
1.回転はZ軸→Y軸→X軸の順番
2.a + ib + jc + kd を<b, c, d, a>と表す。
rotationの表示は<(虚部),(実部)>の形っす。

計算していくっす。
オイラー角で<x, y, z> = <θ, φ, Ψ>のときを考えるっす。

まずは、1つの軸だけの回転っす。
Z軸の回転:<0, 0, sin(Ψ/2), cos(Ψ/2)>
Y軸の回転:<0, sin(φ/2), 0, cos(φ/2)>
X軸の回転:<sin(θ/2), 0, 0, cos(θ/2)>
こうなることはllEuler2Rotで実際にやってみると良いっす。

あとはZ→Y→Xの順番に掛け算するっす。
注意するのは、これが複素数の計算ってことっす。
「きまり」の2.っす。
i,j,kの性質っす。
ij = k = -ji
jk = i = -kj
ki = j = -ik
i2 = j2 = k2 = -1
これだけ分かれば計算できるっす。(たぶん)
順序を逆にすると符号が変わるっていうイヤラシさっす。
右から・左からが重要なわけっすね。

で、計算してみてくださいっす。
右に右にと掛け算していくっす。
i,j,kの性質を使ってまとめると上の関数の式になると思うっす。


(オマケ)「符号が全部入れ替わって出てくる」問題っす。
θ→θ±2π のとき X→X±π っす。
sin(X±π) = -sin(X)
cos(X±π) = -cos(X)
これが符号が入れ替わって出てくるタネっす。
Y,Zについても同様っす。

llEuler2Rotと同じ形じゃないと気持ち悪いっすから、
何か追加しないとっすね。
Ψは「ぷさい」って入れて変換すると出るっす。
他のはθ「しーた」,φ「ふぁい」っす


同じカテゴリー(スクリプト)の記事画像
位置判定っす
同じカテゴリー(スクリプト)の記事
 久しぶりの新関数っす (2011-04-23 23:19)
 11日(土)のオフィスアワーっす (2010-12-10 23:49)
 C#プロジェクトは凍結みたいっす (2010-07-01 22:35)
 4月24日のスクリプターズ・カフェっす (2010-04-27 19:06)
 潜入!1.38サーバーっす (2010-03-09 22:25)
 風の観測で分かったことっす (2009-08-16 22:11)

Posted by ぺんぎん at 04:42│Comments(0)スクリプト
上の画像に書かれている文字を入力して下さい
 
<ご注意>
書き込まれた内容は公開され、ブログの持ち主だけが削除できます。