探せばありそうだけど、以前Javaで作ったやつをC向けに作ってみた。
3次元ベクトルを表す構造体CVectorを用意して、後は以下のとおり。
//各種3次元ベクトル演算ヘッダー
//ベクトルの和
CVector vectorPlus(CVector v1, CVector v2){
CVector v0;
v0.x = v1.x + v2.x;
v0.y = v1.y + v2.y;
v0.z = v1.z + v2.z;
return v0;
}
//ベクトルの差
CVector vectorMinus(CVector v1, CVector v2) {
CVector v0;
v0.x = v1.x - v2.x;
v0.y = v1.y - v2.y;
v0.z = v1.z - v2.z;
return v0;
}
//ベクトルのスカラー倍
CVector vectorMult(CVector v1, double d) {
CVector v0;
v0.x = v1.x * d;
v0.y = v1.y * d;
v0.z = v1.z * 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次元ベクトルを表す構造体CVectorを用意して、後は以下のとおり。
//各種3次元ベクトル演算ヘッダー
//ベクトルの和
CVector vectorPlus(CVector v1, CVector v2){
CVector v0;
v0.x = v1.x + v2.x;
v0.y = v1.y + v2.y;
v0.z = v1.z + v2.z;
return v0;
}
//ベクトルの差
CVector vectorMinus(CVector v1, CVector v2) {
CVector v0;
v0.x = v1.x - v2.x;
v0.y = v1.y - v2.y;
v0.z = v1.z - v2.z;
return v0;
}
//ベクトルのスカラー倍
CVector vectorMult(CVector v1, double d) {
CVector v0;
v0.x = v1.x * d;
v0.y = v1.y * d;
v0.z = v1.z * 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;
}