在处理图像处理、科学计算或任何需要矩阵操作的领域,矩阵旋转是一个常见的需求。在二维空间中,逆时针旋转矩阵90度是一个基础且重要的操作。本文将揭秘如何使用C语言实现矩阵的逆时针旋转,并提供详细的代码示例...
在处理图像处理、科学计算或任何需要矩阵操作的领域,矩阵旋转是一个常见的需求。在二维空间中,逆时针旋转矩阵90度是一个基础且重要的操作。本文将揭秘如何使用C语言实现矩阵的逆时针旋转,并提供详细的代码示例。
对于一个给定的二维矩阵,逆时针旋转90度可以通过以下步骤实现:
这两个步骤结合起来,就实现了矩阵的逆时针旋转。
首先,我们需要一个函数来转置矩阵。以下是一个简单的C语言函数,用于转置一个二维矩阵:
void transposeMatrix(int rows, int cols, int matrix[rows][cols], int transposed[cols][rows]) { for (int i = 0; i < rows; i++) { for (int j = 0; j < cols; j++) { transposed[j][i] = matrix[i][j]; } }
}接下来,我们需要一个函数来反转矩阵的每一行。以下是一个简单的C语言函数,用于反转矩阵的每一行:
void reverseRows(int rows, int cols, int matrix[rows][cols]) { for (int i = 0; i < rows; i++) { for (int j = 0; j < cols / 2; j++) { int temp = matrix[i][j]; matrix[i][j] = matrix[i][cols - j - 1]; matrix[i][cols - j - 1] = temp; } }
}现在我们可以将上述两个函数结合起来,实现矩阵的逆时针旋转:
void rotateMatrix(int rows, int cols, int matrix[rows][cols]) { // 转置矩阵 int transposed[cols][rows]; transposeMatrix(rows, cols, matrix, transposed); // 反转每一行 reverseRows(cols, rows, transposed); // 将转置和反转后的矩阵复制回原矩阵 for (int i = 0; i < rows; i++) { for (int j = 0; j < cols; j++) { matrix[i][j] = transposed[i][j]; } }
}以下是一个完整的C语言程序,展示了如何使用上述函数来逆时针旋转一个矩阵:
#include
void transposeMatrix(int rows, int cols, int matrix[rows][cols], int transposed[cols][rows]) { for (int i = 0; i < rows; i++) { for (int j = 0; j < cols; j++) { transposed[j][i] = matrix[i][j]; } }
}
void reverseRows(int rows, int cols, int matrix[rows][cols]) { for (int i = 0; i < rows; i++) { for (int j = 0; j < cols / 2; j++) { int temp = matrix[i][j]; matrix[i][j] = matrix[i][cols - j - 1]; matrix[i][cols - j - 1] = temp; } }
}
void rotateMatrix(int rows, int cols, int matrix[rows][cols]) { int transposed[cols][rows]; transposeMatrix(rows, cols, matrix, transposed); reverseRows(cols, rows, transposed); for (int i = 0; i < rows; i++) { for (int j = 0; j < cols; j++) { matrix[i][j] = transposed[i][j]; } }
}
int main() { int matrix[3][3] = { {1, 2, 3}, {4, 5, 6}, {7, 8, 9} }; int rotated[3][3]; rotateMatrix(3, 3, matrix); printf("Original Matrix:\n"); for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) { printf("%d ", matrix[i][j]); } printf("\n"); } printf("Rotated Matrix:\n"); for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) { printf("%d ", rotated[i][j]); } printf("\n"); } return 0;
} 在这个示例中,我们定义了一个3x3的矩阵,并使用rotateMatrix函数将其逆时针旋转90度。然后,我们打印出原始矩阵和旋转后的矩阵,以便进行比较。