2008年09月09日

姿勢を調べる方法

物理オブジェクトを投げて、落ちて止まった時の姿勢が、「ほぼ表向き、ほぼ裏向き、その中間」で分岐処理するようなスクリプトを作ろうとして、その姿勢の取得方法でなやんでいます。

llRot2UpでZ軸の方向をベクトルデータで取得できるので、そのベクトル成分をx、y、zとすると
Atan(root(x^2+y^2)/z)で出た角度が例えば30度以下なら上向き、150度以上なら下向き・・・・
という感じにできるのかな、と思っているんですが、LSLでルートって使えませんよね?
それに、そもそも、もっと簡単にできる方法があるような気がしてなりません。ご存知のかた、ご教示いただけませんか。
最初は、llAngleBetween(ZERO_ROTATION,llGetRot())でいいのかと思いましたが、だめでした。

よろしくお願いいたします。


タグ :姿勢角度

同じカテゴリー(スクリプト関連)の記事画像
オブジェクトのリンクとタッチで開く扉
自動チャットを止めたい
テレポートするとアニメーションが解除される
同じカテゴリー(スクリプト関連)の記事
 テクスチェンジのHUDについて (2015-07-01 04:51)
 モール用のプリムカウンターを探しています (2014-11-29 20:09)
 連続するアニメーションの処理 (2014-08-24 03:23)
 オブジェクトの上にフローティングテキストを出す。 (2014-08-22 16:46)
 チャットログの盗聴について (2014-02-03 03:43)
 椅子に座った後で位置調整できるスクリプト (2013-03-24 16:37)

Posted by Gonzo  at 22:40 │Comments(4)スクリプト関連

この記事へのコメント
ルートって
http://wiki.secondlife.com/wiki/LlSqrt/ja
ですか?
Posted by 千尋千尋 at 2008年09月09日 23:23
はずしてたらスミマセン><

こういうことかな?
llAtan2(llSqrt(x*x+y*y),z);
Posted by mayuko Nishi at 2008年09月09日 23:23
少しだけ簡単な方法を(ほとんど変わりはありませんが・・・・)

llRot2Up() で取得したベクトルは必ず単位ベクトルなので大きさは 1 ですから、本文に書かれているものと同じ箇所の角度を計算するのであれば llAcos() を使った方が式が簡単になります。

vector up = llRot2Up( llGetRot() );
float deg = llAcos( up.z ) * RAD_TO_DEG;


lllAngleBetween() は、どれか1軸だけの回転に限定されていれば使えると思います。
Posted by Hidenori GlushenkoHidenori Glushenko at 2008年09月10日 06:51
千尋さん、mayukoさん
ルートの関数あったんですね。調査不足で質問してごめんなさい。

ありがとうございました。

Hidenoriさん
Z軸成分のアークコサインでいいんですね。
これで試してみます。

ありがとうございました。
Posted by Gonzo at 2008年09月10日 08:04
<ご注意>
書き込まれた内容は公開され、ブログの持ち主だけが削除できます。