Matrix3 クラスは、4x3 の 3D 変換行列オブジェクトを実装します。
変換行列は 3D 同次行列で、一般的にオブジェクトの座標系と変換を保持するのに使用されます。
コンストラクタ:
matrix3 <row1_point3> <row2_point3> <row3_point3> <row4_point3>
行ベクトルから行列を作成します。
matrix3 0
ゼロ行列を作成します。(matrix3 \[0,0,0\] \[0,0,0\] \[0,0,0\] \[0,0,0\])
matrix3 1
単位行列を作成します。(matrix3 \[1,0,0\] \[0,1,0\] \[0,0,1\] \[0,0,0\])
<quat> as matrix3
<angleaxis> as matrix3
<eulerangles> as matrix3
任意の回転値から回転行列を作成および返します。
rotateXMatrix <number> -- all angles in degrees rotateYMatrix <number>
rotateZMatrix <number>
主要ワールド軸に相対的な回転行列を作成および返します。
transMatrix <point3>
変換行列を作成および返します。
scaleMatrix <point3>
スケール行列を作成および返します。
rotateYPRMatrix <yaw_number> <pitch_number> <roll_number>
ヨー、ピッチ、ロール角度の指定による回転変換として使用する Matrix3 値を作成および返します。角度は度で表されます。
matrixFromNormal <point3>
与えられたポイントによって指定された法線を Z 軸とする Matrix3 値を作成および返します。Matrix3 値の変換部分は[0,0,0]です。スケール部分のコンポーネントは、point3
値の平均化に必要な値の逆数です。
例
MatrixFromNormal [0,0,1]
MatrixFromNormal [0,1,1]
次のように返されます。
(matrix3 [1,0,0], [0,1,0], [0,0,1], [0,0,0])
(matrix3 [0,-0.707107,0.707107] [1.41421,0,0] [0,1,1] [0,0,0])
演算子
<matrix3> + <matrix3>
<matrix3> - <matrix3>
<matrix3> * <matrix3>
<matrix3> as <class>
Matrix3 は行列の回転コンポーネントを使用して、Quaternion、AngleAxe、EulerAngle に変換可能です。
<matrix3>[<integer>]
Matrix3 の行を Point3 として返します。インデックスで有効な範囲は 1 ~ 4 です。
<matrix3>[<integer>] = <Point3>
Matrix3 の行を Point3 に設定します。インデックスで有効な範囲は 1 ~ 4 です。
<matrix3> == <matrxi3>
<matrix3> != <matrix3>
3ds Max 2018 以降で使用可能: 標準コンプライアンス。
プロパティ
<matrix3>.row1: Point3
<matrix3>.row2: Point3
<matrix3>.row3: Point3
<matrix3>.row4: Point3
<matrix3>.translation: Point3
行への読み込み/書き込みアクセス。Row4 は変換。
オブジェクト変換の matrix3 値で作業を行う場合、行とそのサブ要素を直接変更することはできません。行または行の要素を変更するには、まずユーザ変数に matrix3 値を割り当て、変数を割り当てることで matrix3 の行を変更し、次に元のオブジェクトの .transform
プロパティに変数を戻します。
何も実行しない:
$Teapot01.transform.row4 = [10.0,20.0,30.0]
機能する:
myTransform = $Teapot01.transform
myTransform.row4 = [10.0,20.0,30.0]
$Teapot01.transform = myTransform
<matrix3>.rotationpart: Quat, read-only
<matrix3>.translationpart: Point3, read-only
<matrix3>.scalerotationpart: Quat, read-only
<matrix3>.scalepart: Point3, read-only
他の変換はゼロの状態でのさまざまな変換へのアクセス。
<matrix3>.determinantsign: Integer, read-only
行列の行列式のサインを返します。
メソッド
copy <matrix3>
matrix 3 値の新しいコピーを作成します。
例:
newMatrix3 = copy oldMatrix3
新しい値は、matrix3 の入力値のコピーを含み、入力値から独立した値になります。
等価比較式をオリジナルおよびコピーの値で使用すると常に false が返されます。
2 つの Matrix3 値の等しさを正しく比較するには、それらの 4 つのコンポーネントが別個に比較されなくてはなりません。2 つの値は文字列に変換され、文字列として比較されます。あるいは、1 つの Matrix3 値がもう 1 つの逆数で乗算され、単位行札になるか試されます。
行列の比較の例:
a = matrix3 1 --create an identity matrix
(matrix3 [1,0,0] [0,1,0] [0,0,1] [0,0,0])
b = copy a --copy the value of a into variable b
(matrix3 [1,0,0] [0,1,0] [0,0,1] [0,0,0])
a == b --compare a and b - although their values are equal, result is false
false
--This is because the equality test of compound values like Matrix3 and Array
--is testing to see whether the two variables point at the same memory address
--and does not perform a per-component equality test.
--Thus:
c = a
(matrix3 [1,0,0] [0,1,0] [0,0,1] [0,0,0])
a == c --compare a and c - both point at the same memory and are considered equal:
true
--To compare a and b, we can either convert both to strings and compare them:
a as string == b as string
true
--or we can test their components in pairs,
a.row1 == b.row1 AND a.row2 == b.row2 AND a.row3 == b.row3 AND a.row4 == b.row4
true
--or we can multiply a with the inverse of b and test if the result is the identity matrix:
isIdentity (a * inverse b)
true
isIdentity <matrix3>
行列が単位行列と等しい場合、true
を返します。
inverse <matrix3>
逆行列を返します。
inverseHighPrecision <matrix3>
中間結果を得るために倍精度浮動小数点数を使用して逆行列を返します。
xformMat <transform_matrix3> <space_matrix3>
特定のスペースに変換された変換行列を返します。たとえば、ある回転を別の座標系で適用したいとします。これには、通常の場合座標系のスペースに変換して、その座標系で変換を行います。このメソッドは行列 <transform_matrix3>
を <space_matrix3>
に変換します。結果の matrix3 値は space_matrix3 * transform_matrix3 * inverse(space_matrix3)
として計算されます。
identity <matrix3> -- mapped function
単位行列への入力行列を設定します。パラメータが単独の行列の場合は、この関数により単位行列が返されます。パラメータが行列の配列の場合、この関数は OK
を返します。 いずれの場合も、入力 matrix3 の値は単位行列で置き換えられます。
zero <matrix3> -- mapped function
ゼロ行列への入力行列を設定します。パラメータが単独の行列の場合は、この関数によりゼロ行列が返されます。パラメータが行列の配列の場合、この関数は OK
を返します。 いずれの場合も、入力 matrix3 の値はゼロ行列で置き換えられます。
orthogonalize <matrix3> -- mapped function
行列の「バイアスのかかっていない」直交化への入力行列を設定します。直交行列では、各軸間の角度が 90 度です(斜めにゆがんでいません)。パラメータが単独の行列の場合、この関数により直交行列が返されます。パラメータが行列の配列の場合、この関数は OK
を返します。 いずれの場合も、入力 matrix3 の値は直交行列の値で置き換えられます。
translate <matrix3> <point3> --mapped function
入力行列に順次増加する解釈変換を適用します。これは、変換により右で乗算するのと同じです。matrix3 パラメータが単独の行列の場合は、この関数により変換された行列が返されます。パラメータが行列の配列の場合、この関数は OK
を返します。 いずれの場合も、入力 matrix3 の値は変換された行列の値で置き換えられます。
-- all angles in degrees
--mapped functions
rotateX <matrix3> <number>
rotateY <matrix3> <number>
rotateZ <matrix3> <number>
rotate <matrix3> <quat>
入力行列に順次増加する回転変換を適用します。これは、変換により右で乗算するのと同じです。matrix3 パラメータが単独の行列の場合は、この関数により変換された行列が返されます。パラメータが行列の配列の場合、この関数は OK
を返します。 いずれの場合も、入力 matrix3 の値は変換された行列の値で置き換えられます。
scale <matrix3> <point3> [ <boolean> ] -- mapped function
入力行列に順次増加するスケール変換を適用します。これは、変換により右で乗算するのと同じです。<boolean>
が true
の場合、変換コンポーネントはスケールされます。<boolean>
が false
の場合は、変換コンポーネントは影響を受けません。当初 3ds Max が書かれたときには、このメソッドのコードにバグがあったため、行列の変換部分がスケールされませんでした。行列をスケールしても一番下の行がスケールされませんでした。このため、スケールの基準は常にオブジェクトのローカル原点である一方で、ワールド軸がスケールされました。このバグが発見されたとき、原因となっているコードに依存する部分があることがわかりました。不適正に動作している部分に依存する既存のコードを壊してしまうことになるため、簡単に修正することができませんでした。この問題を解決するためブール値のパラメータが追加されました。このパラメータを true
に設定すると、変換コンポーネントは正しくスケールされます。指定しない場合、ブール値の既定値 false
が適用され、コードは従来の方法で動作します。matrix3 パラメータが単独の行列の場合は、この関数により変換された行列が返されます。パラメータが行列の配列の場合、この関数は OK
を返します。 いずれの場合も、入力 matrix3 の値は変換された行列の値で置き換えられます。
preTranslate <matrix3> <point3> -- mapped function
入力行列に順次増加する移動変換を適用します。これは、変換により左で乗算するのと同じです。matrix3 パラメータが単独の行列の場合は、この関数により変換された行列が返されます。パラメータが行列の配列の場合、この関数は OK
を返します。 いずれの場合も、入力 matrix3 の値は変換された行列の値で置き換えられます。
-- all angles in degrees
-- mapped functions
preRotateX<matrix3> <number>
preRotateY<matrix3> <number>
preRotateZ<matrix3> <number>
preRotate<matrix3> <quat>
入力行列に順次増加する回転変換を適用します。これは、変換により左で乗算するのと同じです。matrix3 パラメータが単独の行列の場合は、この関数により変換された行列が返されます。パラメータが行列の配列の場合、この関数は OK
を返します。 いずれの場合も、入力 matrix3 の値は変換された行列の値で置き換えられます。
preScale <matrix3> <point3> -- mapped function
入力行列に順次増加するスケール変換を適用します。これは、変換により左で乗算するのと同じです。matrix3 パラメータが単独の行列の場合は、この関数により変換された行列が返されます。パラメータが行列の配列の場合、この関数は OK
を返します。 いずれの場合も、入力 matrix3 の値は変換された行列の値で置き換えられます。
関連するメソッド:
<float>GetEulerMatAngleRatio <mat1> <mat2> <array1> <array2>
<float>GetEulerMatAngleRatio <mat1> <mat1> <eulerAngle1> <eulerAngle2>
<float>GetEulerMatAngleRatio <mat1> <mat1> &<var1> &<var2>
詳細は、「EulerAngles 値」を参照してください。