Quat クラスは、3 つのスペースにおける方向をコンパクトに表現する方法と、Quaternion 代数を実行するメソッドを提供します。
Quaternions は、3ds Max でオブジェクトの回転を保存するために使用されます。
1 つの Quaternion は 4 つの項で構成されます。回転量を指定するリアル スカラーの部分と、回転軸を定義する想像上のベクトルの部分です。
Quaternion を正規化した場合、スカラーの項は回転角度の半分のコサインと等しくなり、ベクトルの項は回転角度の半分のサインと等しくなります。
2 つのキーフレーム方向の補間は、Quaternion を使用すると簡単になり、スムーズで自然なモーションを生成します。オイラー角度とは異なり、数値的な統合は必要ありません。Quaternion が分析結果(近似なし)を提供します。
すなわち、正の角度は正の軸を左方向に回転します。これは、3ds Max ユーザ インタフェースの規約と一致しています。
コンストラクタ
quat <x_float> <y_float> <z_float> <w_float>
x、y、z の値がベクトルの部分を構成します。w はベクトルを中心とした回転角度です。
quat <degrees_float> <axis_point3>
<angleaxis> as quat
<eulerangle> as quat
<matrix3> as quat --extracts the rotation component as a quat
プロパティ
<quat>.w: Float
<quat>.x: Float
<quat>.y: Float
<quat>.z: Float
浮動小数点としての Quaternion 複素数コンポーネントにアクセスします。
<quat>.angle: Float
<quat>.axis: Point3
派生プロパティ(度による角度と回転軸)にアクセスします。
演算子
<quat> + <quat>
<quat> - <quat>
<quat> * <quat_or_number>
<quat> / <number>
- <quat>
Quaternion 代数です。
+
演算子は *
演算子(積)と同じです。-
演算子は /
演算子(比率)と同じです。<quat> * <matrix3>
matrix3 の回転部分を使用する Quaternion 代数です。
<quat> == <quat>
<quat> != <quat>
<quat> as <class>
Quat は Matrix3、Angleaxis および Eulerangle に変換可能です。
メソッド
copy <quat>
Quaternion 値の新しいコピーを作成します。
例:
newQuat = copy oldQuat
新しい値は、入力 Quaternion 値のコピーを含み、入力 Quaternion 値から独立した値になります。
isIdentity <quat>
Quaternion が単位 Quaternion と等しい場合(x=y=z=0.0; w=1.0)は、true
を返します。
normalize <quat>
入力した Quaternion の各項をすべての部分の平方の合計結果が単位大になるようなスケール係数で割り、正規化された Quaternion を返します。
inverse <quat>
Quaternion の逆を返します(1/q)。
conjugate <quat>
Quaternion の共役を返します。
logN <quat>
UNIT Quaternion の自然対数を返します。
exp <quat>
Quaternion の指数を返します( q.w=0)。
slerp <start_quat> <end_quat> <number>
UNIT Quaternion の球状の線形補間を返します。
<number>
が 0 から 1 に推移すると、返される値は <start_quat>
から <end_quat>
に変化します。
LnDif <p_quat> <q_quat>
2 つの Quaternion の「ログ差異」を次のように返します。
logN ((inverse p_quat)*q_quat)
qCompA<prev_quat> <now_quat> <next_quat>
Boehm タイプの補間で使用する項の a
を計算します。
a = now_quat * exp(-(1/4)*(logN((inverse now_quat)*next_quat)+logN((inverse now_quat)*prev_quat)))
squad<p_quat> <a_quat> <b_quat> <q_quat> <number>
slerp (slerp p_quatq_quatnumber) (slerp a_quatb_quatnumber) (2*(1-number)*number)
qorthog <quat> <axis_point3>
180 度ずつ回転したときの quat
(Quaternion 空間メトリック)を返します。指定した軸 axis_point3
に対する値です。
transform <quat> <matrix3>
指定した Quaternion の指定した行列による変換を返します。
squadrev <angle_number> <axis_point3> <start_quat> <start_tangent_quat> <end_tangent_quat> <end_quat> <number>
角度が > 2PI である場合の Quaternion 補間を返します。ここで angle_number
は回転角度、axis_point3
は回転軸です。number
が 0 から 1 に推移すると、返される値は start_quat
から end_quat
に変化します。
random <quat> <quat>
Slerp を使用して、2 つの Quaternion の間でランダムな回転を返します。
関連するメソッド:
quatToEuler<quat> order:<eulertype_integer>
eulerToQuat<eulerAngle> order:<eulertype_integer>
Quat とオイラー角度の値を変換します。オプションの順序パラメータには、角度の適用順序を指定します。指定しない場合は、XYZ の順序が使用されます。値には次のいずれかを使用できます。
1 - XYZ
2 - XZY
3 - YZX
4 - YXZ
5 - ZXY
6 - ZYX
7 - XYX
8 - YZY
9 - ZXZ
例:
t = teapot()
eu = eulerAngles 90 90 90
q = eulertoquat eu order:1
tr = matrix3 1
tr.rotation = q
t.rotation = tr
quatToEuler2 <quat>
[キー入力変換](Transform Type-In)ダイアログ ボックスに表示された、特定の Quaternion のオイラー値を返します。3ds Max 2008 以降で使用可能です。従来、Avguard 機能拡張として提供されていた機能です。
quatArrayToEulerArray <quat array>
Quat 配列からのスムーズ オイラー値の配列を返します。3ds Max 2008 以降で使用可能です。従来、Avguard 機能拡張として提供されていた機能です。
getEulerQuatAngleRatio <quat1> <quat2> <eulerAngles1> <eulerAngles2> [angle:<eulertype_integer>]
一連の quat 値を eulerAngles 値に変換するとき、eulerAngles 値で符号反転が発生する可能性があります。これは、さまざまな eulerAngles 値によって 1 つの quat 値を表現できるためです。この符号反転は、eulerAngles/quat 比を基準に検出できます。eulerAngles/quat 比は、Quaternion 空間での角度差に対する eulerAngles 空間での角度差を表します。この比率が eulerAngles 変換に対する 2 つの quat 間の回転 PI より大きい場合、このメソッドは、eulerAngles 変換に対する 2 つの quat 間の eulerAngles/quat 角度比を浮動小数点で返します。反転の実際の検出は、変換中の回転の量に依存します。回転の量が少ないほど、検出が正確になります。このメソッドに対するパラメータは次のとおりです。
quat1
および quat2
は、以前と現在の回転角度です。
eulerAngles1
および eulerAngles2
は、以前と現在の変換回転角度です。
オプションの eulertype_integer
パラメータには、角度の適用順序を指定します。指定しない場合は、XYZ の順序が使用されます。値には次のいずれかを使用できます。
1 - XYZ
2 - XZY
3 - YZX
4 - YXZ
5 - ZXY
6 - ZYX
7 - XYX
8 - YZY
9 - ZXZ