edo1z blog

プログラミングなどに関するブログです

ベクトルの内積の研究(1)

ベクトルの内積を研究する。

まずV,Uをそれぞれ、(3,5)、(6,3)としよう。
ベクトルの内積は下記のようになるものをいうらしい。

V●U = Vx * Ux + Vy * Uy

よって、内積は、

3 * 6 + 5 * 3 = 33

となる。

内積ではもう一つ成立する式があるらしい。

V●U = |V|*|U|*cosθ

ベクトルの大きさは、三平方の定理で求められるので、下記のようになる。

|V| = 3^2+5^2の平方根 = 5.830951894845301
|U| = 6^2+3^2の平方根 = 6.708203932499369


よって、cosθの値が求められる。javascriptでやると下記のようになる。

var vx = 3, vy = 5;
var ux = 6, uy = 3;
var VU = vx * ux + vy * uy;
var valV = Math.sqrt(3 * 3 + 5 * 5);
var valU = Math.sqrt(6 * 6 + 3 * 3);
var cos = VU / valV / valU;
document.write(cos);

となる。

javascriptのMath.acos(cos)という関数は、cosの値を入れると角度を返してくれるようなのでやってみよう。

var rad = Math.acos(cos);
document.write(rad);

これはラジアンだが、360 度表記にすると、

ということだ。

これが合っているかをatan2関数を使って確認してみよう。

var radV = Math.atan2(vy, vx);
var radU = Math.atan2(uy,ux);
document.write(radV - radU);

おお合っている。 しかし、内積が便利に使えるシーンがまだよく分からない。atan2関数があれば不要だったりするのかのう。