c++求两个三维向量求夹角代码
时间: 2024-01-25 12:06:32 浏览: 80
可以使用向量的点积和模长公式来求解两个三维向量的夹角。
假设有两个向量 a 和 b,则它们的夹角 θ 可以用以下公式计算:
cosθ = (a·b) / (|a| × |b|)
其中,· 表示向量的点积(即各个对应分量相乘之和),|a| 和 |b| 分别表示向量 a 和 b 的模长。
则两个向量的夹角为:
θ = acos((a·b) / (|a| × |b|))
下面是一个简单的 C 代码实现:
```c
#include <stdio.h>
#include <math.h>
typedef struct {
double x, y, z;
} Vector3;
// 计算向量模长
double length(Vector3 v) {
return sqrt(v.x * v.x + v.y * v.y + v.z * v.z);
}
// 计算向量点积
double dot(Vector3 a, Vector3 b) {
return a.x * b.x + a.y * b.y + a.z * b.z;
}
// 计算向量夹角(单位:弧度)
double angle(Vector3 a, Vector3 b) {
double cosTheta = dot(a, b) / (length(a) * length(b));
return acos(cosTheta);
}
int main() {
Vector3 a = {1, 2, 3};
Vector3 b = {4, 5, 6};
double theta = angle(a, b);
printf("The angle between a and b is %.2f radians.\n", theta);
return 0;
}
```
注意:上述代码中的向量夹角是以弧度为单位的。如果需要以角度为单位,则需要将弧度值乘以 180 / π。
阅读全文