计算两个向量matlab之间的角度

Wil*_*ems 2 matlab vector angle

如果这个问题看起来很基本,我很抱歉,但我还没有在网上找到一个好的答案.

我对矢量有点困惑,以及如何在matlab中使用它们.目前我有以下三对坐标(x和y):人1,人1和人2的未来位置.参见:2d视图中的三个点

现在我想计算"从人1到人2的矢量"和"从人1到人1未来的矢量"之间的角度.我发现了一些matlab函数可以用向量做到这一点,但我不确定我实际上是在为每个向量使用正确的输入.

所以现在我的问题是如何使用这些坐标(以及它们之间的差异)来计算图像的角度?

Rod*_*uis 5

尽管StefanM的解决方案是一种非常常见的解决方案,但它实际上计算成本很高,但最重要的是,当矢量很小和/或角度接近0或π时不正确 - 它实际上可能会产生略微负的角度,或稍微超过π.

因此,它给出了一种虚假的鲁棒感.我反而建议

theta = acos(min(1,max(-1, a(:).' * b(:) / norm(a) / norm(b) )));
Run Code Online (Sandbox Code Playgroud)

更稳健,更正确,在循环中运行时速度超过10倍,而且没有文档可以理解,因为它仍然主要与"经典"公式一致.