Vector3を使用することで、3D空間の位置または長さを持つ3D方向を表現することができます。
hou.Vector2とhou.Vector4も参照してください。
メソッド ¶
__init__(values=(0.0, 0.0, 0.0))
floatのシーケンスからVector3を返します。このメソッドをパラメータなしでコールすると、 その結果のベクトルには(0.0, 0.0, 0.0)の値が格納されます。
hou.Vector4からVector3を構築することもできます。 その結果には、Vector4の最初の3つの値が入ります。
values
が3つのエレメント長でなかった場合はInvalidSize
を、
values
がfloatのシーケンスでなかった場合は、TypeError
を引き起こします。
__getitem__(index)
→ float
指定したインデックスでのfloatコンポーネントを返します。このメソッドは、ベクトルをシーケンスの挙動 (つまり、例えばベクトルのエレメントに対してfor loopを使用したり、ベクトルをfloatのタプルに変換したりすることができます。)にします。 そして、ベクトルのインデックスには大括弧を使用することができます。
>>> v = hou.Vector3((1.0, 2.0, 3.0)) >>> v[-1] 3.0
__setitem__(index, value)
このメソッドは、大括弧を使用することで、ベクトルに値を設定することができます。
>>> v = hou.Vector3((1.5, 2.5, 3.5)) >>> v[1] = 0.5 >>> print v [1.5, 0.5, 3.5]
setTo(sequence)
このベクトルの内容をfloatのシーケンスに設定します。
values
が3つのエレメント長でなかった場合はInvalidSize
を、
values
がfloatまたはintのシーケンスでなかった場合は、TypeError
を引き起こします。
__len__()
→ int
3を返します。このメソッドは、Vector3に対してlen()をコールすることができます。
__add__(vector3)
→ hou.Vector3
2つのベクトルを加算して、その2つベクトル内のそれぞれのコンポーネントの合計が各コンポーネントである新しいベクトルを返します。
このメソッドは、v1 + v2
と記述することができます。v1
とv2
はVector3オブジェクトです。
このメソッドは、hou.Vector3(self[0] + vector3[0], self[1] + vector3[1], self[2] + vector3[2])
と等価です。
__sub__(vector3)
→ hou.Vector3
他のベクトルからベクトルを減算して、最初のベクトルの各コンポーネントから2番目のベクトルのそれに該当するコンポーネントを減算した新しいベクトルを返します。
このメソッドは、v1 - v2
と記述することができます。v1
とv2
はVector3オブジェクトです。
このメソッドは、hou.Vector3(self[0] - vector3[0], self[1] - vector3[1], self[2] - vector3[2])
と等価です。
__neg__()
→ hou.Vector3
このベクトルのコンポーネントのマイナス値を含んだベクトルを返します。
このメソッドは、-v
と記述することができます。v
はVector3オブジェクトです。
このメソッドは、hou.Vector3(-self[0], -self[1], -self[2])
と等価です。
__mul__(scalar_or_matrix3_or_matrix4)
→ hou.Vector3
このベクトルをスカラーまたはマトリックスと乗算して、新しいベクトルを返します。
このメソッドは、v * s
またはv * m
と記述することができます。
v
はベクトル、s
はfloatのスカラー、m
はhou.Matrix3またはhou.Matrix4です。
パラメータがfloatスカラーs
の時、このメソッドは、hou.Vector3(self[0] * s, self[1] * s, self[2] * s)
と等価です。
Vector3をMatrix4で乗算するには、Vector3を4番目のコンポーネントが1.0のVector4に変換します。 その効果は、そのベクトルが位置として扱われるので、トランスフォームマトリックスに移動コンポーネントが含まれていれば、その戻り値が移動します。 ベクトルをトランスフォームさせたい(例えば、回転以外の移動を無視して適用したい)なら、その該当するhou.Vector4を4番目のコンポーネントを0に設定した状態でトランスフォームさせる必要があります:
# Z軸を180度回転させ、X方向に1移動させるトランスフォームマトリックスを構築します。 >>> matrix = hou.hmath.buildRotateAboutAxis((0, 0, 1), 180) * hou.hmath.buildTranslate((1, 0, 0)) >>> position = hou.Vector3(0.0, 1.0, 0.0) # (0,1,0)のポイントを(0,-1,0)に回転させて、(1,-1,0)に移動させます。 >>> position * matrix <hou.Vector3 [1, -1, 0]> # (0,1,0)ベクトルを(0,-1,0)に回転させ、移動量を無視します。 >>> vector = hou.Vector4(tuple(position) + (0.0,)) >>> vector <hou.Vector4 [0, 1, 0, 0]> >>> vector * matrix <hou.Vector4 [0, -1, 0, 0]> >>> hou.Vector3(vector * matrix) <hou.Vector3 [0, -1, 0]> # 関数で上記のことをラップすることができます: >>> def transformAsVector(vector3): ... return hou.Vector3(hou.Vector4(tuple(vector3) + (0.0,)) * matrix) >>> transformAsVector(position) <hou.Vector3 [0, -1, 0]> # Vector4の最後のコンポーネントを1に変更して、再度ポイントとしてトランスフォームさせています。 >>> vector[-1] = 1.0 >>> vector <hou.Vector4 [0, 1, 0, 1]> >>> vector * matrix <hou.Vector4 [1, -1, 0, 1]>
hou.Matrix4も参照してください。
__rmul__(scalar)
→ hou.Vector3
このベクトルをスカラーで乗算して、新しいベクトルを返します。
このメソッドは、s * v
と記述することができます。v
がベクトルでs
がfloatスカラーです。
hou.Vector3.__mul__も参照してください。これはv * s
と記述することができます。
>>> v = hou.Vector3(1, 2, 3) >>> v * 2 <hou.Vector3 [2, 4, 6]> >>> 2 * v <hou.Vector3 [2, 4, 6]>
__div__(scalar)
→ hou.Vector3
このベクトルをfolatスカラーで除算して、新しいベクトルを返します。
このメソッドは、v / s
と記述することができます。v
がベクトルでs
がfloatスカラーです。
このメソッドは、hou.Vector3(self[0] / scalar, self[1] / scalar, self[2] / scalar)
と等価です。
length()
→ float
このベクトルを方向ベクトルとして解釈し、その長さを返します。
その結果は、math.sqrt(self[0]**2 + self[1]**2 + self[2]**2)
と同じです。
lengthSquared()
→ float
このベクトルを方向ベクトルとして解釈し、その長さの2乗を返します。
その結果は、self[0]**2 + self[1]**2 + self[2]**2
と同じです。
normalized()
→ hou.Vector3
このベクトルを方向ベクトルとして解釈し、同じ方向を持つ長さが1のベクトルを返します。
ベクトルの長さが0(または、ほぼ0)なら、その結果は元のベクトルになります。
非ゼロ長のベクトルに関しては、このメソッドはself * (1.0/self.length())
と等価です。
multiplyAsDir(matrix4)
→ hou.Vector3
このベクトルを方向として解釈し、matrix4によって回転とスケール(移動を含まない)がトランスフォームされた方向を返します。
distanceTo(vector3)
→ float
このベクトルと引数を3Dポジションとして解釈し、それらの距離を返します。戻り値は(self - vector3).length()
と等価です。
dot(vector3)
→ float
このベクトルとパラメータのベクトルとの内積を返します。
この値は、self[0]*vector3[0] + self[1]*vector3[1] + self[2]*vector3[2]
と等価です。
また、これはself.length() * vector3.length() * math.cos(hou.hmath.degToRad(self.angleTo(vector3)))
と等価です。
Wikipediaの内積のページ を参照してください。
cross(vector3)
→ hou.Vector3
このベクトルと他のベクトルとの外積を返します。
戻り値は、両方のベクトルに垂直なベクトルで、右手ルールで定義された方向を向きます。
その長さは、self.length() * vector3.length() * math.sin(hou.hmath.degToRad(self.angleTo(vector3)))
です。
Wikipediaの外積のページ を参照してください。
angleTo(vector3)
→ float
このVector3とそのパラメータを方向として解釈し、それらの原点を同じ位置に配置した時のその2つのベクトル間のなす角(度)を返します。
matrixToRotateTo(vector3)
→ hou.Matrix4
このベクトルをvector3
まで回転させるマトリックスを返し、2つのベクトルに垂直な軸を基準に回転させます。
2つのベクトルが同じ方向であれば、単位行列を返します。
almostEqual(vector3, tolerance=0.00001)
→ bool
廃止されました。代わりにVector3.isAlmostEqualを使用してください。
isAlmostEqual(vector3, tolerance=0.00001)
→ bool
このベクトルが他のベクトルと許容値の範囲内で同じかどうか返します。 このベクトルの各コンポーネント間と他のベクトルのそれに該当するコンポーネントとの差が許容値の範囲内にあるかどうか調べます。
smoothRotation(reference, rotate_order="xyz")
→ hou.Vector3
reference
に最も近い値を持っていると同時にこのベクトルと同じ向きを表現しているオイラー回転(単位は度)を返します。
reference
オイラー角のhou.Vector3(単位は度)。通常では、これは前のサンプル/フレームからの回転です。
rotate_order
座標軸を基準に実行する回転の順番を決定するための、文字x
,y
,z
の順列を含んだ文字列。
ocio_transform(src_space, dest_space)
→ hou.Vector3
Open Color IOを使用することで、ソースのカラー空間をターゲットのカラー空間に変換することができます。
x()
→ float
ベクトルの1番目のコンポーネントを返します。これはv[0]
と等価です。
y()
→ float
ベクトルの2番目のコンポーネントを返します。これはv[1]
と等価です。
z()
→ float
ベクトルの3番目のコンポーネントを返します。これはv[2]
と等価です。
distanceToSegment(point1, point2)
→ float
このベクトルから、point1
とpoint2
で定義された線分までの距離を計算します。
point1
線分の始点となるhou.Vector3。
point2
線分の終点となるhou.Vector3。
distance2ToSegment(point1, point2)
→ float
このベクトルから、point1
とpoint2
で定義された線分までの距離の2乗を計算します。
point1
線分の始点となるhou.Vector3。
point2
線分の終点となるhou.Vector3。
pointOnSegment(point1, point2)
→ hou.Vector3
大元のベクトルを、point1
とpoint2
で定義された線分上に投影します。戻り値のポイントは、その線分上に乗っています。
point1
線分の始点となるhou.Vector3。
point2
線分の終点となるhou.Vector3。