Houdiniでは、3×3マトリックスは通常では3D回転(スケールも含む)の表現に使用されています。 Houdiniのほとんどの箇所ではhou.Matrix4が使用されています。 これは3Dトランスフォーム(移動を含む)を保存したり生成することができます。
hou.Matrix4(matrix3)
を書くことで、Matrix3から一般的なトランスフォームのMatrix4を構築することができます。
メソッド ¶
__init__(values)
新しいMatrix3を返します。パラメータなし(その結果はすべてゼロになります), float(その結果の対角線の値がそのfloat値になり、残りがすべてゼロになります), 9個のfloatシーケンス、3個のfloatシーケンスのシーケンスを渡すことができます。
>>> hou.Matrix3() <hou.Matrix3 [[0, 0, 0], [0, 0, 0], [0, 0, 0]]> >>> hou.Matrix3(1) <hou.Matrix3 [[1, 0, 0], [0, 1, 0], [0, 0, 1]]> >>> hou.Matrix3((0, 1, 2, 3, 4, 5, 6, 7, 8)) <hou.Matrix3 [[0, 1, 2], [3, 4, 5], [6, 7, 8]]> >>> hou.Matrix3(((0, 1, 2), (3, 4, 5), (6, 7, 8))) <hou.Matrix3 [[0, 1, 2], [3, 4, 5], [6, 7, 8]]>
Houdiniのマトリックスは行優先の順番で保存されるので、マトリックスの内容は行でグループ化されます。
at(row, col)
→ double
指定した行と列でのマトリックスの値を返します。
行または列の数が0個以上2個以下でなかった場合、IndexErrorを引き起こします。 マイナスのインデックスは最後からインデックスを始めないことに注意してください。
setAt(row, col, value)
指定した行と列でのマトリックスの値を設定します。
行または列の数が0個以上2個以下でなかった場合、IndexErrorを引き起こします。 マイナスのインデックスは最後からインデックスを始めないことに注意してください。
asTuple()
→ tuple
of float
マトリックスの内容を9個のfloatのタプルとして返します。
asTupleOfTuples()
→ tuple
of tuple
of float
マトリックスの内容を3個のfloatのタプルのタプルとして返します。
setTo(tuple)
このマトリックスの内容を設定します。シーケンスには9個のfloatまたは、各3個のfloatを持つ3個のシーケンスを指定することができます。
最適なパラメータ値のサンプルは、hou.Matrix3.__init__を参照してください。
setToIdentity()
このマトリックスを(対角線上の値が1の)乗法単位行列に設定します。
このマトリックスには[[1, 0, 0], [0, 1, 0], [0, 0, 1]]
の値が格納されます。
hou.Matrix3(1)
を使用することでも、そのような値を持ったマトリックスを新しく構築することができます。
setToZero()
すべてがゼロのマトリックスを設定します。
hou.Matrix3()
を使用することでも、すべてがゼロのマトリックスを新しく構築することができます。
__add__(matrix3)
→ hou.Matrix3
2つのマトリックスを、それぞれに該当するエントリーと加算して、新しいマトリックスを返します。
このメソッドによりm1 + m2
を記述することができます。m1
とm2
はMatrix3オブジェクトです。
__sub__(matrix3)
→ hou.Matrix3
このマトリックスから他のマトリックスのそれぞれに該当するエントリーで減算して、新しいマトリックスを返します。
このメソッドによりm1 - m2
を記述することができます。m1
とm2
はMatrix3オブジェクトです。
__mul__(matrix3_or_scalar)
→ hou.Matrix3
このマトリックスを他のマトリックスやスカラーで乗算して、新しいマトリックスを返します。
このメソッドによりm1 * m2
やm1 * s
を記述することができます。m1
とm2
はMatrix3オブジェクトで、s
はfloatです。
その結果での各エレメントの計算方法に関する詳細は、 Wikipediaのマトリックス乗算のページ を参照してください。 hou.Matrix4も参照してください。
preMult(matrix3)
→ hou.Matrix3
matrix3 * self
を返します。 __mul__
はself * matrix3
を返します。
これはマトリックス乗算が可換性でないので、異なった結果になります。
extractRotates(rotate_order="xyz")
→ hou.Vector3
このマトリックスの回転成分を意味するEuler角(単位は度)のVector3を返します。 座標軸を基準に指定した順番でそれらの量だけ回転させると、このマトリックスに含まれている回転を生成します。
rotate_order
x
, y
, z
の文字の順列を含んだ文字列。
これは、座標軸を基準に実行される回転順を決めます。
マトリックスが無効な回転マトリックス(例えば、特異行列)だった場合や、回転順が文字列'xyz'
の順列でない場合は、hou.OperationFailedを引き起こします。
hou.Matrix4.explodeとhou.Matrix4.extractRotatesも参照してください。
Warning
マトリックス内にスケールまたはシアーがあった場合、最初の左側の行列が削除された結果(つまり、 SR → R)になります。 スケールまたはシアーを取り出したいのであれば、まず最初に目的のトランスフォーム順でhou.Matrix3.removeScalesAndShearsを使用してください。
removeScalesAndShears(transform_order="srt")
→ tuple of (hou.Vector3, hou.Vector3)
このマトリックスからスケールとシアーを削除し、それらを(スケール,シアー)のタプルで返します。
transform_order
s
, r
, t
の文字の順列を含んだ3文字。
s
がr
の前にある場合、このマトリックスの左側の行列からスケール/シアーが抽出されます。
それ以外の場合、代わりに右側の行列からスケール/シアーが抽出されます。
transform_order
が無効だった場合はhou.OperationFailedを引き起こします。
関連項目: hou.Matrix3.extractRotates, hou.Matrix4.extractRotates, hou.Matrix4.extractRotationMatrix3
inverted()
→ hou.Matrix3
このマトリックスの逆行列を返します。
マトリックスが可逆行列でない場合は、hou.OperationFailedを引き起こします。
可逆行列の場合は、(self * self.inverted()).isAlmostEqual(hou.Matrix3(1))
はTrueです。
詳細は、 Wikipediaの可逆行列のページ を参照してください。
transposed()
→ hou.Matrix3
このマトリックスの転置行列を返します。その結果は、0 <= i,j <= 2
に対して、self.at(i, j) == self.transposed().at(j, i)
となります。
詳細は、 Wikipediaの転置行列のページ を参照してください。
isAlmostEqual(matrix3, tolerance=0.00001)
→ bool
このマトリックスが許容値内で他のマトリックスと等価かどうか返します。