用C实现乘旋转矩阵
时间: 2024-02-12 21:04:09 浏览: 25
下面是一个简单的 C 代码示例,用于实现将一个向量乘以旋转矩阵:
```c
#include <stdio.h>
#include <math.h>
void vector_rotation(float v[3], float m[3][3])
{
float result[3] = {0.0};
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
result[i] += m[i][j] * v[j];
}
}
for (int i = 0; i < 3; i++) {
v[i] = result[i];
}
}
int main()
{
float v[3] = {1.0, 0.0, 0.0};
float angle = M_PI / 4;
float m[3][3] = {
{cos(angle), -sin(angle), 0.0},
{sin(angle), cos(angle), 0.0},
{0.0, 0.0, 1.0}
};
vector_rotation(v, m);
printf("The rotated vector is (%f, %f, %f)\n", v[0], v[1], v[2]);
return 0;
}
```
这个示例中,我们首先定义了一个 `vector_rotation` 函数,它将一个三维向量 `v` 乘以一个 3x3 的旋转矩阵 `m`。我们遍历旋转矩阵的每一行和向量的每一列,并将它们的乘积相加,最后将结果存储到 `result` 数组中。最后,我们将 `result` 数组的值复制回 `v` 数组中。
在主函数中,我们定义了一个初始向量 `v`,并定义了一个旋转角度 `angle`(以弧度为单位)。然后,我们定义了一个旋转矩阵 `m`,它将向量绕 Z 轴旋转 `angle` 弧度。最后,我们调用 `vector_rotation` 函数,将旋转矩阵应用于向量,并输出结果。
需要注意的是,在 C 语言中,数组下标从 0 开始,因此 `m[0][0]` 表示旋转矩阵的第一行第一列元素,`v[0]` 表示向量的第一个分量。