1-1 ベクトル其の壱

 

これが…進化だとでも言うのかッ!

アムロ・レイ(ニュータイプ)

 

 

1.ベクトルとはなんぞや

 ベクトルとは大きさと向きをもつ量のことである。
という答えで可がもらえるかどうかは知りませんが、私の中ではこんなもんです。
例えば、私が毎朝ゴトゴト揺られている京王線の速度(東に時速60Km)はベクトルです。
これに対し、大きさのみで表される量をスカラーといいます。
先の例では時速60Kmというのがスカラーです。
 ちなみに、力学では"速度"はベクトル(東に時速60Km)を、
"速さ"はスカラー(時速60Km)を指すようです。

 3Dプログムでは、ベクトルはどのようなところに使用されているのでしょうか?
例えば、3DCGでおなじみのポリゴンは多数の頂点で形成されますが、
これらの頂点の位置はベクトルで表すことができます。
ライティング計算では、光源の位置や光線の方向をベクトルで表します。
照らされる面の向きもベクトルで表します。
オブジェクトの動きに目を向けると、オブジェクトの速度は前述のとおりベクトルで表せます。
点Aから点Bまで移動したときの移動量(変位)もベクトルです。
回転速度(角速度)や回転方向もベクトルで表すことができます。

 このように、3Dプログラムではいたるところでベクトルが用いられています。
まずはベクトルと友達になりましょう。


2.自由ベクトルと束縛ベクトル

 あなたが右手で握っている硬いもの(マウス)を動かしてみてください。

(図1-1.1)

黄色の矢印があなたからみたマウスの位置を表すベクトルで、
緑の矢印はマウスの変位を表すベクトルです。
ベクトルを幾何学的に表すにはこんな感じで矢印を用います。
矢印の向きがベクトルの方向(そのまんまやな)を、線分の長さが
ベクトルの大きさを表します。

 まずは黄色の位置ベクトルに注目しましょう。
ベクトル(頭->A)とベクトル(頭->B)を見比べれば、
方向・長さ・太さとも異なっているのが分かります。太さはどうでもいいんですが。
これらは異なる位置(AとB)を表すベクトルなので、当然異なるベクトルとなります。
ベクトル(頭->B)とベクトル(頭'->B)を見てみると、
これらは同じ位置(B)を表すベクトルなのに長さ・方向とも異なっています。
同じ位置にあるマウスでも、あなたの位置が変われば
あなたから見たマウスの位置も変わるということです。
図で見ると、同じ位置(B)を表すベクトルでも、起点(頭, 頭')が変われば
異なるベクトルになるということです。
 このように、起点を定めなければならないベクトルを、束縛ベクトルといいます。
縛られてるんですって。


 次に緑のベクトルを見てみます。これはマウスの変位を表すベクトルです。
位置Aにあるマウスと位置Bにあるマウスを同じように、例えばあなたから見て
右に10cm動かしたとします。このとき変位ベクトル(A->A')と変位ベクトル(B->B')は
等しくなります。図では明らかに異なる位置にありますが、変位なんで位置はどうでもいいんです。
向きと大きさが同じであれば同じ変位を表すベクトルということになります。
MSペイント、割れもんのPh○t○Sh○p、その他なんでも好きなものを使って
ベクトル(B->B')を平行移動してベクトル(A->A')に重ねてみてください。ぴったり重なるはずです。
これは、(B->B')は(A->A')をコピーした図だからです。ではなくて
大きさと向きが等しいのでぴったり重なります。
このように、位置が問題とならないベクトルを、自由ベクトルといいます。


3.ベクトルの成分

 ベクトルを具体的な数値で表してみましょう。
そのためには、まず基準となる座標系を決める必要があります。
前節で何回か"あなたから見て"という言い回しをしましたが、
この"あなた"がここでいう"基準となる座標系"に相当します。
前節で述べた通り、束縛ベクトル、例えば位置ベクトルでは、同じ位置であっても
基準点によりベクトルの値は異なるので、基準となる位置(原点)を定める必要があります。
自由ベクトルでも、"あなたから見て右方向"というように、基準となる方向(座標軸)が必要です。
もちろん束縛ベクトルでも座標軸は必要です。例えば、あなたから見て
右に10cm, 前に20cmの位置にマウスがあるという具合です。

 2Dでは、例えばこんな感じ(↓)で、

(図1-1.2)

ある点を原点Oとし、Oを通り互いに直行する2本の直線X, Yを引きます。
で、原点Oから点Pに向かうベクトルをAとすると、
AはAのX, Y方向の成分x, yで表せます。これを



という風に書きます。Ax,Ayというのは、ベクトルAのx,y成分と言う意味です。
原点はO(0,0)、X軸とY軸はそれぞれX(1, 0), Y(1,0)です。X軸とY軸は方向のみを表します。
自由ベクトルの場合、その起点が原点Oにくるように平行移動し、
あとは同じように成分を求めます。

 いまさらですが、数学の教科書などではベクトルは太字で、スカラーは細字で
表す慣習になっていますが、めんどくさいんでうちではあまり気にしないことにします(ぉぃ

 この例のような座標を、直線直行座標(デカルト座標)といい、
3Dプログラムでは多くの場合このデカルト座標を使用します。
この他によく(でもないか)使用されるのが極座標というやつで、
(図1-1.2)でX軸とAの成す角をθ、原点Oから点Pまでの距離をrとして、
A(r,θ)という風に表します。3次元極座標の身近な例として、
地表上の位置を表す緯度・経度があります。この場合は地表上の位置
なので原点(地球の中心。ただしアリアハンのことではない)からの距離は省略していますが、
これに原点からの距離rを加え、A(r,θ,φ)としたものが3次元極座標です。
うちでは単に座標といった場合はデカルト座標を指すことにしますが、
極座標の方が考えやすいケースも多々あります。覚えておきましょう。

 次は3次元のデカルト座標を考えてみましょう。(図1-1.2)のX軸Y軸と直交する
Z軸を導入すればよいのですが、ここでちょっとした問題があります。
あなたからモニターに向かう向きと、モニターからあなたに向かう向きの、
どちらを正とすればよいのでしょうか? まぁどっちでもいいんですが。
X軸(Y軸)はなぜ左(下)を正としないんだという方はほっといてお手を拝借。
まず親指と人差し指を直交するように伸ばしてください。
次に、それらと直交するように中指を伸ばします。フレミングの左手の法則です。
出来ましたら、親指を(図1-1.2)のX軸に、人差し指をY軸に合せて頂きたい。
そのときの中指の向きをZ軸の正方向とすると、左手ではあなたからモニタに向かう向きが、
右手ではモニタからあなたに向かう向きが正になります。
前者の向きにとった座標軸を左手座標系、後者を右手座標系とよんだりします。
ちなみにX軸Y軸の(どちらか一方、あるいは両方の)方向を逆にした場合も、
左か右のどちらかに一致します。ひまな人は試して見ましょう。

 この左手座標系と右手座標系なんですが、どちらが正しいということは
ありません。多分。(ただし、大半の数学書は右手座標系のようです)
射影変換などを考えると左手のほうが素直な気がしますが、どちらが優れている
ということもありません。なんで、好きなほうを選んでかまいません。
ただし、どちらか一方に決めましょう。
うちでは左手座標系を採用することにします。


 さて3次元デカルト座標。
図を書くのが面倒なんでサンプルプログラム (↓これ)を用意しました。
Java? なにそれ?



動作環境は1.骨 のサンプルと同じで、操作方法もほぼ同じです。
左ドラッグでカメラ平行移動、右ドラッグでカメラ回転、中ドラッグでスーム。
スペースキーを押しながら赤い大き目の球をドラッグするとそいつが移動します。
黄色い線は原点から赤い球に向かうベクトル、つまり赤い球の位置ベクトルで、
その成分は各座標軸のそばに表示されます。

目次に戻る
ベクトル其の弐