C++求超过180度的两向量的夹角 代码
时间: 2024-12-28 20:35:41 浏览: 14
在C++中,计算两个向量之间的夹角(如果角度大于180度,则表示它们之间形成的角度小于180度但方向相反,通常我们会认为它们之间的夹角是从0到180度范围内的)可以使用弧度制和三角函数。这里是一个简单的示例代码:
```cpp
#include <cmath>
#include <iostream>
// 向量类,包含x和y坐标
class Vector {
public:
double x, y;
// 构造函数
Vector(double x = 0, double y = 0) : x(x), y(y) {}
// 计算两个向量之间的点积
double dotProduct(Vector const &other) const {
return x * other.x + y * other.y;
}
// 计算两个向量的模长
double magnitude() const {
return std::sqrt(x * x + y * y);
}
};
// 计算两个向量之间的夹角(注意角度范围是[0, pi])
double angleBetweenVectors(Vector const &v1, Vector const &v2) {
double dot = v1.dotProduct(v2);
double mag_product = v1.magnitude() * v2.magnitude();
if (mag_product == 0) { // 如果两个向量互相垂直(模长都为0或点积为0),则角度为pi
return M_PI;
} else {
return std::acos(dot / mag_product); // 使用反正弦计算夹角
}
}
int main() {
Vector vec1(3, 4);
Vector vec2(-4, 3);
double angle = angleBetweenVectors(vec1, vec2);
if (angle > M_PI) { // 转换为度数并处理大于180度的情况
angle -= 2 * M_PI; // 因为角度增加了2π,需要减去这个值
}
std::cout << "The angle between the vectors is: " << angle * 180 / M_PI << " degrees.\n";
return 0;
}
```
阅读全文