[C言語] ベクトルの大きさを計算する方法
C言語でベクトルの大きさを計算するには、通常、ユークリッド距離を用います。これは、ベクトルの各成分の二乗和の平方根を求めることで実現されます。
例えば、3次元ベクトルの場合、ベクトル(x, y, z)
の大きさはsqrt(x*x + y*y + z*z)
で計算されます。
この計算にはmath.h
ライブラリのsqrt
関数を使用します。
ベクトルの大きさは、物理学やコンピュータグラフィックスなど、さまざまな分野で重要な役割を果たします。
- C言語でのベクトルの大きさの計算方法
- 2次元からn次元までのベクトルの大きさを計算するプログラム例
- ベクトルの正規化の方法とその意義
- ベクトルの内積と外積の計算方法
- ベクトルの加算、減算、スカラー倍の実装方法
C言語でのベクトルの大きさの計算
必要なライブラリと関数
ベクトルの大きさを計算するためには、主に以下のライブラリと関数を使用します。
ライブラリ | 説明 |
---|---|
<stdio.h> | 標準入出力を行うためのライブラリ |
<math.h> | 数学関数を使用するためのライブラリ |
主に使用する関数は以下の通りです。
関数名 | 説明 |
---|---|
sqrt() | 平方根を計算する関数 |
2次元ベクトルの大きさを計算するプログラム例
以下は、2次元ベクトルの大きさを計算するプログラムの例です。
#include <stdio.h>
#include <math.h>
// 2次元ベクトルの大きさを計算する関数
double calculateMagnitude2D(double x, double y) {
return sqrt(x * x + y * y);
}
int main() {
double x = 3.0;
double y = 4.0;
double magnitude = calculateMagnitude2D(x, y);
printf("2次元ベクトルの大きさ: %f\n", magnitude);
return 0;
}
2次元ベクトルの大きさ: 5.000000
このプログラムでは、2次元ベクトル (3, 4) の大きさを計算しています。
結果は 5 で、これは直角三角形の斜辺の長さとしても知られています。
3次元ベクトルの大きさを計算するプログラム例
次に、3次元ベクトルの大きさを計算するプログラムの例を示します。
#include <stdio.h>
#include <math.h>
// 3次元ベクトルの大きさを計算する関数
double calculateMagnitude3D(double x, double y, double z) {
return sqrt(x * x + y * y + z * z);
}
int main() {
double x = 1.0;
double y = 2.0;
double z = 2.0;
double magnitude = calculateMagnitude3D(x, y, z);
printf("3次元ベクトルの大きさ: %f\n", magnitude);
return 0;
}
3次元ベクトルの大きさ: 3.000000
このプログラムでは、3次元ベクトル (1, 2, 2) の大きさを計算しています。
結果は 3 で、これはベクトルの長さを示しています。
n次元ベクトルの大きさを計算するプログラム例
n次元ベクトルの大きさを計算するには、配列を使用して任意の次元数に対応することができます。
#include <stdio.h>
#include <math.h>
// n次元ベクトルの大きさを計算する関数
double calculateMagnitudeND(double vector[], int n) {
double sum = 0.0;
for (int i = 0; i < n; i++) {
sum += vector[i] * vector[i];
}
return sqrt(sum);
}
int main() {
double vector[] = {1.0, 2.0, 2.0, 1.0};
int n = sizeof(vector) / sizeof(vector[0]);
double magnitude = calculateMagnitudeND(vector, n);
printf("n次元ベクトルの大きさ: %f\n", magnitude);
return 0;
}
n次元ベクトルの大きさ: 3.162278
このプログラムでは、4次元ベクトル (1, 2, 2, 1) の大きさを計算しています。
結果は約 3.162 で、任意の次元数に対応できる汎用的な計算方法です。
応用例
ベクトルの正規化
ベクトルの正規化とは、ベクトルの大きさを1にする操作です。
正規化されたベクトルは、方向を保持しつつ大きさが1になるため、方向ベクトルとして利用されます。
#include <stdio.h>
#include <math.h>
// 2次元ベクトルの正規化を行う関数
void normalizeVector2D(double *x, double *y) {
double magnitude = sqrt((*x) * (*x) + (*y) * (*y));
if (magnitude != 0) {
*x /= magnitude;
*y /= magnitude;
}
}
int main() {
double x = 3.0;
double y = 4.0;
normalizeVector2D(&x, &y);
printf("正規化されたベクトル: (%f, %f)\n", x, y);
return 0;
}
正規化されたベクトル: (0.600000, 0.800000)
このプログラムでは、2次元ベクトル (3, 4) を正規化しています。
結果は (0.6, 0.8) で、元のベクトルと同じ方向を持ちますが、大きさは1です。
ベクトルの内積と外積
ベクトルの内積は、2つのベクトルの相関を示すスカラー値を計算します。
外積は3次元ベクトルに対してのみ定義され、2つのベクトルに垂直なベクトルを生成します。
#include <stdio.h>
// 2次元ベクトルの内積を計算する関数
double dotProduct2D(double x1, double y1, double x2, double y2) {
return x1 * x2 + y1 * y2;
}
// 3次元ベクトルの外積を計算する関数
void crossProduct3D(double x1, double y1, double z1, double x2, double y2, double z2, double *cx, double *cy, double *cz) {
*cx = y1 * z2 - z1 * y2;
*cy = z1 * x2 - x1 * z2;
*cz = x1 * y2 - y1 * x2;
}
int main() {
double dot = dotProduct2D(1.0, 2.0, 3.0, 4.0);
printf("2次元ベクトルの内積: %f\n", dot);
double cx, cy, cz;
crossProduct3D(1.0, 0.0, 0.0, 0.0, 1.0, 0.0, &cx, &cy, &cz);
printf("3次元ベクトルの外積: (%f, %f, %f)\n", cx, cy, cz);
return 0;
}
2次元ベクトルの内積: 11.000000
3次元ベクトルの外積: (0.000000, 0.000000, 1.000000)
このプログラムでは、2次元ベクトルの内積と3次元ベクトルの外積を計算しています。
内積は11、外積は (0, 0, 1) です。
ベクトルの加算と減算
ベクトルの加算と減算は、対応する成分をそれぞれ加算または減算することで行います。
#include <stdio.h>
// 2次元ベクトルの加算を行う関数
void addVectors2D(double x1, double y1, double x2, double y2, double *rx,
double *ry) {
*rx = x1 + x2;
*ry = y1 + y2;
}
// 2次元ベクトルの減算を行う関数
void subtractVectors2D(double x1, double y1, double x2, double y2, double *rx,
double *ry) {
*rx = x1 - x2;
*ry = y1 - y2;
}
int main() {
double ax, ay, sx, sy;
addVectors2D(1.0, 2.0, 3.0, 4.0, &ax, &ay);
printf("2次元ベクトルの加算: (%f, %f)\n", ax, ay);
subtractVectors2D(1.0, 2.0, 3.0, 4.0, &sx, &sy);
printf("2次元ベクトルの減算: (%f, %f)\n", sx, sy);
return 0;
}
2次元ベクトルの加算: (4.000000, 6.000000)
2次元ベクトルの減算: (-2.000000, -2.000000)
このプログラムでは、2次元ベクトルの加算と減算を行っています。
加算の結果は (4, 6)、減算の結果は (-2, -2) です。
ベクトルのスカラー倍
ベクトルのスカラー倍は、ベクトルの各成分にスカラー値を掛けることで行います。
#include <stdio.h>
// 2次元ベクトルのスカラー倍を行う関数
void scaleVector2D(double *x, double *y, double scalar) {
*x *= scalar;
*y *= scalar;
}
int main() {
double x = 1.0;
double y = 2.0;
double scalar = 3.0;
scaleVector2D(&x, &y, scalar);
printf("スカラー倍されたベクトル: (%f, %f)\n", x, y);
return 0;
}
スカラー倍されたベクトル: (3.000000, 6.000000)
このプログラムでは、2次元ベクトル (1, 2) をスカラー値3で倍しています。
結果は (3, 6) で、元のベクトルの方向を保持しつつ大きさが3倍になっています。
よくある質問
まとめ
ベクトルの大きさをC言語で計算する方法を学ぶことで、基本的なベクトル演算の理解が深まります。
この記事では、2次元からn次元までのベクトルの大きさの計算方法や、応用例としてのベクトルの正規化、内積、外積、加算、減算、スカラー倍について解説しました。
これらの知識を活用して、より複雑なベクトル演算やプログラムの実装に挑戦してみてください。