C++ 计算两个 3D vector 之间的角度(0 到 360)

标签 c++ math 3d trigonometry angle

假设我有 2 个 3D vector

Vec3 v1, v2;

v1.x = 203;
v1.y = 355;
v1.z = 922;

v2.x = 6;
v2.y = 13;
v2.z = 198;

如何计算 v1v2 之间的角度? IE。最终答案将在 0360

之间

我已经尝试过

Vec3 angle = v1 - v2;

还有其他一些事情,但我似乎无法让它正常工作。

最佳答案

您需要使用dot product为此,一旦您拥有了,您就可以按照 standard method 进行操作。 。 示例:

#include <cmath>

float dot(Vec3 a, Vec3 b)  //calculates dot product of a and b
{
    return a.x * b.x + a.y * b.y + a.z * b.z;
}

float mag(Vec3 a)  //calculates magnitude of a
{
    return std::sqrt(a.x * a.x + a.y * a.y + a.z * a.z);
}

int main()
{
    Vec3 v1, v2;

    v1.x = 203;
    v1.y = 355;
    v1.z = 922;

    v2.x = 6;
    v2.y = 13;
    v2.z = 198;

    float angle = std::acos(dot(v1,v2)/(mag(v1)*mag(v2)));
}

关于C++ 计算两个 3D vector 之间的角度(0 到 360),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43749543/

相关文章:

c++ - 前向声明一个 typedef

c++ - 在 xcode 的调试器中查看 IL2CPP 的 string_t 的内容

c++ - 为什么显示 - -"cannot pass objects of non-trivially-copyable type"?

C++ 从非英文文件名和非英文文本中读取

c - 舍入错误 : The Sum

Java FX 3D : Objects not respecting their Z coordinate

math - 找到两个位置的交集

algorithm - 使用 O(log(n)) 实现最近向量搜索算法

3d - 如何使用八叉树数据结构查找相邻/相邻立方体?

php - 如何在 PHP 中将照片映射到 3D 表面?