ベクトル
ベクトルとは
MEL には、ベクトル(vector)という型があります。
ベクトルは、 3 つの数値を 1 つの組にしたもので、 3 次元の座標や色など表すときなどに便利です。
例えば、ベクトルを使用すると 3 回分の加減乗除の計算が 1 回で行なえるので式が簡単になります。
また、 MEL コマンドでベクトルを扱うものも存在します。
ベクトルの例
ベクトルは、 <<と>> の間に
3 つの数値や変数を , (カンマ)で区切って並べることによって表します。
ベクトルを定義する時の数値・変数は、整数(int)でも実数(float)のどちらでも使用可能ですが、
ベクトルの 3 つの数値は float 型として扱われます。
以下がベクトルの例です。
<<2, 3, 4>> ← <<2.0, 3.0, 4.0>> と同じです
<<1.5, 2.3, 0.5>>
<<3.2, 2, 5.01>>
ベクトルは、ベクトル型の変数に代入することができます。
$val = 2.5;
vector $vec1 = <<$val, $val, 1.2>>; ← $vec1 は <<2.5, 2.5, 1.2>> になります
vector $vec2 = <<$val, $val * 2.5, $val - 1.2>>; ← $vec2 は <<2.5, 6.2, 1.3>> になります
ベクトル型変数の 3 つの数値のうちから 1 つを取り出したいときは、以下のように、
1 つ目は変数名の後に .x 、2 つ目は .y、3 つ目は .z をつけます。
vector $vec3 = <<1.5, 2.5, 3.01>>;
float $valx = $vec3.x; ← $valx は 1.5 になります
float $valy = $vec3.y; ← $valy は 2.5 になります
float $valz = $vec3.z; ← $valz は 3.0 になります
ベクトルは、配列にすることもできます。
vector $avec[] = {<<1.5, 2.3, 3.5>>, <<2.6, 8.2, 1.8>>, <<3.2, 6.7, 5.1>>};
vector $v1 = $avec[0];
float $f1 = $v1.x; ← $f1 は 1.5 になります
print ($v1.x);
ベクトルの演算子
ベクトルの計算・比較などに使用できる演算子は以下の通りです。
- +, -, /, %, +=, -=, /=, %=
- 2つのベクトルの 3 つの数値同士の演算
例えば、
<<2, 3, 4>> + <<5, 6, 7>>
の計算結果は
<<7, 9, 11>>
になります。
- *, *=
- ベクトル同士の内積
- ^
- ベクトル同士の外積
- ||, &&, !, >, <, >=, <=
- ベクトルの長さによる比較
- ==
- ベクトルの 3 つの数値がすべて同じ場合に真
- !=
- ベクトルの 3 つの数値のどれかが違う場合に真
ベクトル関係のコマンド
- angle vector1 vector2
- vector1とvector2の間の角度(float)を返します。
- cross vector1 vector2
- vector1とvector2の外積(vector)の値を返します。
- dot vector1 vector2
- vector1とvector2の内積(float)の値を返します。
- mag vector
- vectorの長さ(float)の値を返します。
- rot vector1 vector2 float
- vector1をvector2を軸としてfloatだけ回転したベクトルを返します。
- unit vector
- vectorの長さを1にしたベクトル(単位ベクトル)を返します。
ベクトルの使用例
- vector $v1 = <<1, 2, 3>>;
- 変数 $v1 にベクトル <<1, 2, 3>> を代入します。
- vector $v2 = $v1 + <<4, 5, 6>>;
- 変数 $v1 にベクトル <<4, 5, 6>> を加算します。
- vector $v3 = $v1 + $v2;
- ベクトル変数 $v1 と $v2 を加算します。
もちろん、$v3 もベクトル変数になります。
- $x = $v1.x;
- 変数 $x に $v1 の X 成分を代入します。
- print ($v1.x);
- $v1 の X 成分を表示します。
この場合、( ) が無いとエラーになることに注意してください。
- vector $v4 = <<$v1.x, $v2.y, $v3.z>>;
- ベクトル変数 $v4 の X 成分に $v1 の X 成分を、
Y 成分に $v2 の Y 成分を、
Z 成分に $v3 の Z 成分を代入します。
このとき、直接 X 成分に代入はできないので $v4.x=$v1.x などとはできません。
- vector $v5 = 2.5 * $v4;
- ベクトル変数 $v4 に 2.5 を乗算します。(スカラー積)
- vector $v6 = 3 + $v4;
- ベクトル変数 $v4 に 3 を加算します。
3 + $v4は<<3 + $v4.x, 3 + $v4.y, 3 + $v4.z>> と同じです。
- float $iv = $v4 * $v5;
- ベクトル変数 $v4 と $v5 の内積を計算します。
変数 $iv は float になります。
- vector $ov = $v1 ^ $v2;
- ベクトル変数 $v1 と $v2 の外積を計算します。
結果の $ov はベクトルになります。
- vector $v7 = $v5 / $v6;
- ベクトル変数 $v4 の $v5 による除算を計算します。
$v5 / $v6は<<$v5.x/$v6.x, $v5.y/$v6.y, $v5.z/$v6.z>> と同じです。
- if($v7 > <<3, 4, 5>>) print "true\n";
- ベクトル変数 $v7 の長さが <<3, 4, 5>> の長さの値より大きければ true を表示します。
- if($v7 == <<3, 4, 5>>) print "true\n";
- ベクトル変数 $v7 の X 成分が 3、Y 成分が 4、Z 成分が 5 に等しければ true を表示します。
練習
- 上の、ベクトルの使用例に出てきた変数 $v1 から $v7 の値がいくらになるか計算してみてください。
- $v1 = <<2, 3, 4>>
$v2 = <<5, 6, 7>>
として、以下の各変数の値はいくらになるでしょうか。
- $v3 = $v1 + $v2 - <<8, 9, 10>>
- $v4 = $v3 / $v2
- $v5 = 2 * ($v4 - $v3)
参考
Prev
Home | Contents
Mail