内積メモ

ベクトルの内積は簡単だし、よく使うわりに、(自分は)意外に忘れがちだったりするのでメモ。

話を簡単にするために、長さ1の単位ベクトル同士の内積を考えます。

実は、内積の定義は、意外に難しいようです

が、ここでは3DCGなどでよく使う式を考えます

 内積(A B) = |A||B| Cos θ
    =  Ax*Bx + Ay*By

http://boxheadroom.com/wp/wp-content/uploads/2010/02/dot0.png

  • ベクトルAとベクトルBのなす角度をθとおきます。
  • 点Aから線分OBに垂線を降ろし、交点をHとすると、 
    • (= 点Aを線分OBに射影)
OH= cos θ  , ただし、ABは単位ベクトル

幾何的な性質がわかったところで、次に、代数的な内積の計算方法と一致することを調べます。

欲しい式は下記。

 内積(A B) = |A||B| Cos θ
    =  Ax*Bx + Ay*By

http://boxheadroom.com/wp/wp-content/uploads/2010/02/dot21.png

  • さて、ここからは、ベクトルA Bを複素数 (複素平面) だと思うことにします。
  • Bを上下ひっくりかえした複素共役ベクトルをB’ とおきます
  • B’は、 -β方向に向いた単位ベクトルと同等です
*は掛け算記号
A   = Ax + i * Ay
B   = Bx + i * By
B' = Bx - i * By

ここで、オイラーの公式から、 A Bの xy座標の具体的な関数を考えると

http://boxheadroom.com/wp/wp-content/uploads/2010/02/dot3.png

A = Cos α + i Sin α  
B = Cos β + i Sin β
ただし、 i は虚数単位  i * i = -1

計算したいのは

θ = α - β

なので、指数関数の法則より
http://boxheadroom.com/wp/wp-content/uploads/2010/02/dot51.png

普通に掛け算します

 Exp (-i (α-β))
= Exp(-i α)*Exp(-i *-β)
= A * B'
= (Ax + i * Ay)*(Bx - i * By)
=(Ax*Bx - i*i*Ay*By) -  Ax*i*By + i*Ay*Bx
= (Ax*Bx +  Ay*By ) + i* (Ay*Bx-Ax*By) 

変数を戻します

Ax=Cos α    Ay = Sin α
Bx=Cos β    By = Sin β
A * B'
=(Ax*Bx +  Ay*By ) + i* (Ay*Bx-Ax*By)
= Cos α *Cos β + Sin α * Sin β
         + i* ( Sin α* Cosβ - Cos α * Sin β)
 
三角関数の加法定理により、
= ( Cos α *Cos -β - ( Sin α * Sin -β)
         + i* ( Sin α* Cos-β + Cos α * Sin -β)
 
= Cos ( α -β ) + i *Sin ( α -β )
= Cos ( θ ) + i *Sin ( θ ) 

ここで、実数部のみに注目すると、

Ax* Bx + Ay * By = Cos (θ)

これで、欲しかった 『二つのベクトルがなす角度のCos』 の計算式が求められました。 単位ベクトルでない場合は、ベクトルの長さ(絶対値)で割って単位ベクトルにしてから計算すれば同じことになるので、、、、

つまり、あとから絶対値で割っても同じなので、

Cos( A B ) = (Ax * Bx + Ay* By ) ÷ (|A|*|B|)
内積  Ax * Bx + Ay * By
= |A|*|B|*Cos θ  

おしまい

説明

上記の説明だと、試験に書くと出題範囲の関係などでバツになるかもです。

数学ガールの1巻か、2巻にも、内積ではないのですが、複素数の掛け算、割り算という形で、同様の演算に関する詳しい解説が載ってた気がします。 

で、なんで内積を調べてたかというと、三角関数の正弦定理、余弦定理について調べてて、ちょっとあやふやだったから復習したかったのです。3DCGにもよく出てきますし。(ベクトル間の角度とか、シェーディング関係とか)

CGだと、内積自体よりも、角度θが欲しいことが多かったりしますけれども。

Tags:

Related posts

Tags:

Comments are closed.