vector オブジェクトは表示できるオブジェクトではありません。しかし 3D 表示計算を支援する強力な道具になります。vector オブジェクトは物理や工学で使われるベクトルと良く似ています。Numeric のarray と一緒に使われます。(Numeric は Python に追加されます。数値配列に最適化されています。高速に計算できるモジュールです。 Visual によって自動的に import されます。)(訳注 vector と Numeric.array とは別物です。vector は visual\cvisual.dll 内部で定義されています。三次元に特化したベクトルとして作られています。)
上の式は引数要素の組からなる vector オブジェクトを返します。vector 要素は浮動小数点です。( 3 の整数引数が与えられても 3.0 に変換します)
vector オブジェクトは互いに加減算可能です。普通の数を掛けることもできます。下に例を示します。
v2 = vector(10,20,30)
print v1+v2 # displays (11 22 33)
print 2*v1 # displays (2 4 6)
vector オブジェクトの個別要素を読み書きできます。
v2.x is 10, v2.y is 20, v2.z is 30
vector オブジェクトから vector オブジェクトを作ることもできます。 vector(v2) もやはり vector(10,20,30)の python 式によって作られる vector オブジェクトになります。
vector(10,12) は vector(10,12,0)の短縮形です。
vector オブジェクトは Python のシーケンスです。ですから v2.x は v2[0] と、また v2.y は v2[1] と、また v2.z は v2[2] と同じです。
You can also obtain the magnitude in the form v2.mag. and the square of the magnitude as v2.mag2.
vector オブジェクトの長さを v2.mag でも求められます。長さの二乗を v2.mag2 でも求められます。
vector オブジェクトは、長さの値 または 長さの二乗値で再設定できます
norm() によって長さ 1 の vector オブジェクトにできます。すなわち正規化:normalize できます。
v1.norm() と書くこともできます。 norm(v1) = v1/mag(v1)であり、ゼロ長さの vecotor オブジェクトを正規化することはできません norm(vector(0,0,0)) は 0 での割り算が入り込むのでエラーになります。
上の式は二つの vector オブジェクト vector1 と vector2 の二つの間にできる角度をラディアンの単位で返します。
上の式は二つの vector オブジェクト vector1 と vector2 の二つから定まる外積 vector オブジェクトを返します。外積は二つのベクトルより定まる平面に垂直です。その方向は右手の法則で定まります。右手の人差し指が vector1 の方向を、中指が vector2 の方向を向いているとき、親指の向きが外積ベクトルの向きです。外積ベクトルの長さは、vector1 と vector2 の長さを掛けたものに、さらに二つのベクトルの間の角度の sin を掛けた値となります。
上の式は二つの vector オブジェクト vector1 と vector2 の二つから定まる内積値を返します。内積値の大きさは、vector1 と vector2 の長さを掛けたものに、さらに二つのベクトルの間の角度の cos を掛けた値となります。
vector オブジェクトの回転
# 訳注 (1,1,1) は例としてのタプル値です。引数デフォルト値ではありません。
axis 引数のデフォルト値は (0,0,1) です。 z 軸を中心に xy 平面内で回転させることを意味します。vector オブジェクトを回転させる原点は指定しません。Visual オブジェクトに属する rotate(.) 関数を呼び出す形式でも記述できます。object.rotate() の形式です。(dot, cross 関数についても vector オブジェクトに属する関数として呼び出せます。訳注:rotate(.) 程に有効には見えませんけれど。)
# 訳注 object.rotate() 形式で記述するときは、angle 引数は明示的に引数変数名を付けねばなりません。object.rotate(v1,pi/3) と書いても objct.rotate(v1,0) の意味になってしまいます。object.rotate(v1,angle = pi/3) と書かねばなりません。
便利な変換
便利なことに Visual は Visual オブジェクトを生成するとき、 (a,v,c) を自動的に浮動小数点値の vector(a,b,c) に変換してくれます。しかし (a,b,c) を直接ベクトル計算に使うとエラーになります。(a,b,c) は vector オブジェクトではないからです(訳注:(a,b,c) は Python のタプル型変数値です)。代わりに vector(a,b,c) と記述します。
vector オブジェクト vec1 は tuple(vec1) と記述することで Python のタプル変数 (a,b,c) に変換できます。より高速に処理させるために vec1.as_tuple() と記述することもできます。