llEuler2Rot
rotation llEuler2Rot(vector vec)
Euler形式の回転値をクォータニオン形式に変換する。
Eulerはオイラーと読む。
偉い人の名前である。
Eulerはオイラーと読む。
偉い人の名前である。
オイラー形式の回転値とは、X,Y,Zの回転角度をラジアンで指定したもののことで、LSLではvector型の変数で扱う。
クォータニオン形式の回転値とはLSLのrotation型のデータのことである。
クォータニオン形式の回転値とはLSLのrotation型のデータのことである。
回転を扱う際にクォータニオンが便利である理由について詳細には説明しないが、LSLにおいては回転は全てクォータニオンで扱われる。
しかしながら、一般的に回転値を指定するときにはクォータニオン形式はわかりにくく、オイラー形式のほうが比較的イメージしやすい。
そのため、我々人類が回転値をコーディングするときにはオイラー形式を使用し、LSLの回転関数を使うときにはこのllEuler2Rot関数を使ってクォータニオンに変換するというのが一般的な手法である。
しかしながら、一般的に回転値を指定するときにはクォータニオン形式はわかりにくく、オイラー形式のほうが比較的イメージしやすい。
そのため、我々人類が回転値をコーディングするときにはオイラー形式を使用し、LSLの回転関数を使うときにはこのllEuler2Rot関数を使ってクォータニオンに変換するというのが一般的な手法である。
さらに言うならラジアンという単位も我々日本人には少々馴染みが薄い。
ラジアンは180度をπ(パイ=3.141592...)とする単位で、1度=約0.017453ラジアンである。
「45度回転させたい」というときに、とっさにラジアンがわかる人ならいいのだが、そんな人ばかりではないので、LSLでは便利な定数が用意されている。
ラジアンは180度をπ(パイ=3.141592...)とする単位で、1度=約0.017453ラジアンである。
「45度回転させたい」というときに、とっさにラジアンがわかる人ならいいのだが、そんな人ばかりではないので、LSLでは便利な定数が用意されている。
DEG_TO_RAD(度数からラジアン)という名の定数で、この定数の値は約0.017453である。
つまり、45度をラジアンに変換したいときには、
つまり、45度をラジアンに変換したいときには、
45 * DEG_TO_RAD
と書いてやれば良い。
例えば、あるオブジェクトをX軸周囲45度、Y軸周囲120度、Z軸周囲10度回転させたい場合、
vector rot=<45.0, 120.0, 10.0> default { touch_start(integer num_detected) { llSetRot(llEuler2Rot(rot * DEG_TO_RAG)); } }
このような記述にすると、回転値の定義がわかりやすい。
rotation型からオイラー形式への変換はllRot2Eulerを使う。