ソフトウェア開発したい日記

「面白い!」と思った頭の体操や、数学の問題を載せていきます
その他ロードバイクででかけた先の写真や、ソフト開発のメモ等

ベクトル演算してくれるヘッダー その2

2010年06月19日 23時50分31秒 | ソフト開発日記
よくよく考えたら、構造体同士で足し算とか引き算とかできましたね。
ということで、昨日書いたやつをもっと短くしたやつ。

//各種3次元ベクトル演算ヘッダー
//ベクトルの和
CVector vectorPlus(CVector v1, CVector v2){
  CVector v0;
  v0 = v1 + v2;
  return v0;
}

//ベクトルの差
CVector vectorMinus(CVector v1, CVector v2) {
  CVector v0;
  v0 = v1 - v2;
  return v0;
}

//ベクトルのスカラー倍
CVector vectorMult(CVector v1, double d) {
  CVector v0;
  v0 = v1 * d;
  return v0;
}

//ベクトルの長さ
double vectorScalar(CVector v0){
  double d;
  d = sqrt(v0.x*v0.x + v0.y*v0.y + v0.z*v0.z);
  return d;
}

//ベクトルの長さの二乗
double vectorScalar2(CVector v0){
  double d;
  d = v0.x*v0.x + v0.y*v0.y + v0.z*v0.z;
  return d;
}

//ベクトルの内積
double innerProduct(CVector v0, CVector v1){
  return(v0.x*v1.x + v0.y*v1.y + v0.z*v1.z);
}

//ベクトルの外積
CVector outerProduct(CVector v1, CVector v2){
  CVector v0;
  double x, y, z;
  x = v1.y*v2.z - v1.z*v2.y;
  y = v1.z*v2.x - v1.x*v2.z;
  z = v1.x*v2.y - v1.y*v2.x;

  v0.x = x;
  v0.y = y;
  v0.z = z;
  return v0;
}

後半3つは無理そうかなぁ。特に外積は・・。
内積とか距離はいけるかも、と思って
ベクトルの構造体同士を掛け算してみたけど、案の定ダメでした。

ちなみに、構造体はこんな感じ。
typedef struct vector{
  double x, y, z;
}CVector;