3Dプログラミングで使う色々なベクトル計算を直観的に身体に覚えさせてあげますのよ【基礎編】
初めに申し上げておきますわ!
お~っほほほほ!!
よくいらっしゃったわね!迷える子犬ちゃんたち!
この記事では3D空間上のオブジェクトを扱うのに便利なベクトル計算についてまとめたいと思いますのよ!
例えば、「ベクトルの回転」あるいは「面と点との距離」なんていうものに興味があるんじゃないかしら?
ベクトルというのはとてもよく考えられた仕組みで、こういったものが簡単に、たとえあなたのような子犬ちゃんにでも計算できるようになっているのよ。
そして私たちがやりたいと思う大抵のベクトル計算については公式を誰かが作ってくれているものよ。
え?じゃあその公式を使えばいいじゃないか、ですって?
シイイイィィッッット!!!!!!!
そんなだからいつまで経ってもヘボヘボのまんまなんですのよ!
貴族たるもの、いついかなる時でも優雅に、そして鷹揚としていなければなりませんわ。鷹揚としているにはどうすればいいのか。そう、応用ですの!!
覚えた公式をただコピペして使っているだけでは何かあったときに応用できずに鷹揚とできなくなるのですわ!!
Oh you!!応用!!鷹揚!!
でも安心なさい?迷える子犬ちゃんたちを救ってあげるのも淑女の役目というものですわ。
今からあなたたちにみっちりきっちり教えてあげますわ!
それも公式の導出方法ではなく、視覚的かつ直観的に身体に覚えさせてあげますのよ!
直観的に理解してしまえば、公式の導出なんてあとはちょちょいのちょいですの!
よろしくって?では行きますのよ!
基礎的事項の確認
以下、単純化のために2次元ベクトルで考えていきますわ。
ベクトルとは
ベクトルが何かも知らない人なんてここには来ていないでしょうけど、念には念を入れて一応説明しておきますのよ。
ベクトルとは「大きさと向きを持った量」である(presented by Wikipedia)
この一言に尽きますわね。「あっちの方にバーーっと」というのがベクトルですわ。
ただこんな言い方をされても一部の選ばれし人間を除くほとんどの場合は、あっち?どっち?そっち?となるのが関の山ですわ。
だから北に一条、東に三坊、という風にちゃんとした基準となる方向と大きさを決めて、その組み合わせで指定するのが貴族というものですわ。
ベクトルの世界では基準となる方向をX軸方向やY軸方向、大きさを数字(スカラーと呼びますの)で表すといった風に決めていますわ。
図のようなpというベクトルは数式でと表されることが多いんですの。
ベクトルを基準となる方向毎に分解したものをベクトルのX成分、Y成分という風に呼ぶことがあるわ。
それぞれベクトルを表す変数に添え字でどの方向に対する成分なのかを書いて、やといった風に書くことが多いわ。
ベクトルの操作
ベクトルに対する操作は、各成分に対する操作に分解できることが多いわ。
例えばベクトルの大きさを倍したい場合、と各成分を倍してあげればいいのよ。
ベクトルの回転
ベクトルの回転は最も基本的なベクトル操作の一つですわ。
その中でも「ある単位ベクトルがX軸方向を向くように回転させる」方法を理解しておけば応用が利きますのよ。頑張りなさい?
回転させる前のベクトルを としますわよ?
これ各成分, を辺に持つ長方形の対角線だと考えると、ベクトルの回転はこの長方形を回転させる操作だと考えることができるわね。
ここで各ベクトル同士の角度関係を考えると、回転によって長方形の各辺は次のように移動するわ。
イメージをつかみやすいように、下の図と一緒に見てみるとよいのですわ。
- 回転前の長方形にとってのX軸方向 → ベクトルのY成分がマイナスになった方向
- 回転前の長方形にとってのY軸方向 → ベクトルのX成分とY成分が入れ替わった方向
というわけで、「ベクトル方向からX軸方向への回転」を「各成分ベクトルの回転に分解」することができたわね。
そして、長方形を回転させるために各辺を回転させるという操作は、じゃなくても任意のベクトルに当てはめることができるわ。
したがって同じ方法を使って、別のベクトルに対して、ベクトルをX軸方向に回転させるような操作を行うこともできるわ。
式を書くと説明が長くなってしまったのだけれど要するに、
- 任意のベクトルの回転は、各成分ベクトルの回転に分解することができる
- 各成分ベクトルの回転は、回転の度合いを表すベクトルの成分を一部マイナスにしたり、X成分とY成分を入れ替えたものをかけることで実現できる
と言えば直観的に理解できるんじゃないかしら?
内積
内積とは、2つのベクトルがあったとき、を方向とに直角な方向の成分に分解して方向成分の大きさを求めるという計算ですわ。
(厳密に言えばこれはが単位ベクトルだった場合の説明ですわ。そうでない場合、方向成分の大きさにの大きさだけかけたものが求まりますわ)
演算子はドットで表され、次のような式になりますの。
言い換えれば、ベクトルの先端からベクトルの線分上に垂線を下した交点と原点との長さを求めていることになりますわね。
ただし、任意のベクトルとを考えてしまうとどうしても話がややこしくなるから、両方に対してベクトルをX軸まで回転させるような操作をしてから考えれば、あとはベクトルの先端からX軸に対して垂線を下した交点と原点との距離、つまりのX成分を求めるという話に単純化することができるわ。
これまた具体的なイメージは下の図を見なさい。
そしてこれは「ベクトルの回転」でやった内容と全く同じ操作をしてX成分だけ抜き取ることになりますのよ。
回転の式の上部分だけを見ればとなっているでしょう?これが内積の値ですのよ。
外積
外積がベクトルの基礎の中では一番直観的に理解するのが難しいですわね……。
何しろ2次元の図では説明できないのだから、とてもイメージがし辛いわ。
外積とは、2つのベクトルが与えられたとき、どちらのベクトルにも垂直でかつ大きさがを2辺とする平行四辺形の面積であるベクトルを求める計算ですわ。
(ただしこれは3次元の場合で、2次元上では1つのベクトルから1つのベクトルを、4次元上では3つのベクトルから1つのベクトルをというように次元によって計算に必要なベクトルの数が増えていくようですのよ)
演算子はクロスで表され、次のような3次元ベクトルの式になりますの。かける順番、引く順番を間違えると正しい値を求められないので注意しなければなりませんわよ。
を2辺とする平行四辺形の面積
まずはこちらを考えてみましょう。
実はこれ、内積とよく似た操作を行っているのよ。
をXY平面上に落とし込んだベクトルとの各成分同士の計算によって、クロス積のZ成分が定められているわね。
これ、どこかで見た記憶はないかしら?
そうよ!えらいわ!「ベクトルの回転」の式の下部分だけ見れば同じような式になっているわね!(正負が入れ替わっているのは計算の順番の関係だから適宜読み替えて頂戴!)
つまり、ベクトルを回転させたY座標を求めている、というわけですわね!
の大きさが1なら、これはそのままとが成す平行四辺形の大きさを求めていることになるんですのよ!
ベクトルに垂直な向き
これが外積の難しいところね。
けど、これも2次元で考えればある程度直観に落とし込むことができるわ。
2次元上のベクトルに垂直なベクトルを求めるには「X成分とY成分の比を入れ替えたベクトルを、Y軸(X軸でも可)に対してひっくり返す」という操作を行ってあげればいいのよ。
この考え方を3次元にも応用すると、「XY成分、YZ成分、ZX成分の比を入れ替えたベクトルを、Z軸(X軸、Y軸でも可)に対してひっくり返す」という操作になるわ。
「XY成分」と呼んでいるのは、2次元上では軸に対して垂線を引いていたところを、3次元上では面に対して垂線を引く必要があるからね。
そしてXY成分というのがまさにをXY平面上に落とし込んだ時に成す平行四辺形の面積で表されるのよ。この値をZ成分に入れることが「成分の比を入れ替える」という操作になっていますのよ。
そして「軸に対してひっくり返す」という操作の結果、外積の式で表されるような引き算の順番になっているのですわ。