ベクトルの内積

 ベクトルの内積とは一体どういったものか?(・ω・ )モニュ?
既にこの時点で意味が分からない状態に陥っている人用の説明です。
 色々なサイトで内積の説明を検索をしてもいきなり公式が書いてあって
「ベクトル?内積?」って感じの人には全く役に立ちません。
まぁ、そういった人は 3D プログラミングなんてもんをやろうって人ではないと思いますが…。
しかし「どうしても 3D プログラミングがやってみたい!」って人間が私です。
そう、私も「ベクトル?内積?」って側の人間です。
 高校時代には全く数学なんて興味がありませんでした。授業も 9 割は熟睡してました。
そんな人間がいきなりベクトルなんて代物を扱う事が出来るはずもなく挫折するでしょう。
ってか、挫折しました…。(とある数学書籍には数学者でも挫折はよくある事らしいです。
しかし暫く経ってからまた考え直したりするらしいです。それで理解を深めたりするらしいです。)
けど、どうしても 3D プログラミングがやってみたかったのでもう一度挑戦…。
で、なんとか内積理解したつもりです。
 内積は一体どういった時に役に立つか?ってのが私の初めの疑問でした。
3D プログラミングでは内積って単語が出てきても意味がワカラン…。
言ってしまうと「ベクトル同士の有効成分」が分かります。
この時点では「有効成分」の意味が分からないと思いますので図に書いてみましょ。
■A->x
A が一生懸命 x の方向に向かって荷物を引っ張っています。
そこへ B がやって来て手伝ってやろうか?って事になりました。
けれどこの B が曲者で A と一緒の方向に向かって引っ張ってくれればいいのに、
あえて y の方向に向かって引っ張り始めました。
y

B
■A→x
この時の B(力) がどれだけ A(質点) の為に役にたったか?ってのを表したのが「内積」です。
と、この時点で内積の公式を書いておきましょ。
a・b = |a| |b| cosθ
ここでは公式に関する説明はしません。
ってか、証明なんてしても自分自身が分かってないのと他のサイトの方が詳しく書いてあるし…(単なる言い訳です…。)
でもって、上の B に関してですが頑張った度をパ−セントで表すと 0% です。
何故 0% かと言うとここで A と B との角度(なす角)を見てみます。
A から B に向かってくるっと見ると 90 度ですね。
この 90 度を上の公式のθに当てはめます。
a・b = |a| |b| cos90°
内積の公式の "a・b" やら "|a| |b|" って部分は必要ありません…。
cos90 ってのだけを見てみるとこれは 0 ですね。
そう、この cos の値が B の A に対する頑張った度(仕事量)になります。
実際にはベクトルの力は必要なく方向のみを使用します。
(ベクトルの力も考えた場合は A の 2 倍の力で B が上方向に引っ張ったら…って事があるんで…。)
まぁ、それはさておき B が頑張った度は 0% です。
じゃ、次は B が A と同じ方向に引っ張った場合を見てみましょ。
■AB → x
この場合はなす角は 0 度という事で
cos0° = 1
になるので 100% って事になります。ちなみに 0 から 1 までの範囲を 0% から 100% にします。
さらに下の場合はどうなるでしょ?
x' ← B■A → x
こりゃあかん!全く正反対の方向に向かって引っ張っています。
この場合の A と B のなす角は 180 度という事で
cos180° = -1
-100%!! んなアホな…。って事なってます。
上の 3 つ例でだいたいどういった性質があるか分かってもらえたと思います。
大まかに同じ方向の場合はプラスになり反対方向側よりの場合はマイナスになります。
 「有効成分=あるベクトルに対するあるベクトルの役立ち度」である事が分かります。
これが分かればあとは応用です。
視線ベクトルとポリゴンの面の法線ベクトル(法線ベクトルを求めるには外積を使う)を使ってカリング処理が可能になります。
2 つのベクトルの内積がプラスならば同じ方向を向いているって事で描画する必要がない。
反対にマイナスなら面がこっちを向いているので描画対象と。
ようは "θ< 90°" が見えている面になります。けど出来れば 90°も描画対象になった方が
いいので "θ<= 90°" が描画対象になる面になります。
他には面と光のベクトルの内積で光の辺り具合も分かったりします。
まぁ、こんな感じですがある程度内積は理解して頂けましたか?