Garbage Collection

塵も積もれば山

目次

Blog 利用状況

ニュース

C++とかC#とか数学ネタを投下していく予定です。

[その他のページ]
日々の四方山話を綴った日記出水の日記帳

書庫

日記カテゴリ

[数学][C]内積と外積を軽く分析

[数学]捻じれて縺れてこんがらかる の続きです。

今回は軽くおさらいです。
ベクトルを使うに当たり、三次元空間の内積、外積を解説します。

・内積
別名、スカラー積ともよばれ、ベクトルaとベクトルbの内積は一次元の数値となります。
要は、ベクトルじゃないよ、ってことです。

なお、内積が0になるときは、掛け合わせたベクトルが直交するときです。
これは二次元における内積と同じです。

なお、計算式は以下のようになります。
x、y、zそれぞれを掛け合わせてたします。

struct Vec3{
  int x, y, z;
};

int inner(const Vec3 &a, const Vec3 &b){
  return a.x * b.x + a.y * b.y + a.z * b.z;
}

・外積
別名、ベクトル積で、ベクトルaとベクトルbの内積はベクトルとなります。
この外積で出てくるベクトルはベクトルa、ベクトルbの両方に直交します。

前を表すベクトルと、上を表すベクトルから右を表すベクトルを作り出せます。
ここで、前と上を表すベクトルは必ずしも直行しなくてよいことが重要です。

なお、外積の結果が零ベクトルになることがありますが、
これは掛け合わせたベクトルが同一方向か逆方向を向いているときです。

先ほどの例だと、前を表すベクトルが真上を向いてしまうと、
北極点における東方向という感じで、右方向というのが決まらなくなってしまいます。
こういう場合に零ベクトルとなるわけです。

外積の計算式は以下の通りです。
x→y→z→x というローテーションを意識して、別々を掛けて引くというという形になります。

Vec3 outer(const Vec3 &a, const Vec3 &b){
  Vec3 c;
  c.x = a.y * b.z - a.z * b.y;
  c.y = a.z * b.x - a.x * b.z;
  c.z = a.x * b.y - a.y * b.x;
  return c;
}

投稿日時 : 2009年10月14日 9:55

Feedback

No comments posted yet.
タイトル
名前
Url
コメント