目次から探す
2次元配列の応用
2次元配列を用いた行列の演算
2次元配列は、行列の表現に非常に便利です。
行列の演算は、数値計算やグラフィックス処理などのさまざまな分野で使用されます。
まず、2次元配列を用いて行列を表現する方法を見てみましょう。
#include <stdio.h>
#define ROWS 3
#define COLS 3
void printMatrix(int matrix[ROWS][COLS]) {
for (int i = 0; i < ROWS; i++) {
for (int j = 0; j < COLS; j++) {
printf("%d ", matrix[i][j]);
}
printf("\n");
}
}
int main() {
int matrix[ROWS][COLS] = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
printMatrix(matrix);
return 0;
}
上記のコードでは、printMatrix
関数を定義しています。
この関数は、2次元配列で表された行列を出力するために使用されます。
main
関数では、3×3の行列を宣言し、初期化しています。
そして、printMatrix
関数を呼び出して行列を出力しています。
このコードを実行すると、以下のような結果が得られます。
1 2 3
4 5 6
7 8 9
このように、2次元配列を使用することで、行列を簡単に表現することができます。
行列の要素へのアクセスや演算も、2次元配列を使用することで直感的に行うことができます。
2次元配列を用いた画像処理の応用
2次元配列は、画像処理の分野でも広く使用されます。
画像はピクセルの集合であり、各ピクセルの色情報を2次元配列で表現することができます。
以下は、画像のグレースケール化を行うために2次元配列を使用する例です。
#include <stdio.h>
#define WIDTH 5
#define HEIGHT 5
void grayscale(int image[WIDTH][HEIGHT]) {
for (int i = 0; i < WIDTH; i++) {
for (int j = 0; j < HEIGHT; j++) {
int average = (image[i][j][0] + image[i][j][1] + image[i][j][2]) / 3;
image[i][j][0] = average;
image[i][j][1] = average;
image[i][j][2] = average;
}
}
}
void printImage(int image[WIDTH][HEIGHT][3]) {
for (int i = 0; i < WIDTH; i++) {
for (int j = 0; j < HEIGHT; j++) {
printf("(%d, %d, %d) ", image[i][j][0], image[i][j][1], image[i][j][2]);
}
printf("\n");
}
}
int main() {
int image[WIDTH][HEIGHT][3] = {
{{255, 0, 0}, {0, 255, 0}, {0, 0, 255}, {255, 255, 0}, {255, 0, 255}},
{{0, 255, 255}, {128, 128, 128}, {64, 64, 64}, {192, 192, 192}, {255, 255, 255}},
{{255, 0, 0}, {0, 255, 0}, {0, 0, 255}, {255, 255, 0}, {255, 0, 255}},
{{0, 255, 255}, {128, 128, 128}, {64, 64, 64}, {192, 192, 192}, {255, 255, 255}},
{{255, 0, 0}, {0, 255, 0}, {0, 0, 255}, {255, 255, 0}, {255, 0, 255}}
};
printf("Before grayscale:\n");
printImage(image);
grayscale(image);
printf("\nAfter grayscale:\n");
printImage(image);
return 0;
}
上記のコードでは、grayscale
関数を定義しています。
この関数は、画像の各ピクセルのRGB値の平均を計算し、グレースケール化します。
printImage
関数は、画像を出力するために使用されます。
このコードを実行すると、以下のような結果が得られます。
Before grayscale:
(255, 0, 0) (0, 255, 0) (0, 0, 255) (255, 255, 0) (255, 0, 255)
(0, 255, 255) (128, 128, 128) (64, 64, 64) (192, 192, 192) (255, 255, 255)
(255, 0, 0) (0, 255, 0) (0, 0, 255) (255, 255, 0) (255, 0, 255)
(0, 255, 255) (128, 128, 128) (64, 64, 64) (192, 192, 192) (255, 255, 255)
(255, 0, 0) (0, 255, 0) (0, 0, 255) (255, 255, 0) (255, 0, 255)
After grayscale:
(85, 85, 85) (85, 85, 85) (85, 85, 85) (170, 170, 170) (170, 170, 170)
(85, 85, 85) (128, 128, 128) (64, 64, 64) (128, 128, 128) (170, 170, 170)
(85, 85, 85) (85, 85, 85) (85, 85, 85) (170, 170, 170) (170, 170, 170)
(85, 85, 85) (128, 128, 128) (64, 64, 64) (128, 128, 128) (170, 170, 170)
(85, 85, 85) (85, 85, 85) (85, 85, 85) (170, 170, 170) (170, 170, 170)
このように、2次元配列を使用することで、画像処理の応用を行うことができます。
例では、グレースケール化を行っていますが、他の画像処理のアルゴリズムも同様に2次元配列を使用して実装することができます。
次のページ2次元配列を使用する注意点